UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

103 lines (101 loc) 15.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /* * Copyright (c) 2019 by Filestack. * Some rights reserved. * * 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 utils = tslib_1.__importStar(require("./index")); describe('utils:index', function () { describe('getVersion', function () { it('should return version string to replace', function () { expect(utils.getVersion()).toEqual("JS-4.0.3"); }); }); describe('isFacebook', function () { var originalAgent = navigator.userAgent; var mockAgent = function (_value) { return ({ get: function () { return _value; }, set: function (v) { return _value = v; }, }); }; var defineAgent = function (agent) { try { Object.defineProperty(navigator, 'userAgent', mockAgent(agent)); } catch (e) { navigator = Object.create(navigator, { userAgent: mockAgent(agent), }); } }; beforeEach(function () { mockAgent(originalAgent); }); describe('should recognize all of facebook browser useragents', function () { var agents = [ 'Mozilla/5.0 (Linux; Android 7.1.1; Build/LMY47O.H18; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/127.0.0.22.69;]', 'Mozilla/5.0 (Linux; Android 7.0; SM-G930F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/127.0.0.22.69;]', 'Mozilla/5.0 (Linux; Android 7.0; MHA-L29 Build/HUAWEIMHA-L29; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/127.0.0.22.69;]', 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 [FBAN/FBIOS;FBAV/96.0.0.45.70;FBBV/60548545;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iOS;FBSV/10.3.2;FBSS/2;FBCR/E-Plus;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0]', 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 [FBAN/FBIOS;FBAV/90.0.0.51.69;FBBV/56254015;FBDV/iPhone6,2;FBMD/iPhone;FBSN/iOS;FBSV/10.2;FBSS/2;FBCR/1&1;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0]', 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 [FBAN/FBIOS;FBAV/96.0.0.45.70;FBBV/60548545;FBDV/iPhone8,1;FBMD/iPhone;FBSN/iOS;FBSV/10.3.2;FBSS/2;FBCR/o2-de;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0]', 'Mozilla/5.0 (Linux; Android 4.4.4; G7-L01 Build/HuaweiG7-L01) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 [FB_IAB/MESSENGER;FBAV/121.0.0.15.70;]', ]; var _loop_1 = function (i) { it("Should accept: ".concat(agents[i], " as correct"), function () { defineAgent(agents[i]); expect(utils.isFacebook()).toBeTruthy(); }); }; for (var i in agents) { _loop_1(i); } }); describe('should not recognize user agent as facebook', function () { var agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246', 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1', ]; var _loop_2 = function (i) { it("Should accept: ".concat(agents[i], " as wrong"), function () { defineAgent(agents[i]); expect(utils.isFacebook()).toBeTruthy(); }); }; for (var i in agents) { _loop_2(i); } }); }); describe('md5', function () { it('should return correct md5 value', function () { expect(utils.md5(Buffer.from('test'))).toEqual('CY9rzUYh03PK3k6DJie09g=='); }); }); describe('b64', function () { it('should return correct b65 value', function () { expect(utils.b64('testtext')).toEqual('dGVzdHRleHQ='); }); it('should escape chars to make b64 url without safe mode - char "+"', function () { expect(utils.b64('*0eijATh#"I$PR)s<uTa}{t>E"LC:L', false)).toEqual('KjBlaWpBVGgjIkkkUFIpczx1VGF9e3Q+RSJMQzpM'); }); it('should escape chars to make b64 url with safe mode - char "+"', function () { expect(utils.b64('*0eijATh#"I$PR)s<uTa}{t>E"LC:L', true)).toEqual('KjBlaWpBVGgjIkkkUFIpczx1VGF9e3Q-RSJMQzpM'); }); }); }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXguc3BlYy5icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILHFEQUFpQztBQUVqQyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLFFBQVEsQ0FBQyxZQUFZLEVBQUU7UUFDckIsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLEVBQUU7UUFDckIsSUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUUxQyxJQUFNLFNBQVMsR0FBRyxVQUFBLE1BQU0sSUFBSSxPQUFBLENBQUM7WUFDM0IsR0FBRyxFQUFFLGNBQU0sT0FBQSxNQUFNLEVBQU4sQ0FBTTtZQUNqQixHQUFHLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxNQUFNLEdBQUcsQ0FBQyxFQUFWLENBQVU7U0FDdkIsQ0FBQyxFQUgwQixDQUcxQixDQUFDO1FBRUgsSUFBTSxXQUFXLEdBQUcsVUFBQyxLQUFLO1lBQ3hCLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2pFO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztpQkFDNUIsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUM7UUFFRixVQUFVLENBQUM7WUFDVCxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMscURBQXFELEVBQUU7WUFDOUQsSUFBTSxNQUFNLEdBQUc7Z0JBQ2Isd0xBQXdMO2dCQUN4TCwyTEFBMkw7Z0JBQzNMLGlNQUFpTTtnQkFDak0sbVFBQW1RO2dCQUNuUSw2UEFBNlA7Z0JBQzdQLGtRQUFrUTtnQkFDbFEsOExBQThMO2FBQy9MLENBQUM7b0NBRU8sQ0FBQztnQkFDUixFQUFFLENBQUMseUJBQWtCLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWEsRUFBRTtvQkFDM0MsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxDQUFDOztZQUpMLEtBQUssSUFBSSxDQUFDLElBQUksTUFBTTt3QkFBWCxDQUFDO2FBS1Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyw2Q0FBNkMsRUFBRTtZQUN0RCxJQUFNLE1BQU0sR0FBRztnQkFDYixpSUFBaUk7Z0JBQ2pJLG1IQUFtSDtnQkFDbkgsc0hBQXNIO2dCQUN0SCxnRkFBZ0Y7YUFDakYsQ0FBQztvQ0FFTyxDQUFDO2dCQUNSLEVBQUUsQ0FBQyx5QkFBa0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFXLEVBQUU7b0JBQ3pDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsQ0FBQzs7WUFKTCxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQU07d0JBQVgsQ0FBQzthQUtUO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDZCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDZCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUU7WUFDckUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUNqSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRTtZQUNsRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJsaWIvdXRpbHMvaW5kZXguc3BlYy5icm93c2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vaW5kZXgnO1xuXG5kZXNjcmliZSgndXRpbHM6aW5kZXgnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdnZXRWZXJzaW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHZlcnNpb24gc3RyaW5nIHRvIHJlcGxhY2UnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXRpbHMuZ2V0VmVyc2lvbigpKS50b0VxdWFsKGBKUy1Ae1ZFUlNJT059YCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0ZhY2Vib29rJywgKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gICAgY29uc3QgbW9ja0FnZW50ID0gX3ZhbHVlID0+ICh7XG4gICAgICBnZXQ6ICgpID0+IF92YWx1ZSxcbiAgICAgIHNldDogKHYpID0+IF92YWx1ZSA9IHYsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZpbmVBZ2VudCA9IChhZ2VudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvciwgJ3VzZXJBZ2VudCcsIG1vY2tBZ2VudChhZ2VudCkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBuYXZpZ2F0b3IgPSBPYmplY3QuY3JlYXRlKG5hdmlnYXRvciwge1xuICAgICAgICAgIHVzZXJBZ2VudDogbW9ja0FnZW50KGFnZW50KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgbW9ja0FnZW50KG9yaWdpbmFsQWdlbnQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCByZWNvZ25pemUgYWxsIG9mIGZhY2Vib29rIGJyb3dzZXIgdXNlcmFnZW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50cyA9IFtcbiAgICAgICAgJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCA3LjEuMTsgQnVpbGQvTE1ZNDdPLkgxODsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS81OC4wLjMwMjkuODMgTW9iaWxlIFNhZmFyaS81MzcuMzYgW0ZCX0lBQi9GQjRBO0ZCQVYvMTI3LjAuMC4yMi42OTtdJyxcbiAgICAgICAgJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCA3LjA7IFNNLUc5MzBGIEJ1aWxkL05SRDkwTTsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS81OC4wLjMwMjkuODMgTW9iaWxlIFNhZmFyaS81MzcuMzYgW0ZCX0lBQi9GQjRBO0ZCQVYvMTI3LjAuMC4yMi42OTtdJyxcbiAgICAgICAgJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCA3LjA7IE1IQS1MMjkgQnVpbGQvSFVBV0VJTUhBLUwyOTsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS81OC4wLjMwMjkuODMgTW9iaWxlIFNhZmFyaS81MzcuMzYgW0ZCX0lBQi9GQjRBO0ZCQVYvMTI3LjAuMC4yMi42OTtdJyxcbiAgICAgICAgJ01vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTBfM18yIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwMy4yLjQgKEtIVE1MLCBsaWtlIEdlY2tvKSBNb2JpbGUvMTRGODkgW0ZCQU4vRkJJT1M7RkJBVi85Ni4wLjAuNDUuNzA7RkJCVi82MDU0ODU0NTtGQkRWL2lQaG9uZTcsMjtGQk1EL2lQaG9uZTtGQlNOL2lPUztGQlNWLzEwLjMuMjtGQlNTLzI7RkJDUi9FLVBsdXM7RkJJRC9waG9uZTtGQkxDL2RlX0RFO0ZCT1AvNTtGQlJWLzBdJyxcbiAgICAgICAgJ01vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTBfMiBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDIuMy4xMiAoS0hUTUwsIGxpa2UgR2Vja28pIE1vYmlsZS8xNEM5MiBbRkJBTi9GQklPUztGQkFWLzkwLjAuMC41MS42OTtGQkJWLzU2MjU0MDE1O0ZCRFYvaVBob25lNiwyO0ZCTUQvaVBob25lO0ZCU04vaU9TO0ZCU1YvMTAuMjtGQlNTLzI7RkJDUi8xJjE7RkJJRC9waG9uZTtGQkxDL2RlX0RFO0ZCT1AvNTtGQlJWLzBdJyxcbiAgICAgICAgJ01vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTBfM18yIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwMy4yLjQgKEtIVE1MLCBsaWtlIEdlY2tvKSBNb2JpbGUvMTRGODkgW0ZCQU4vRkJJT1M7RkJBVi85Ni4wLjAuNDUuNzA7RkJCVi82MDU0ODU0NTtGQkRWL2lQaG9uZTgsMTtGQk1EL2lQaG9uZTtGQlNOL2lPUztGQlNWLzEwLjMuMjtGQlNTLzI7RkJDUi9vMi1kZTtGQklEL3Bob25lO0ZCTEMvZGVfREU7RkJPUC81O0ZCUlYvMF0nLFxuICAgICAgICAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDQuNC40OyBHNy1MMDEgQnVpbGQvSHVhd2VpRzctTDAxKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvMzMuMC4wLjAgTW9iaWxlIFNhZmFyaS81MzcuMzYgW0ZCX0lBQi9NRVNTRU5HRVI7RkJBVi8xMjEuMC4wLjE1LjcwO10nLFxuICAgICAgXTtcblxuICAgICAgZm9yIChsZXQgaSBpbiBhZ2VudHMpIHtcbiAgICAgICAgaXQoYFNob3VsZCBhY2NlcHQ6ICR7YWdlbnRzW2ldfSBhcyBjb3JyZWN0YCwgKCkgPT4ge1xuICAgICAgICAgIGRlZmluZUFnZW50KGFnZW50c1tpXSk7XG4gICAgICAgICAgZXhwZWN0KHV0aWxzLmlzRmFjZWJvb2soKSkudG9CZVRydXRoeSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgbm90IHJlY29nbml6ZSB1c2VyIGFnZW50IGFzIGZhY2Vib29rJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnRzID0gW1xuICAgICAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQyLjAuMjMxMS4xMzUgU2FmYXJpLzUzNy4zNiBFZGdlLzEyLjI0NicsXG4gICAgICAgICdNb3ppbGxhLzUuMCAoWDExOyBDck9TIHg4Nl82NCA4MTcyLjQ1LjApIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81MS4wLjI3MDQuNjQgU2FmYXJpLzUzNy4zNicsXG4gICAgICAgICdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xMV8yKSBBcHBsZVdlYktpdC82MDEuMy45IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi85LjAuMiBTYWZhcmkvNjAxLjMuOScsXG4gICAgICAgICdNb3ppbGxhLzUuMCAoWDExOyBVYnVudHU7IExpbnV4IHg4Nl82NDsgcnY6MTUuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8xNS4wLjEnLFxuICAgICAgXTtcblxuICAgICAgZm9yIChsZXQgaSBpbiBhZ2VudHMpIHtcbiAgICAgICAgaXQoYFNob3VsZCBhY2NlcHQ6ICR7YWdlbnRzW2ldfSBhcyB3cm9uZ2AsICgpID0+IHtcbiAgICAgICAgICBkZWZpbmVBZ2VudChhZ2VudHNbaV0pO1xuICAgICAgICAgIGV4cGVjdCh1dGlscy5pc0ZhY2Vib29rKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtZDUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCBtZDUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXRpbHMubWQ1KEJ1ZmZlci5mcm9tKCd0ZXN0JykpKS50b0VxdWFsKCdDWTlyelVZaDAzUEszazZESmllMDlnPT0nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2I2NCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGI2NSB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1dGlscy5iNjQoJ3Rlc3R0ZXh0JykpLnRvRXF1YWwoJ2RHVnpkSFJsZUhRPScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlc2NhcGUgY2hhcnMgdG8gbWFrZSBiNjQgdXJsIHdpdGhvdXQgc2FmZSBtb2RlIC0gY2hhciBcIitcIicsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1dGlscy5iNjQoJyowZWlqQVRoI1wiSSRQUilzPHVUYX17dD5FXCJMQzpMJywgZmFsc2UpKS50b0VxdWFsKCdLakJsYVdwQlZHZ2pJa2trVUZJcGN6eDFWR0Y5ZTNRK1JTSk1RenBNJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVzY2FwZSBjaGFycyB0byBtYWtlIGI2NCB1cmwgd2l0aCBzYWZlIG1vZGUgLSBjaGFyIFwiK1wiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHV0aWxzLmI2NCgnKjBlaWpBVGgjXCJJJFBSKXM8dVRhfXt0PkVcIkxDOkwnLCB0cnVlKSkudG9FcXVhbCgnS2pCbGFXcEJWR2dqSWtra1VGSXBjengxVkdGOWUzUS1SU0pNUXpwTScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19