@windingtree/org.id-resolver 2.4.2 → 3.0.0-beta.7

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js DELETED
@@ -1,98 +0,0 @@
1
- "use strict";require("core-js/modules/es.symbol.js");require("core-js/modules/es.array.filter.js");require("core-js/modules/es.object.get-own-property-descriptor.js");require("core-js/modules/es.array.for-each.js");require("core-js/modules/web.dom-collections.for-each.js");require("core-js/modules/es.object.get-own-property-descriptors.js");require("core-js/modules/es.promise.js");require("core-js/modules/es.array.slice.js");require("core-js/modules/es.array.from.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("regenerator-runtime/runtime.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.object.assign.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.date.to-iso-string.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.regexp.constructor.js");require("core-js/modules/es.regexp.to-string.js");require("core-js/modules/es.string.match.js");require("core-js/modules/es.array.join.js");require("core-js/modules/es.object.keys.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/es.function.name.js");function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var packageJson=require("../package.json");var _require=require("./utils/vc"),validateVc=_require.validateVc;var didDocumentSchema=require("org.json-schema-0.3");var didDocumentSchema04=require("org.json-schema-0.4");var _require2=require("@windingtree/org.id"),OrgIdContract=_require2.OrgIdContract;var _require3=require("@windingtree/org.id-lif-deposit"),LifDepositContract=_require3.LifDepositContract;var Ajv=require("ajv");// Utilities
2
- var expect=require("./utils/expect");var _require4=require("./utils/document"),makeHash=_require4.makeHash;// Modules
3
- var httpFetchMethod=require("./http");var linkedInFetchMethod=require("./linkedIn");var twitterFetchMethod=require("./twitter");var whoisService=require("./whois");var _require5=require("./dns"),getDnsData=_require5.getDnsData,ResourceRecordTypes=_require5.ResourceRecordTypes;var _require6=require("./utils/constants"),zeroAddress=_require6.zeroAddress;// Errors types definitions
4
- var checksTypes=["DID_SYNTAX","ORGID","DID_DOCUMENT","TRUST_ASSERTIONS","LIF_STAKE"];/**
5
- * ORG.ID resolver class
6
- * @class OrgIdResolver
7
- */var OrgIdResolver=/*#__PURE__*/function(){/**
8
- * Creates an instance of OrgIdResolver.
9
- * @param {Obejct} options Contructor parameters
10
- * @memberof OrgIdResolver
11
- */function OrgIdResolver(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};_classCallCheck(this,OrgIdResolver);expect.all(options,{web3:{type:"object"},orgId:{type:"address"},lifDeposit:{type:"address",required:false},authorizedTrustProofsIssuers:{type:"object",required:false}});this.methodName="orgid";this.fetchSocialMethods={};this.fetchMethods={};this.serviceMethods={};this.web3=options.web3;this.orgIdAddress=options.orgId;this.lifDepositAddress=options.lifDeposit;this.authorizedTrustProofsIssuers=options.authorizedTrustProofsIssuers;this.validator=null;this.resolutionStart=null;this.resultTemplate=null;this.cache=null;this.result=null;this.reset()}/**
12
- * Sets defaults
13
- * @memberof OrgIdResolver
14
- */_createClass(OrgIdResolver,[{key:"reset",value:function reset(){this.validator=new Ajv;this.resolutionStart=null;this.resultTemplate=_objectSpread(_objectSpread({didDocument:null,organization:null,checks:checksTypes.map(function(type){return{type:type,passed:["TRUST_ASSERTIONS","LIF_STAKE"].includes(type)?false:true}}),trust:[]},this.lifDepositAddress?{lifDeposit:null}:{}),{},{resolverMetadata:{retrieved:null,duration:null}});this.cache={};this.result=Object.assign({},this.resultTemplate)}/**
15
- * Resolvs DID into its document
16
- * and makes proper validations and verifications
17
- * @memberof OrgIdResolver
18
- * @param {string} did DID
19
- * @returns {Promise<{Object}>} Resolving result
20
- */},{key:"resolve",value:function(){var _resolve=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(did){return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:expect.all({did:did},{did:{type:"string"}});this.reset();this.resolutionStart=Date.now();_context.prev=3;_context.next=6;return this.validateDidSyntax(did);case 6:_context.next=8;return this.getOrganization(this.result.id);case 8:_context.next=10;return this.getDidDocument(this.result.organization);case 10:_context.next=12;return this.validateDidDocument(this.result.didDocument);case 12:_context.next=14;return this.verifyTrustRecords(this.result.didDocument);case 14:_context.next=16;return this.verifyLifStake(this.result.id);case 16:_context.next=21;break;case 18:_context.prev=18;_context.t0=_context["catch"](3);throw new Error("Resolving flow has been terminated due to serious error: ".concat(_context.t0.message,"; ").concat(_context.t0.stack));case 21:this.result.resolverMetadata.version=packageJson.version;this.result.resolverMetadata.retrieved=new Date().toISOString();this.result.resolverMetadata.duration=Date.now()-this.resolutionStart;this.result.resolverMetadata.orgIdAddress=this.orgIdAddress;return _context.abrupt("return",this.result);case 26:case"end":return _context.stop();}}},_callee,this,[[3,18]])}));function resolve(_x){return _resolve.apply(this,arguments)}return resolve}()/**
21
- * Validates the given DID syntax
22
- * @memberof OrgIdResolver
23
- * @param {string} did DID
24
- * @returns {Promise<{string}>} Organization Id
25
- */},{key:"validateDidSyntax",value:function(){var _validateDidSyntax=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(did){var parts,subParts;return regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:expect.all({did:did},{did:{type:"string"}});parts=did.split(":");if(parts[0]!=="did"){this.addCheckResult({type:"DID_SYNTAX",error:"Invalid DID prefix: ".concat(parts[0]),throw:true})}if(parts[1]!==this.methodName){this.addCheckResult({type:"DID_SYNTAX",error:"Unsupported DID method: ".concat(parts[1]),throw:true})}// Split paths, method parameters and queries
26
- subParts=parts[2].split(/(?:#|;|\?)/);if(!new RegExp("^0x[a-fA-F0-9]{64}$").test(subParts[0])){this.addCheckResult({type:"DID_SYNTAX",error:"Invalid method specific Id: ".concat(subParts[0]),throw:true})}this.result.id=subParts[0];return _context2.abrupt("return",this.result.id);case 8:case"end":return _context2.stop();}}},_callee2,this)}));function validateDidSyntax(_x2){return _validateDidSyntax.apply(this,arguments)}return validateDidSyntax}()/**
27
- * Validates the given DID document
28
- * @memberof OrgIdResolver
29
- * @param {Object} didDocument DID document
30
- * @returns {Promise<{boolean}>} Validation result
31
- */},{key:"validateDidDocument",value:function(){var _validateDidDocument=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee3(didDocument){var _this=this;var schema,result;return regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:expect.all({didDocument:didDocument},{didDocument:{type:"object"}});schema=didDocument.schemaVersion&&didDocument.schemaVersion.match(/^0.4/)?didDocumentSchema04:didDocumentSchema;// Use the Ajv validator
32
- // didDocumentSchema is obtained from @windingtree/org.json-schema
33
- result=this.validator.validate(schema,didDocument);if(this.validator.errors!==null){this.validator.errors.map(function(detail){return _this.addCheckResult({type:"DID_DOCUMENT",warning:detail})})}return _context3.abrupt("return",result);case 5:case"end":return _context3.stop();}}},_callee3,this)}));function validateDidDocument(_x3){return _validateDidDocument.apply(this,arguments)}return validateDidDocument}()/**
34
- * Verifies trust objects from the DID document
35
- * @memberof OrgIdResolver
36
- * @param {Object} didDocument DID document
37
- * @returns {Promise}
38
- */},{key:"verifyTrustRecords",value:function(){var _verifyTrustRecords=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee4(didDocument){var trust,id,isProofsFound,i,assertion,assertionContent,proofFound,whoisInfo,_iterator,_step,record,rootDomain;return regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:if(!(!didDocument.trust||!Array.isArray(didDocument.trust.assertions))){_context4.next=2;break}return _context4.abrupt("return",{});case 2:// Cloned trust section
39
- trust=JSON.parse(JSON.stringify(didDocument.trust));// Organization Id part of the DID
40
- id=didDocument.id.match(/^did:orgid:(0x[a-fA-F0-9]{64}){1}$/im)[1];// Proofs existence flag
41
- isProofsFound=false;// Assertions verification
42
- i=0;case 6:if(!(i<trust.assertions.length)){_context4.next=105;break}assertion=trust.assertions[i];assertionContent=void 0;proofFound=false;// WHOIS information about domain
43
- whoisInfo=void 0;_context4.t0=assertion.type;_context4.next=_context4.t0==="dns"?14:_context4.t0==="social"?50:_context4.t0==="domain"?50:97;break;case 14:if(ResourceRecordTypes[assertion.proof]){_context4.next=17;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: proof value \"").concat(assertion.proof,"\"\n not in the range of [").concat(Object.keys(ResourceRecordTypes).join(","),"]")});return _context4.abrupt("break",98);case 17:_context4.prev=17;_context4.next=20;return getDnsData(assertion.claim,assertion.proof);case 20:assertionContent=_context4.sent;if(!(assertionContent.length===0)){_context4.next=24;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: claim source is empty")});return _context4.abrupt("break",98);case 24:_iterator=_createForOfIteratorHelper(assertionContent);_context4.prev=25;_iterator.s();case 27:if((_step=_iterator.n()).done){_context4.next=34;break}record=_step.value;if(!RegExp(didDocument.id,"g").test(record.data)){_context4.next=32;break}proofFound=true;return _context4.abrupt("break",34);case 32:_context4.next=27;break;case 34:_context4.next=39;break;case 36:_context4.prev=36;_context4.t1=_context4["catch"](25);_iterator.e(_context4.t1);case 39:_context4.prev=39;_iterator.f();return _context4.finish(39);case 42:if(!proofFound){this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: proof not found")})}_context4.next=49;break;case 45:_context4.prev=45;_context4.t2=_context4["catch"](17);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: cannot get the proof")});return _context4.abrupt("break",98);case 49:return _context4.abrupt("break",98);case 50:_context4.prev=50;if(!(assertion.type==="domain"&&this.serviceMethods.whois)){_context4.next=58;break}rootDomain=assertion.claim.match(/[^.]+\.[^.]+$/)[0];_context4.next=55;return this.serviceMethods.whois.fetch(rootDomain);case 55:whoisInfo=_context4.sent;proofFound=true;return _context4.abrupt("break",98);case 58:_context4.next=63;break;case 60:_context4.prev=60;_context4.t3=_context4["catch"](50);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: unable to fetch whois information")});case 63:if(!assertion.proof.match(/^did.orgid/)){_context4.next=78;break}_context4.prev=64;_context4.next=67;return validateVc(this,assertion.proof,assertion.claim);case 67:proofFound=true;return _context4.abrupt("break",98);case 71:_context4.prev=71;_context4.t4=_context4["catch"](64);console.log("###",_context4.t4);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: VC DID not pass verification")});return _context4.abrupt("break",98);case 76:_context4.next=96;break;case 78:if(RegExp("^(http|https)://(www.){0,1}".concat(assertion.claim.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))).test(assertion.proof)){_context4.next=81;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: claim is not in the domain namespace")});return _context4.abrupt("break",98);case 81:_context4.prev=81;_context4.next=84;return this.fetchFileByUri(assertion.proof);case 84:assertionContent=_context4.sent;assertionContent=_typeof(assertionContent)==="object"?JSON.stringify(assertionContent):assertionContent;_context4.next=92;break;case 88:_context4.prev=88;_context4.t5=_context4["catch"](81);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: cannot get the proof")});return _context4.abrupt("break",98);case 92:if(RegExp(id,"im").test(assertionContent)){_context4.next=95;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: DID not found in the claim")});return _context4.abrupt("break",98);case 95:proofFound=true;case 96:return _context4.abrupt("break",98);case 97:// For cases where unknown assertion type has been provided
44
- this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: unknown assertion type \"").concat(assertion.type,"\"")});case 98:assertion.verified=proofFound;assertion=_objectSpread(_objectSpread({},assertion),whoisInfo?{whois:whoisInfo}:{});trust.assertions[i]=assertion;if(proofFound){isProofsFound=true}case 102:i++;_context4.next=6;break;case 105:if(isProofsFound){// Just mark as passed
45
- this.addCheckResult({type:"TRUST_ASSERTIONS"})}this.result.trust=trust;return _context4.abrupt("return",this.result.trust);case 108:case"end":return _context4.stop();}}},_callee4,this,[[17,45],[25,36,39,42],[50,60],[64,71],[81,88]])}));function verifyTrustRecords(_x4){return _verifyTrustRecords.apply(this,arguments)}return verifyTrustRecords}()/**
46
- * Get the organization data
47
- * @memberof OrgIdResolver
48
- * @param {string} id The organization Id
49
- * @returns {Promise}
50
- */},{key:"verifyLifStake",value:function(){var _verifyLifStake=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee5(id){var deposit,withdrawalRequest,lifDepositContract,requestSource;return regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:if(this.lifDepositAddress){_context5.next=2;break}return _context5.abrupt("return");case 2:expect.all({id:id},{id:{type:"string"}});deposit=0;withdrawalRequest=null;lifDepositContract=new this.web3.eth.Contract(LifDepositContract.abi,this.lifDepositAddress);_context5.prev=6;_context5.next=9;return lifDepositContract.methods["balanceOf(bytes32)"](id).call();case 9:deposit=_context5.sent;_context5.next=12;return lifDepositContract.methods["getWithdrawalRequest(bytes32)"](id).call();case 12:requestSource=_context5.sent;if(requestSource.exists){withdrawalRequest={value:requestSource.value.toString(),withdrawTime:requestSource.withdrawTime.toString()}}this.result.lifDeposit={deposit:deposit,withdrawalRequest:withdrawalRequest};if(deposit!=="0"&&!withdrawalRequest){// Just mark as passed
51
- this.addCheckResult({type:"LIF_STAKE"})}else if(deposit!=="0"&&withdrawalRequest){this.addCheckResult({type:"LIF_STAKE",warning:"The organization sent a withdrawal request"})}_context5.next=21;break;case 18:_context5.prev=18;_context5.t0=_context5["catch"](6);this.addCheckResult({type:"LIF_STAKE",error:_context5.t0.message});case 21:case"end":return _context5.stop();}}},_callee5,this,[[6,18]])}));function verifyLifStake(_x5){return _verifyLifStake.apply(this,arguments)}return verifyLifStake}()/**
52
- * Fetch a file by the given URI
53
- * @memberof OrgIdResolver
54
- * @param {string} uri The file URI
55
- * @returns {Promise<{Object|string}>} Fetched file
56
- */},{key:"fetchFileByUri",value:function(){var _fetchFileByUri=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee6(uri){var fetch,f,_f,document;return regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:expect.all({uri:uri},{uri:{type:"string"}});if(!(uri==="")){_context6.next=3;break}throw new Error("Fetcher error: empty URI");case 3:if(!(Object.keys(this.fetchMethods).length===0)){_context6.next=5;break}throw new Error("Incomplete configuration: at least one fetching method should be registered");case 5:_context6.t0=regeneratorRuntime.keys(this.fetchSocialMethods);case 6:if((_context6.t1=_context6.t0()).done){_context6.next=13;break}f=_context6.t1.value;if(!RegExp(this.fetchSocialMethods[f].pattern).test(uri)){_context6.next=11;break}fetch=this.fetchSocialMethods[f].fetch;return _context6.abrupt("break",13);case 11:_context6.next=6;break;case 13:if(fetch){_context6.next=22;break}_context6.t2=regeneratorRuntime.keys(this.fetchMethods);case 15:if((_context6.t3=_context6.t2()).done){_context6.next=22;break}_f=_context6.t3.value;if(!RegExp(this.fetchMethods[_f].pattern).test(uri)){_context6.next=20;break}fetch=this.fetchMethods[_f].fetch;return _context6.abrupt("break",22);case 20:_context6.next=15;break;case 22:if(fetch){_context6.next=24;break}throw new Error("Fetcher error: unable to determine the fetching method for URI: ".concat(uri));case 24:_context6.next=26;return fetch(uri);case 26:document=_context6.sent;if(document){_context6.next=29;break}throw new Error("Fetcher error: file not found by the given URI: ".concat(uri));case 29:return _context6.abrupt("return",document);case 30:case"end":return _context6.stop();}}},_callee6,this)}));function fetchFileByUri(_x6){return _fetchFileByUri.apply(this,arguments)}return fetchFileByUri}()/**
57
- * Fetch a DID document by the given Id
58
- * @memberof OrgIdResolver
59
- * @param {Object} organization The organization object
60
- * @returns {Promise<{Object}>} DID document
61
- */},{key:"getDidDocument",value:function(){var _getDidDocument=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee8(){var _this2=this;var organization,orgId,orgJsonHash,orgJsonUri,orgJsonUriBackup1,orgJsonUriBackup2,firstSettled,didDocument,didObject,_args8=arguments;return regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:organization=_args8.length>0&&_args8[0]!==undefined?_args8[0]:{};expect.all(organization,{orgId:{type:"hash"},orgJsonUri:{type:"string"},orgJsonUriBackup1:{type:"string",required:false},orgJsonUriBackup2:{type:"string",required:false}});orgId=organization.orgId,orgJsonHash=organization.orgJsonHash,orgJsonUri=organization.orgJsonUri,orgJsonUriBackup1=organization.orgJsonUriBackup1,orgJsonUriBackup2=organization.orgJsonUriBackup2;// Resolve first settled promise
62
- firstSettled=/*#__PURE__*/function(){var _ref=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee7(fetches){var result,errors,_iterator2,_step2,fetchPromise;return regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:errors=[];_iterator2=_createForOfIteratorHelper(fetches);_context7.prev=2;_iterator2.s();case 4:if((_step2=_iterator2.n()).done){_context7.next=18;break}fetchPromise=_step2.value;_context7.prev=6;_context7.next=9;return fetchPromise();case 9:result=_context7.sent;return _context7.abrupt("return",result);case 13:_context7.prev=13;_context7.t0=_context7["catch"](6);errors.push(_context7.t0.message);case 16:_context7.next=4;break;case 18:_context7.next=23;break;case 20:_context7.prev=20;_context7.t1=_context7["catch"](2);_iterator2.e(_context7.t1);case 23:_context7.prev=23;_iterator2.f();return _context7.finish(23);case 26:throw new Error("Unable to fetch DID Document from given sources.\n ".concat(errors.length?errors.join("; "):""));case 27:case"end":return _context7.stop();}}},_callee7,null,[[2,20,23,26],[6,13]])}));return function firstSettled(_x7){return _ref.apply(this,arguments)}}();_context8.prev=4;_context8.next=7;return firstSettled([orgJsonUri,orgJsonUriBackup1,orgJsonUriBackup2].map(function(uri){return function(){return _this2.fetchFileByUri(uri)}}));case 7:didDocument=_context8.sent;_context8.next=13;break;case 10:_context8.prev=10;_context8.t0=_context8["catch"](4);this.addCheckResult({type:"DID_DOCUMENT",error:_context8.t0.message,throw:true});case 13:try{didObject=JSON.parse(didDocument)}catch(error){this.addCheckResult({type:"DID_DOCUMENT",error:"Broken ORG.JSON. Unable to parse"})}// Comparing of the stored and actual hash
63
- if(makeHash(didDocument,this.web3)!==orgJsonHash){this.addCheckResult({type:"DID_DOCUMENT",error:"Invalid DID Document hash"})}// DID document should containing a proper DID
64
- if("did:".concat(this.methodName,":").concat(orgId)!==didObject.id){this.addCheckResult({type:"DID_DOCUMENT",error:"Invalid DID Document id. Expected to be: ".concat(orgId,",\n but actual is: ").concat(didObject.id)})}this.result.didDocument=didObject;return _context8.abrupt("return",this.result.didDocument);case 18:case"end":return _context8.stop();}}},_callee8,this,[[4,10]])}));function getDidDocument(){return _getDidDocument.apply(this,arguments)}return getDidDocument}()/**
65
- * Register a fetching method for social accounts
66
- * @memberof OrgIdResolver
67
- * @param {Object} methodConfig The fetching method configuration config
68
- * @param {Object} methodOptions The fetching method options (API key, etc)
69
- */},{key:"registerSocialFetchMethod",value:function registerSocialFetchMethod(){var methodConfig=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var methodOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};expect.all(methodConfig,{name:{type:"string"},pattern:{type:"string"},fetch:{type:"function"}});this.fetchSocialMethods[methodConfig.name]=_objectSpread(_objectSpread({},methodConfig),{},{fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee9(uri){var options;return regeneratorRuntime.wrap(function _callee9$(_context9){while(1){switch(_context9.prev=_context9.next){case 0:options=methodOptions;_context9.next=3;return methodConfig.fetch(uri,options);case 3:return _context9.abrupt("return",_context9.sent);case 4:case"end":return _context9.stop();}}},_callee9)}));function fetch(_x8){return _fetch.apply(this,arguments)}return fetch}()})}/**
70
- * Register a fetching method
71
- * @memberof OrgIdResolver
72
- * @param {Object} methodConfig The fetching method configuration config
73
- */},{key:"registerFetchMethod",value:function registerFetchMethod(){var methodConfig=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};expect.all(methodConfig,{name:{type:"string"},pattern:{type:"string"},fetch:{type:"function"}});this.fetchMethods[methodConfig.name]=methodConfig}/**
74
- * Register a service method
75
- * @memberof OrgIdResolver
76
- * @param {Object} methodConfig The service method configuration config
77
- */},{key:"registerService",value:function registerService(){var methodConfig=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};expect.all(methodConfig,{name:{type:"string"},fetch:{type:"function"}});this.serviceMethods[methodConfig.name]=methodConfig}/**
78
- * Get the OrgId contract instance
79
- * @memberof OrgIdResolver
80
- * @returns {Object} The OrgId contract instance
81
- */},{key:"getOrgIdContract",value:function getOrgIdContract(){if(this.cache.orgIdContract){return this.cache.orgIdContract}this.cache.orgIdContract=new this.web3.eth.Contract(OrgIdContract.abi,this.orgIdAddress);return this.cache.orgIdContract}/**
82
- * Get the organization data
83
- * @memberof OrgIdResolver
84
- * @param {string} id The organization Id
85
- * @returns {Promise<Object>} The OrgId contract instance
86
- */},{key:"getOrganization",value:function(){var _getOrganization=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee10(id){var orgIdContract,org,exists,orgId,orgJsonHash,orgJsonUri,orgJsonUriBackup1,orgJsonUriBackup2,parentOrgId,owner,director,isActive,isDirectorshipAccepted;return regeneratorRuntime.wrap(function _callee10$(_context10){while(1){switch(_context10.prev=_context10.next){case 0:expect.all({id:id},{id:{type:"string"}});if(!this.cache.organization){_context10.next=3;break}return _context10.abrupt("return",this.cache.organization);case 3:orgIdContract=this.getOrgIdContract();_context10.next=6;return orgIdContract.methods["getOrganization(bytes32)"](id).call();case 6:org=_context10.sent;exists=org.exists,orgId=org.orgId,orgJsonHash=org.orgJsonHash,orgJsonUri=org.orgJsonUri,orgJsonUriBackup1=org.orgJsonUriBackup1,orgJsonUriBackup2=org.orgJsonUriBackup2,parentOrgId=org.parentOrgId,owner=org.owner,director=org.director,isActive=org.isActive,isDirectorshipAccepted=org.isDirectorshipAccepted;if(!exists){this.addCheckResult({type:"ORGID",error:"Organization ".concat(id," not found"),throw:true})}if(!isActive){this.addCheckResult({type:"ORGID",warning:"Organization ".concat(id," is disabled")})}if(director!==zeroAddress&&!isDirectorshipAccepted){this.addCheckResult({type:"ORGID",warning:"Directorship of the organization ".concat(id," is not accepted")})}// Save normalised origanization object
87
- this.cache.organization={orgId:orgId,orgJsonHash:orgJsonHash,orgJsonUri:orgJsonUri,orgJsonUriBackup1:orgJsonUriBackup1,orgJsonUriBackup2:orgJsonUriBackup2,parentOrgId:parentOrgId,owner:owner,director:director,isActive:isActive,isDirectorshipAccepted:isDirectorshipAccepted};this.result.organization=this.cache.organization;return _context10.abrupt("return",this.result.organization);case 14:case"end":return _context10.stop();}}},_callee10,this)}));function getOrganization(_x9){return _getOrganization.apply(this,arguments)}return getOrganization}()/**
88
- * Get the list of registered fetching methods names
89
- * @memberof OrgIdResolver
90
- * @returns {string[]} Registered fetching nethods names
91
- */},{key:"getFetchMethods",value:function getFetchMethods(){return Object.keys(this.fetchMethods)}/**
92
- * Adds a specific check result
93
- * and throws a error if this behaviour is set in the options
94
- * @memberof OrgIdResolver
95
- * @returns {string[]} Registered fetching nethods names
96
- */},{key:"addCheckResult",value:function addCheckResult(options){expect.all(options,{type:{type:"enum",values:checksTypes},error:{type:"string",required:false},warning:{type:"string",required:false},throw:{type:"boolean",required:false}});var type=options.type,error=options.error,warning=options.warning;// Extract specific check
97
- this.result.checks=this.result.checks.map(function(check){if(check.type===type){check=_objectSpread(_objectSpread(_objectSpread({},check),error?{errors:[].concat(_toConsumableArray(check.errors||[]),[error])}:{}),warning?{warnings:[].concat(_toConsumableArray(check.warning||[]),[warning])}:{});check.passed=!check.errors||check.errors&&check.errors.length===0}return check});if(options.throw){throw new Error("".concat(type,": ").concat(error))}}},{key:"spawnResolver",value:function spawnResolver(){var spawnedResolver=new OrgIdResolver({web3:this.web3,orgId:this.orgIdAddress,lifDeposit:this.lifDepositAddress});spawnedResolver.fetchSocialMethods=this.fetchSocialMethods;spawnedResolver.fetchMethods=this.fetchMethods;spawnedResolver.serviceMethods=this.serviceMethods;return spawnedResolver}}]);return OrgIdResolver}();module.exports.OrgIdResolver=OrgIdResolver;module.exports.httpFetchMethod=httpFetchMethod;module.exports.linkedInFetchMethod=linkedInFetchMethod;module.exports.twitterFetchMethod=twitterFetchMethod;module.exports.whoisService=whoisService;module.exports.checksTypes=Object.assign({},checksTypes);
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJwYWNrYWdlSnNvbiIsInJlcXVpcmUiLCJ2YWxpZGF0ZVZjIiwiZGlkRG9jdW1lbnRTY2hlbWEiLCJkaWREb2N1bWVudFNjaGVtYTA0IiwiT3JnSWRDb250cmFjdCIsIkxpZkRlcG9zaXRDb250cmFjdCIsIkFqdiIsImV4cGVjdCIsIm1ha2VIYXNoIiwiaHR0cEZldGNoTWV0aG9kIiwibGlua2VkSW5GZXRjaE1ldGhvZCIsInR3aXR0ZXJGZXRjaE1ldGhvZCIsIndob2lzU2VydmljZSIsImdldERuc0RhdGEiLCJSZXNvdXJjZVJlY29yZFR5cGVzIiwiemVyb0FkZHJlc3MiLCJjaGVja3NUeXBlcyIsIk9yZ0lkUmVzb2x2ZXIiLCJvcHRpb25zIiwiYWxsIiwid2ViMyIsInR5cGUiLCJvcmdJZCIsImxpZkRlcG9zaXQiLCJyZXF1aXJlZCIsImF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnMiLCJtZXRob2ROYW1lIiwiZmV0Y2hTb2NpYWxNZXRob2RzIiwiZmV0Y2hNZXRob2RzIiwic2VydmljZU1ldGhvZHMiLCJvcmdJZEFkZHJlc3MiLCJsaWZEZXBvc2l0QWRkcmVzcyIsInZhbGlkYXRvciIsInJlc29sdXRpb25TdGFydCIsInJlc3VsdFRlbXBsYXRlIiwiY2FjaGUiLCJyZXN1bHQiLCJyZXNldCIsImRpZERvY3VtZW50Iiwib3JnYW5pemF0aW9uIiwiY2hlY2tzIiwibWFwIiwicGFzc2VkIiwiaW5jbHVkZXMiLCJ0cnVzdCIsInJlc29sdmVyTWV0YWRhdGEiLCJyZXRyaWV2ZWQiLCJkdXJhdGlvbiIsIk9iamVjdCIsImFzc2lnbiIsImRpZCIsIkRhdGUiLCJub3ciLCJ2YWxpZGF0ZURpZFN5bnRheCIsImdldE9yZ2FuaXphdGlvbiIsImlkIiwiZ2V0RGlkRG9jdW1lbnQiLCJ2YWxpZGF0ZURpZERvY3VtZW50IiwidmVyaWZ5VHJ1c3RSZWNvcmRzIiwidmVyaWZ5TGlmU3Rha2UiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsInZlcnNpb24iLCJ0b0lTT1N0cmluZyIsInBhcnRzIiwic3BsaXQiLCJhZGRDaGVja1Jlc3VsdCIsImVycm9yIiwidGhyb3ciLCJzdWJQYXJ0cyIsIlJlZ0V4cCIsInRlc3QiLCJzY2hlbWEiLCJzY2hlbWFWZXJzaW9uIiwibWF0Y2giLCJ2YWxpZGF0ZSIsImVycm9ycyIsImRldGFpbCIsIndhcm5pbmciLCJBcnJheSIsImlzQXJyYXkiLCJhc3NlcnRpb25zIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiaXNQcm9vZnNGb3VuZCIsImkiLCJsZW5ndGgiLCJhc3NlcnRpb24iLCJhc3NlcnRpb25Db250ZW50IiwicHJvb2ZGb3VuZCIsIndob2lzSW5mbyIsInByb29mIiwia2V5cyIsImpvaW4iLCJjbGFpbSIsInJlY29yZCIsImRhdGEiLCJ3aG9pcyIsInJvb3REb21haW4iLCJmZXRjaCIsImNvbnNvbGUiLCJsb2ciLCJyZXBsYWNlIiwiZmV0Y2hGaWxlQnlVcmkiLCJ2ZXJpZmllZCIsImRlcG9zaXQiLCJ3aXRoZHJhd2FsUmVxdWVzdCIsImxpZkRlcG9zaXRDb250cmFjdCIsImV0aCIsIkNvbnRyYWN0IiwiYWJpIiwibWV0aG9kcyIsImNhbGwiLCJyZXF1ZXN0U291cmNlIiwiZXhpc3RzIiwidmFsdWUiLCJ0b1N0cmluZyIsIndpdGhkcmF3VGltZSIsInVyaSIsImYiLCJwYXR0ZXJuIiwiZG9jdW1lbnQiLCJvcmdKc29uVXJpIiwib3JnSnNvblVyaUJhY2t1cDEiLCJvcmdKc29uVXJpQmFja3VwMiIsIm9yZ0pzb25IYXNoIiwiZmlyc3RTZXR0bGVkIiwiZmV0Y2hlcyIsImZldGNoUHJvbWlzZSIsInB1c2giLCJkaWRPYmplY3QiLCJtZXRob2RDb25maWciLCJtZXRob2RPcHRpb25zIiwibmFtZSIsIm9yZ0lkQ29udHJhY3QiLCJnZXRPcmdJZENvbnRyYWN0Iiwib3JnIiwicGFyZW50T3JnSWQiLCJvd25lciIsImRpcmVjdG9yIiwiaXNBY3RpdmUiLCJpc0RpcmVjdG9yc2hpcEFjY2VwdGVkIiwidmFsdWVzIiwiY2hlY2siLCJ3YXJuaW5ncyIsInNwYXduZWRSZXNvbHZlciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJreExBQUEsR0FBTUEsQ0FBQUEsV0FBVyxDQUFHQyxPQUFPLENBQUMsaUJBQUQsQ0FBM0IsQ0FDQSxhQUF1QkEsT0FBTyxDQUFDLFlBQUQsQ0FBOUIsQ0FBUUMsVUFBUixVQUFRQSxVQUFSLENBQ0EsR0FBTUMsQ0FBQUEsaUJBQWlCLENBQUdGLE9BQU8sQ0FBQyxxQkFBRCxDQUFqQyxDQUNBLEdBQU1HLENBQUFBLG1CQUFtQixDQUFHSCxPQUFPLENBQUMscUJBQUQsQ0FBbkMsQ0FDQSxjQUEwQkEsT0FBTyxDQUFDLHFCQUFELENBQWpDLENBQVFJLGFBQVIsV0FBUUEsYUFBUixDQUNBLGNBQStCSixPQUFPLENBQUMsaUNBQUQsQ0FBdEMsQ0FBUUssa0JBQVIsV0FBUUEsa0JBQVIsQ0FDQSxHQUFNQyxDQUFBQSxHQUFHLENBQUdOLE9BQU8sQ0FBQyxLQUFELENBQW5CLENBRUE7QUFDQSxHQUFNTyxDQUFBQSxNQUFNLENBQUdQLE9BQU8sQ0FBQyxnQkFBRCxDQUF0QixDQUNBLGNBQXFCQSxPQUFPLENBQUMsa0JBQUQsQ0FBNUIsQ0FBUVEsUUFBUixXQUFRQSxRQUFSLENBRUE7QUFDQSxHQUFNQyxDQUFBQSxlQUFlLENBQUdULE9BQU8sQ0FBQyxRQUFELENBQS9CLENBQ0EsR0FBTVUsQ0FBQUEsbUJBQW1CLENBQUdWLE9BQU8sQ0FBQyxZQUFELENBQW5DLENBQ0EsR0FBTVcsQ0FBQUEsa0JBQWtCLENBQUdYLE9BQU8sQ0FBQyxXQUFELENBQWxDLENBQ0EsR0FBTVksQ0FBQUEsWUFBWSxDQUFHWixPQUFPLENBQUMsU0FBRCxDQUE1QixDQUNBLGNBQTRDQSxPQUFPLENBQUMsT0FBRCxDQUFuRCxDQUFRYSxVQUFSLFdBQVFBLFVBQVIsQ0FBb0JDLG1CQUFwQixXQUFvQkEsbUJBQXBCLENBQ0EsY0FBd0JkLE9BQU8sQ0FBQyxtQkFBRCxDQUEvQixDQUFRZSxXQUFSLFdBQVFBLFdBQVIsQ0FFQTtBQUNBLEdBQU1DLENBQUFBLFdBQVcsQ0FBRyxDQUNoQixZQURnQixDQUVoQixPQUZnQixDQUdoQixjQUhnQixDQUloQixrQkFKZ0IsQ0FLaEIsV0FMZ0IsQ0FBcEIsQ0FRQTtBQUNBO0FBQ0E7QUFDQSxHLEdBQ01DLENBQUFBLGEseUJBRUY7QUFDSjtBQUNBO0FBQ0E7QUFDQSxPQUNJLHdCQUEyQixJQUFkQyxDQUFBQSxPQUFjLDJEQUFKLEVBQUkscUNBQ3ZCWCxNQUFNLENBQUNZLEdBQVAsQ0FBV0QsT0FBWCxDQUFvQixDQUNoQkUsSUFBSSxDQUFFLENBQ0ZDLElBQUksQ0FBRSxRQURKLENBRFUsQ0FJaEJDLEtBQUssQ0FBRSxDQUNIRCxJQUFJLENBQUUsU0FESCxDQUpTLENBT2hCRSxVQUFVLENBQUUsQ0FDUkYsSUFBSSxDQUFFLFNBREUsQ0FFUkcsUUFBUSxDQUFFLEtBRkYsQ0FQSSxDQVdoQkMsNEJBQTRCLENBQUUsQ0FDMUJKLElBQUksQ0FBRSxRQURvQixDQUUxQkcsUUFBUSxDQUFFLEtBRmdCLENBWGQsQ0FBcEIsRUFpQkEsS0FBS0UsVUFBTCxDQUFrQixPQUFsQixDQUNBLEtBQUtDLGtCQUFMLENBQTBCLEVBQTFCLENBQ0EsS0FBS0MsWUFBTCxDQUFvQixFQUFwQixDQUNBLEtBQUtDLGNBQUwsQ0FBc0IsRUFBdEIsQ0FDQSxLQUFLVCxJQUFMLENBQVlGLE9BQU8sQ0FBQ0UsSUFBcEIsQ0FDQSxLQUFLVSxZQUFMLENBQW9CWixPQUFPLENBQUNJLEtBQTVCLENBQ0EsS0FBS1MsaUJBQUwsQ0FBeUJiLE9BQU8sQ0FBQ0ssVUFBakMsQ0FDQSxLQUFLRSw0QkFBTCxDQUFvQ1AsT0FBTyxDQUFDTyw0QkFBNUMsQ0FFQSxLQUFLTyxTQUFMLENBQWlCLElBQWpCLENBQ0EsS0FBS0MsZUFBTCxDQUF1QixJQUF2QixDQUNBLEtBQUtDLGNBQUwsQ0FBc0IsSUFBdEIsQ0FDQSxLQUFLQyxLQUFMLENBQWEsSUFBYixDQUNBLEtBQUtDLE1BQUwsQ0FBYyxJQUFkLENBRUEsS0FBS0MsS0FBTCxFQUNILENBRUQ7QUFDSjtBQUNBO0FBQ0EsTywrQ0FDSSxnQkFBUyxDQUNMLEtBQUtMLFNBQUwsQ0FBaUIsR0FBSTFCLENBQUFBLEdBQXJCLENBQ0EsS0FBSzJCLGVBQUwsQ0FBdUIsSUFBdkIsQ0FDQSxLQUFLQyxjQUFMLDhCQUNJSSxXQUFXLENBQUUsSUFEakIsQ0FFSUMsWUFBWSxDQUFFLElBRmxCLENBR0lDLE1BQU0sQ0FBRXhCLFdBQVcsQ0FBQ3lCLEdBQVosQ0FBZ0IsU0FBQXBCLElBQUksUUFBSyxDQUM3QkEsSUFBSSxDQUFKQSxJQUQ2QixDQUU3QnFCLE1BQU0sQ0FBRSxDQUFDLGtCQUFELENBQXFCLFdBQXJCLEVBQWtDQyxRQUFsQyxDQUEyQ3RCLElBQTNDLEVBQ0YsS0FERSxDQUVGLElBSnVCLENBQUwsQ0FBcEIsQ0FIWixDQVNJdUIsS0FBSyxDQUFFLEVBVFgsRUFXUSxLQUFLYixpQkFBTCxDQUNNLENBQ0VSLFVBQVUsQ0FBRSxJQURkLENBRE4sQ0FJTSxFQWZkLE1BaUJJc0IsZ0JBQWdCLENBQUUsQ0FDZEMsU0FBUyxDQUFFLElBREcsQ0FFZEMsUUFBUSxDQUFFLElBRkksQ0FqQnRCLEdBc0JBLEtBQUtaLEtBQUwsQ0FBYSxFQUFiLENBQ0EsS0FBS0MsTUFBTCxDQUFjWSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLENBQWtCLEtBQUtmLGNBQXZCLENBQ2pCLENBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTyxzR0FDSSxpQkFBZWdCLEdBQWYsaUhBQ0kzQyxNQUFNLENBQUNZLEdBQVAsQ0FBVyxDQUFFK0IsR0FBRyxDQUFIQSxHQUFGLENBQVgsQ0FBb0IsQ0FDaEJBLEdBQUcsQ0FBRSxDQUNEN0IsSUFBSSxDQUFFLFFBREwsQ0FEVyxDQUFwQixFQU1BLEtBQUtnQixLQUFMLEdBQ0EsS0FBS0osZUFBTCxDQUF1QmtCLElBQUksQ0FBQ0MsR0FBTCxFQUF2QixDQVJKLHNDQVdjLE1BQUtDLGlCQUFMLENBQXVCSCxHQUF2QixDQVhkLDhCQVljLE1BQUtJLGVBQUwsQ0FBcUIsS0FBS2xCLE1BQUwsQ0FBWW1CLEVBQWpDLENBWmQsK0JBYWMsTUFBS0MsY0FBTCxDQUFvQixLQUFLcEIsTUFBTCxDQUFZRyxZQUFoQyxDQWJkLGdDQWNjLE1BQUtrQixtQkFBTCxDQUF5QixLQUFLckIsTUFBTCxDQUFZRSxXQUFyQyxDQWRkLGdDQWVjLE1BQUtvQixrQkFBTCxDQUF3QixLQUFLdEIsTUFBTCxDQUFZRSxXQUFwQyxDQWZkLGdDQWdCYyxNQUFLcUIsY0FBTCxDQUFvQixLQUFLdkIsTUFBTCxDQUFZbUIsRUFBaEMsQ0FoQmQsK0ZBbUJjLElBQUlLLENBQUFBLEtBQUosb0VBQzBELFlBQU1DLE9BRGhFLGNBQzRFLFlBQU1DLEtBRGxGLEVBbkJkLFNBd0JJLEtBQUsxQixNQUFMLENBQVlTLGdCQUFaLENBQTZCa0IsT0FBN0IsQ0FBdUNoRSxXQUFXLENBQUNnRSxPQUFuRCxDQUNBLEtBQUszQixNQUFMLENBQVlTLGdCQUFaLENBQTZCQyxTQUE3QixDQUF5QyxHQUFJSyxDQUFBQSxJQUFKLEdBQVdhLFdBQVgsRUFBekMsQ0FDQSxLQUFLNUIsTUFBTCxDQUFZUyxnQkFBWixDQUE2QkUsUUFBN0IsQ0FDSUksSUFBSSxDQUFDQyxHQUFMLEdBQWEsS0FBS25CLGVBRHRCLENBRUEsS0FBS0csTUFBTCxDQUFZUyxnQkFBWixDQUE2QmYsWUFBN0IsQ0FBNEMsS0FBS0EsWUFBakQsQ0E1QkosZ0NBNkJXLEtBQUtNLE1BN0JoQixzRSwrRUFnQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE8sMEhBQ0ksa0JBQXlCYyxHQUF6Qix3SUFDSTNDLE1BQU0sQ0FBQ1ksR0FBUCxDQUFXLENBQUUrQixHQUFHLENBQUhBLEdBQUYsQ0FBWCxDQUFvQixDQUNoQkEsR0FBRyxDQUFFLENBQ0Q3QixJQUFJLENBQUUsUUFETCxDQURXLENBQXBCLEVBTU00QyxLQVBWLENBT2tCZixHQUFHLENBQUNnQixLQUFKLENBQVUsR0FBVixDQVBsQixDQVNJLEdBQUlELEtBQUssQ0FBQyxDQUFELENBQUwsR0FBYSxLQUFqQixDQUF3QixDQUVwQixLQUFLRSxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLFlBRFUsQ0FFaEIrQyxLQUFLLCtCQUF5QkgsS0FBSyxDQUFDLENBQUQsQ0FBOUIsQ0FGVyxDQUdoQkksS0FBSyxDQUFFLElBSFMsQ0FBcEIsQ0FLSCxDQUVELEdBQUlKLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBYSxLQUFLdkMsVUFBdEIsQ0FBa0MsQ0FFOUIsS0FBS3lDLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsWUFEVSxDQUVoQitDLEtBQUssbUNBQTZCSCxLQUFLLENBQUMsQ0FBRCxDQUFsQyxDQUZXLENBR2hCSSxLQUFLLENBQUUsSUFIUyxDQUFwQixDQUtILENBRUQ7QUFDTUMsUUE1QlYsQ0E0QnFCTCxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNDLEtBQVQsQ0FBZSxZQUFmLENBNUJyQixDQThCSSxHQUFJLENBQUMsR0FBSUssQ0FBQUEsTUFBSixDQUFXLHFCQUFYLEVBQWtDQyxJQUFsQyxDQUF1Q0YsUUFBUSxDQUFDLENBQUQsQ0FBL0MsQ0FBTCxDQUEwRCxDQUV0RCxLQUFLSCxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLFlBRFUsQ0FFaEIrQyxLQUFLLHVDQUFpQ0UsUUFBUSxDQUFDLENBQUQsQ0FBekMsQ0FGVyxDQUdoQkQsS0FBSyxDQUFFLElBSFMsQ0FBcEIsQ0FLSCxDQUVELEtBQUtqQyxNQUFMLENBQVltQixFQUFaLENBQWlCZSxRQUFRLENBQUMsQ0FBRCxDQUF6QixDQXZDSixpQ0F3Q1csS0FBS2xDLE1BQUwsQ0FBWW1CLEVBeEN2Qiw4RCw4R0EyQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE8sOEhBQ0ksa0JBQTJCakIsV0FBM0Isc0pBQ0kvQixNQUFNLENBQUNZLEdBQVAsQ0FBVyxDQUFFbUIsV0FBVyxDQUFYQSxXQUFGLENBQVgsQ0FBNEIsQ0FDeEJBLFdBQVcsQ0FBRSxDQUNUakIsSUFBSSxDQUFFLFFBREcsQ0FEVyxDQUE1QixFQU1Nb0QsTUFQVixDQU9tQm5DLFdBQVcsQ0FBQ29DLGFBQVosRUFBNkJwQyxXQUFXLENBQUNvQyxhQUFaLENBQTBCQyxLQUExQixDQUFnQyxNQUFoQyxDQUE3QixDQUNUeEUsbUJBRFMsQ0FFVEQsaUJBVFYsQ0FXSTtBQUNBO0FBQ01rQyxNQWJWLENBYW1CLEtBQUtKLFNBQUwsQ0FBZTRDLFFBQWYsQ0FBd0JILE1BQXhCLENBQWdDbkMsV0FBaEMsQ0FibkIsQ0FlSSxHQUFJLEtBQUtOLFNBQUwsQ0FBZTZDLE1BQWYsR0FBMEIsSUFBOUIsQ0FBb0MsQ0FFaEMsS0FBSzdDLFNBQUwsQ0FBZTZDLE1BQWYsQ0FBc0JwQyxHQUF0QixDQUEwQixTQUFBcUMsTUFBTSxRQUFJLENBQUEsS0FBSSxDQUFDWCxjQUFMLENBQW9CLENBQ3BEOUMsSUFBSSxDQUFFLGNBRDhDLENBRXBEMEQsT0FBTyxDQUFFRCxNQUYyQyxDQUFwQixDQUFKLENBQWhDLENBSUgsQ0FyQkwsaUNBdUJXMUMsTUF2QlgsOEQsb0hBMEJBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPLDRIQUNJLGtCQUEwQkUsV0FBMUIseU9BRVEsQ0FBQ0EsV0FBVyxDQUFDTSxLQUFiLEVBQXNCLENBQUNvQyxLQUFLLENBQUNDLE9BQU4sQ0FBYzNDLFdBQVcsQ0FBQ00sS0FBWixDQUFrQnNDLFVBQWhDLENBRi9CLDJEQUllLEVBSmYsU0FPSTtBQUNNdEMsS0FSVixDQVFrQnVDLElBQUksQ0FBQ0MsS0FBTCxDQUFXRCxJQUFJLENBQUNFLFNBQUwsQ0FBZS9DLFdBQVcsQ0FBQ00sS0FBM0IsQ0FBWCxDQVJsQixDQVVJO0FBQ01XLEVBWFYsQ0FXZWpCLFdBQVcsQ0FBQ2lCLEVBQVosQ0FBZW9CLEtBQWYsQ0FBcUIsc0NBQXJCLEVBQTZELENBQTdELENBWGYsQ0FhSTtBQUNJVyxhQWRSLENBY3dCLEtBZHhCLENBZ0JJO0FBQ1NDLENBakJiLENBaUJpQixDQWpCakIsYUFpQm9CQSxDQUFDLENBQUczQyxLQUFLLENBQUNzQyxVQUFOLENBQWlCTSxNQWpCekMsNEJBa0JZQyxTQWxCWixDQWtCd0I3QyxLQUFLLENBQUNzQyxVQUFOLENBQWlCSyxDQUFqQixDQWxCeEIsQ0FtQllHLGdCQW5CWixRQW9CWUMsVUFwQlosQ0FvQnlCLEtBcEJ6QixDQXNCUTtBQUNJQyxTQXZCWixxQkF5QmdCSCxTQUFTLENBQUNwRSxJQXpCMUIsK0JBNkJpQixLQTdCakIsbUJBa0ZpQixRQWxGakIsbUJBbUZpQixRQW5GakIsd0JBK0JxQlAsbUJBQW1CLENBQUMyRSxTQUFTLENBQUNJLEtBQVgsQ0EvQnhDLDBCQWlDb0IsS0FBSzFCLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsa0JBRFUsQ0FFaEIrQyxLQUFLLDRCQUFzQm1CLENBQXRCLDZCQUEwQ0UsU0FBUyxDQUFDSSxLQUFwRCxxRUFDc0I3QyxNQUFNLENBQUM4QyxJQUFQLENBQVloRixtQkFBWixFQUFpQ2lGLElBQWpDLENBQXNDLEdBQXRDLENBRHRCLEtBRlcsQ0FBcEIsRUFqQ3BCLHNGQTBDNkNsRixDQUFBQSxVQUFVLENBQUM0RSxTQUFTLENBQUNPLEtBQVgsQ0FBa0JQLFNBQVMsQ0FBQ0ksS0FBNUIsQ0ExQ3ZELFNBMENvQkgsZ0JBMUNwQixxQkE0Q3dCQSxnQkFBZ0IsQ0FBQ0YsTUFBakIsR0FBNEIsQ0E1Q3BELDJCQThDd0IsS0FBS3JCLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsa0JBRFUsQ0FFaEIrQyxLQUFLLDRCQUFzQm1CLENBQXRCLDRCQUZXLENBQXBCLEVBOUN4QixpRkFxRHlDRyxnQkFyRHpDLGlHQXFEK0JPLE1BckQvQixpQkF1RDRCMUIsTUFBTSxDQUFDakMsV0FBVyxDQUFDaUIsRUFBYixDQUFpQixHQUFqQixDQUFOLENBQTRCaUIsSUFBNUIsQ0FBaUN5QixNQUFNLENBQUNDLElBQXhDLENBdkQ1QiwwQkF3RDRCUCxVQUFVLENBQUcsSUFBYixDQXhENUIsd1FBNkRvQixHQUFJLENBQUNBLFVBQUwsQ0FBaUIsQ0FFYixLQUFLeEIsY0FBTCxDQUFvQixDQUNoQjlDLElBQUksQ0FBRSxrQkFEVSxDQUVoQitDLEtBQUssNEJBQXNCbUIsQ0FBdEIsc0JBRlcsQ0FBcEIsQ0FJSCxDQW5FckIsc0ZBdUVvQixLQUFLcEIsY0FBTCxDQUFvQixDQUNoQjlDLElBQUksQ0FBRSxrQkFEVSxDQUVoQitDLEtBQUssNEJBQXNCbUIsQ0FBdEIsMkJBRlcsQ0FBcEIsRUF2RXBCLCtHQXVGd0JFLFNBQVMsQ0FBQ3BFLElBQVYsR0FBbUIsUUFBbkIsRUFBK0IsS0FBS1EsY0FBTCxDQUFvQnNFLEtBdkYzRSwyQkF3RjhCQyxVQXhGOUIsQ0F3RjJDWCxTQUFTLENBQUNPLEtBQVYsQ0FBZ0JyQixLQUFoQixDQUFzQixlQUF0QixFQUF1QyxDQUF2QyxDQXhGM0MseUJBeUYwQyxNQUFLOUMsY0FBTCxDQUFvQnNFLEtBQXBCLENBQTBCRSxLQUExQixDQUFnQ0QsVUFBaEMsQ0F6RjFDLFNBeUZ3QlIsU0F6RnhCLGdCQTBGd0JELFVBQVUsQ0FBRyxJQUFiLENBMUZ4QixrSUE4Rm9CLEtBQUt4QixjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLGtCQURVLENBRWhCK0MsS0FBSyw0QkFBc0JtQixDQUF0Qix3Q0FGVyxDQUFwQixFQTlGcEIsWUFzR29CRSxTQUFTLENBQUNJLEtBQVYsQ0FBZ0JsQixLQUFoQixDQUFzQixZQUF0QixDQXRHcEIsb0VBd0c4QjFFLENBQUFBLFVBQVUsQ0FDWixJQURZLENBRVp3RixTQUFTLENBQUNJLEtBRkUsQ0FHWkosU0FBUyxDQUFDTyxLQUhFLENBeEd4QyxTQThHd0JMLFVBQVUsQ0FBRyxJQUFiLENBOUd4QixrR0FpSHdCVyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxLQUFaLGVBRUEsS0FBS3BDLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsa0JBRFUsQ0FFaEIrQyxLQUFLLDRCQUFzQm1CLENBQXRCLG1DQUZXLENBQXBCLEVBbkh4QiwrRUE4SHlCaEIsTUFBTSxzQ0FBK0JrQixTQUFTLENBQUNPLEtBQVYsQ0FBZ0JRLE9BQWhCLENBQXdCLHFCQUF4QixDQUErQyxNQUEvQyxDQUEvQixFQUFOLENBQ0FoQyxJQURBLENBQ0tpQixTQUFTLENBQUNJLEtBRGYsQ0E5SHpCLDBCQWlJd0IsS0FBSzFCLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsa0JBRFUsQ0FFaEIrQyxLQUFLLDRCQUFzQm1CLENBQXRCLDJDQUZXLENBQXBCLEVBakl4QixzRkEwSWlELE1BQUtrQixjQUFMLENBQW9CaEIsU0FBUyxDQUFDSSxLQUE5QixDQTFJakQsU0EwSXdCSCxnQkExSXhCLGdCQTJJd0JBLGdCQUFnQixDQUFHLFFBQU9BLGdCQUFQLElBQTRCLFFBQTVCLENBQ2JQLElBQUksQ0FBQ0UsU0FBTCxDQUFlSyxnQkFBZixDQURhLENBRWJBLGdCQUZOLENBM0l4QixzRkFnSndCLEtBQUt2QixjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLGtCQURVLENBRWhCK0MsS0FBSyw0QkFBc0JtQixDQUF0QiwyQkFGVyxDQUFwQixFQWhKeEIsK0NBd0p5QmhCLE1BQU0sQ0FBQ2hCLEVBQUQsQ0FBSyxJQUFMLENBQU4sQ0FBaUJpQixJQUFqQixDQUFzQmtCLGdCQUF0QixDQXhKekIsMEJBMEp3QixLQUFLdkIsY0FBTCxDQUFvQixDQUNoQjlDLElBQUksQ0FBRSxrQkFEVSxDQUVoQitDLEtBQUssNEJBQXNCbUIsQ0FBdEIsaUNBRlcsQ0FBcEIsRUExSnhCLDRDQWlLb0JJLFVBQVUsQ0FBRyxJQUFiLENBaktwQixvREF3S2dCO0FBQ0EsS0FBS3hCLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsa0JBRFUsQ0FFaEIrQyxLQUFLLDRCQUFzQm1CLENBQXRCLHdDQUFxREUsU0FBUyxDQUFDcEUsSUFBL0QsTUFGVyxDQUFwQixFQXpLaEIsUUErS1FvRSxTQUFTLENBQUNpQixRQUFWLENBQXFCZixVQUFyQixDQUNBRixTQUFTLGdDQUNGQSxTQURFLEVBR0RHLFNBQVMsQ0FDSCxDQUNFTyxLQUFLLENBQUVQLFNBRFQsQ0FERyxDQUlILEVBUEwsQ0FBVCxDQVVBaEQsS0FBSyxDQUFDc0MsVUFBTixDQUFpQkssQ0FBakIsRUFBc0JFLFNBQXRCLENBRUEsR0FBSUUsVUFBSixDQUFnQixDQUNaTCxhQUFhLENBQUcsSUFDbkIsQ0E5TFQsU0FpQmlEQyxDQUFDLEVBakJsRCxpQ0FpTUksR0FBSUQsYUFBSixDQUFtQixDQUNmO0FBQ0EsS0FBS25CLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsa0JBRFUsQ0FBcEIsQ0FHSCxDQUVELEtBQUtlLE1BQUwsQ0FBWVEsS0FBWixDQUFvQkEsS0FBcEIsQ0F4TUosaUNBeU1XLEtBQUtSLE1BQUwsQ0FBWVEsS0F6TXZCLGdILGlIQTRNQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTyxvSEFDSSxrQkFBc0JXLEVBQXRCLHVMQUNTLEtBQUt4QixpQkFEZCxrRUFLSXhCLE1BQU0sQ0FBQ1ksR0FBUCxDQUFXLENBQUVvQyxFQUFFLENBQUZBLEVBQUYsQ0FBWCxDQUFtQixDQUNmQSxFQUFFLENBQUUsQ0FDQWxDLElBQUksQ0FBRSxRQUROLENBRFcsQ0FBbkIsRUFNSXNGLE9BWFIsQ0FXa0IsQ0FYbEIsQ0FZUUMsaUJBWlIsQ0FZNEIsSUFaNUIsQ0FhVUMsa0JBYlYsQ0FhK0IsR0FBSSxNQUFLekYsSUFBTCxDQUFVMEYsR0FBVixDQUFjQyxRQUFsQixDQUN2QjFHLGtCQUFrQixDQUFDMkcsR0FESSxDQUV2QixLQUFLakYsaUJBRmtCLENBYi9CLHlDQW1Cd0I4RSxDQUFBQSxrQkFBa0IsQ0FDN0JJLE9BRFcsQ0FDSCxvQkFERyxFQUNtQjFELEVBRG5CLEVBQ3VCMkQsSUFEdkIsRUFuQnhCLFFBbUJRUCxPQW5CUix3Q0FzQm9DRSxDQUFBQSxrQkFBa0IsQ0FDekNJLE9BRHVCLENBQ2YsK0JBRGUsRUFDa0IxRCxFQURsQixFQUNzQjJELElBRHRCLEVBdEJwQyxTQXNCY0MsYUF0QmQsZ0JBeUJRLEdBQUlBLGFBQWEsQ0FBQ0MsTUFBbEIsQ0FBMEIsQ0FFdEJSLGlCQUFpQixDQUFHLENBQ2hCUyxLQUFLLENBQUVGLGFBQWEsQ0FBQ0UsS0FBZCxDQUFvQkMsUUFBcEIsRUFEUyxDQUVoQkMsWUFBWSxDQUFFSixhQUFhLENBQUNJLFlBQWQsQ0FBMkJELFFBQTNCLEVBRkUsQ0FJdkIsQ0FFRCxLQUFLbEYsTUFBTCxDQUFZYixVQUFaLENBQXlCLENBQ3JCb0YsT0FBTyxDQUFQQSxPQURxQixDQUVyQkMsaUJBQWlCLENBQWpCQSxpQkFGcUIsQ0FBekIsQ0FLQSxHQUFJRCxPQUFPLEdBQUssR0FBWixFQUFtQixDQUFDQyxpQkFBeEIsQ0FBMkMsQ0FDdkM7QUFDQSxLQUFLekMsY0FBTCxDQUFvQixDQUNoQjlDLElBQUksQ0FBRSxXQURVLENBQXBCLENBR0gsQ0FMRCxJQUtPLElBQUlzRixPQUFPLEdBQUssR0FBWixFQUFtQkMsaUJBQXZCLENBQTBDLENBQzdDLEtBQUt6QyxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLFdBRFUsQ0FFaEIwRCxPQUFPLENBQUUsNENBRk8sQ0FBcEIsQ0FJSCxDQWhEVCxxRkFtRFEsS0FBS1osY0FBTCxDQUFvQixDQUNoQjlDLElBQUksQ0FBRSxXQURVLENBRWhCK0MsS0FBSyxDQUFFLGFBQU1QLE9BRkcsQ0FBcEIsRUFuRFIsc0UscUdBMERBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPLG9IQUNJLGtCQUFzQjJELEdBQXRCLDZJQUNJakgsTUFBTSxDQUFDWSxHQUFQLENBQVcsQ0FBRXFHLEdBQUcsQ0FBSEEsR0FBRixDQUFYLENBQW9CLENBQ2hCQSxHQUFHLENBQUUsQ0FDRG5HLElBQUksQ0FBRSxRQURMLENBRFcsQ0FBcEIsRUFESixLQU9RbUcsR0FBRyxHQUFLLEVBUGhCLCtCQVNjLElBQUk1RCxDQUFBQSxLQUFKLENBQ0YsMEJBREUsQ0FUZCxhQWdCUVosTUFBTSxDQUFDOEMsSUFBUCxDQUFZLEtBQUtsRSxZQUFqQixFQUErQjRELE1BQS9CLEdBQTBDLENBaEJsRCwrQkFrQmMsSUFBSTVCLENBQUFBLEtBQUosQ0FDRiw2RUFERSxDQWxCZCw2Q0F3Qm9CLEtBQUtqQyxrQkF4QnpCLHdFQXdCZThGLENBeEJmLHdCQTBCWWxELE1BQU0sQ0FBQyxLQUFLNUMsa0JBQUwsQ0FBd0I4RixDQUF4QixFQUEyQkMsT0FBNUIsQ0FBTixDQUEyQ2xELElBQTNDLENBQWdEZ0QsR0FBaEQsQ0ExQlosMEJBMkJZbkIsS0FBSyxDQUFHLEtBQUsxRSxrQkFBTCxDQUF3QjhGLENBQXhCLEVBQTJCcEIsS0FBbkMsQ0EzQlosOEVBZ0NTQSxLQWhDVCwrREFrQ3dCLEtBQUt6RSxZQWxDN0IseUVBa0NtQjZGLEVBbENuQix3QkFvQ2dCbEQsTUFBTSxDQUFDLEtBQUszQyxZQUFMLENBQWtCNkYsRUFBbEIsRUFBcUJDLE9BQXRCLENBQU4sQ0FBcUNsRCxJQUFyQyxDQUEwQ2dELEdBQTFDLENBcENoQiwwQkFxQ2dCbkIsS0FBSyxDQUFHLEtBQUt6RSxZQUFMLENBQWtCNkYsRUFBbEIsRUFBcUJwQixLQUE3QixDQXJDaEIsK0VBMkNTQSxLQTNDVCwrQkE2Q2MsSUFBSXpDLENBQUFBLEtBQUosMkVBQ2lFNEQsR0FEakUsRUE3Q2QsaUNBbUQyQm5CLENBQUFBLEtBQUssQ0FBQ21CLEdBQUQsQ0FuRGhDLFNBbURVRyxRQW5EVixtQkFxRFNBLFFBckRULCtCQXVEYyxJQUFJL0QsQ0FBQUEsS0FBSiwyREFDaUQ0RCxHQURqRCxFQXZEZCwwQ0E0RFlHLFFBNURaLCtELHFHQStEQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTyxvSEFDSSw2UkFBc0JwRixZQUF0QixrREFBcUMsRUFBckMsQ0FDSWhDLE1BQU0sQ0FBQ1ksR0FBUCxDQUFXb0IsWUFBWCxDQUF5QixDQUNyQmpCLEtBQUssQ0FBRSxDQUNIRCxJQUFJLENBQUUsTUFESCxDQURjLENBSXJCdUcsVUFBVSxDQUFFLENBQ1J2RyxJQUFJLENBQUUsUUFERSxDQUpTLENBT3JCd0csaUJBQWlCLENBQUUsQ0FDZnhHLElBQUksQ0FBRSxRQURTLENBRWZHLFFBQVEsQ0FBRSxLQUZLLENBUEUsQ0FXckJzRyxpQkFBaUIsQ0FBRSxDQUNmekcsSUFBSSxDQUFFLFFBRFMsQ0FFZkcsUUFBUSxDQUFFLEtBRkssQ0FYRSxDQUF6QixFQWtCSUYsS0FuQlIsQ0F3QlFpQixZQXhCUixDQW1CUWpCLEtBbkJSLENBb0JReUcsV0FwQlIsQ0F3QlF4RixZQXhCUixDQW9CUXdGLFdBcEJSLENBcUJRSCxVQXJCUixDQXdCUXJGLFlBeEJSLENBcUJRcUYsVUFyQlIsQ0FzQlFDLGlCQXRCUixDQXdCUXRGLFlBeEJSLENBc0JRc0YsaUJBdEJSLENBdUJRQyxpQkF2QlIsQ0F3QlF2RixZQXhCUixDQXVCUXVGLGlCQXZCUixDQTBCSTtBQUNNRSxZQTNCVix5RkEyQnlCLGtCQUFNQyxPQUFOLHNLQUVicEQsTUFGYSxDQUVKLEVBRkksdUNBSVVvRCxPQUpWLGtHQUlOQyxZQUpNLHNEQU1NQSxDQUFBQSxZQUFZLEVBTmxCLFFBTVQ5RixNQU5TLGlEQU9GQSxNQVBFLCtEQVNUeUMsTUFBTSxDQUFDc0QsSUFBUCxDQUFZLGFBQU10RSxPQUFsQixFQVRTLHlPQWFYLElBQUlELENBQUFBLEtBQUosaUZBRUlpQixNQUFNLENBQUNXLE1BQVAsQ0FBZ0JYLE1BQU0sQ0FBQ2tCLElBQVAsQ0FBWSxJQUFaLENBQWhCLENBQW9DLEVBRnhDLEVBYlcsb0ZBM0J6QixrQkEyQlVpQyxDQUFBQSxZQTNCVixvRkFpRDRCQSxDQUFBQSxZQUFZLENBQzVCLENBQ0lKLFVBREosQ0FFSUMsaUJBRkosQ0FHSUMsaUJBSEosRUFJRXJGLEdBSkYsQ0FLSSxTQUFBK0UsR0FBRyxRQUFJLGtCQUFNLENBQUEsTUFBSSxDQUFDZixjQUFMLENBQW9CZSxHQUFwQixDQUFOLENBQUosQ0FMUCxDQUQ0QixDQWpEeEMsUUFpRFFsRixXQWpEUixxR0E0RFEsS0FBSzZCLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsY0FEVSxDQUVoQitDLEtBQUssQ0FBRSxhQUFNUCxPQUZHLENBR2hCUSxLQUFLLENBQUUsSUFIUyxDQUFwQixFQTVEUixRQXFFSSxHQUFJLENBQ0ErRCxTQUFTLENBQUdqRCxJQUFJLENBQUNDLEtBQUwsQ0FBVzlDLFdBQVgsQ0FDZixDQUFDLE1BQU84QixLQUFQLENBQWMsQ0FFWixLQUFLRCxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLGNBRFUsQ0FFaEIrQyxLQUFLLENBQUUsa0NBRlMsQ0FBcEIsQ0FJSCxDQUVEO0FBQ0EsR0FBSTVELFFBQVEsQ0FBQzhCLFdBQUQsQ0FBYyxLQUFLbEIsSUFBbkIsQ0FBUixHQUFxQzJHLFdBQXpDLENBQXNELENBRWxELEtBQUs1RCxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLGNBRFUsQ0FFaEIrQyxLQUFLLENBQUUsMkJBRlMsQ0FBcEIsQ0FJSCxDQUVEO0FBQ0EsR0FBSSxjQUFPLEtBQUsxQyxVQUFaLGFBQTBCSixLQUExQixJQUFzQzhHLFNBQVMsQ0FBQzdFLEVBQXBELENBQXdELENBRXBELEtBQUtZLGNBQUwsQ0FBb0IsQ0FDaEI5QyxJQUFJLENBQUUsY0FEVSxDQUVoQitDLEtBQUssb0RBQThDOUMsS0FBOUMsa0RBQ2dCOEcsU0FBUyxDQUFDN0UsRUFEMUIsQ0FGVyxDQUFwQixDQUtILENBRUQsS0FBS25CLE1BQUwsQ0FBWUUsV0FBWixDQUEwQjhGLFNBQTFCLENBbEdKLGlDQW1HVyxLQUFLaEcsTUFBTCxDQUFZRSxXQW5HdkIsd0Usa0dBc0dBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPLHlDQUNJLG9DQUFrRSxJQUF2QytGLENBQUFBLFlBQXVDLDJEQUF4QixFQUF3QixJQUFwQkMsQ0FBQUEsYUFBb0IsMkRBQUosRUFBSSxDQUM5RC9ILE1BQU0sQ0FBQ1ksR0FBUCxDQUFXa0gsWUFBWCxDQUF5QixDQUNyQkUsSUFBSSxDQUFFLENBQ0ZsSCxJQUFJLENBQUUsUUFESixDQURlLENBSXJCcUcsT0FBTyxDQUFFLENBQ0xyRyxJQUFJLENBQUUsUUFERCxDQUpZLENBT3JCZ0YsS0FBSyxDQUFFLENBQ0hoRixJQUFJLENBQUUsVUFESCxDQVBjLENBQXpCLEVBWUEsS0FBS00sa0JBQUwsQ0FBd0IwRyxZQUFZLENBQUNFLElBQXJDLGlDQUNPRixZQURQLE1BRUloQyxLQUFLLDhFQUFFLGtCQUFNbUIsR0FBTixpSUFDR3RHLE9BREgsQ0FDYW9ILGFBRGIsd0JBRVVELENBQUFBLFlBQVksQ0FBQ2hDLEtBQWIsQ0FBbUJtQixHQUFuQixDQUF3QnRHLE9BQXhCLENBRlYsZ0hBQUYsMEVBRlQsRUFPSCxDQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTyxtQ0FDSSw4QkFBd0MsSUFBbkJtSCxDQUFBQSxZQUFtQiwyREFBSixFQUFJLENBQ3BDOUgsTUFBTSxDQUFDWSxHQUFQLENBQVdrSCxZQUFYLENBQXlCLENBQ3JCRSxJQUFJLENBQUUsQ0FDRmxILElBQUksQ0FBRSxRQURKLENBRGUsQ0FJckJxRyxPQUFPLENBQUUsQ0FDTHJHLElBQUksQ0FBRSxRQURELENBSlksQ0FPckJnRixLQUFLLENBQUUsQ0FDSGhGLElBQUksQ0FBRSxVQURILENBUGMsQ0FBekIsRUFZQSxLQUFLTyxZQUFMLENBQWtCeUcsWUFBWSxDQUFDRSxJQUEvQixFQUF1Q0YsWUFDMUMsQ0FFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBLE8sK0JBQ0ksMEJBQW9DLElBQW5CQSxDQUFBQSxZQUFtQiwyREFBSixFQUFJLENBQ2hDOUgsTUFBTSxDQUFDWSxHQUFQLENBQVdrSCxZQUFYLENBQXlCLENBQ3JCRSxJQUFJLENBQUUsQ0FDRmxILElBQUksQ0FBRSxRQURKLENBRGUsQ0FJckJnRixLQUFLLENBQUUsQ0FDSGhGLElBQUksQ0FBRSxVQURILENBSmMsQ0FBekIsRUFTQSxLQUFLUSxjQUFMLENBQW9Cd0csWUFBWSxDQUFDRSxJQUFqQyxFQUF5Q0YsWUFDNUMsQ0FFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBLE8sZ0NBQ0ksMkJBQW9CLENBRWhCLEdBQUksS0FBS2xHLEtBQUwsQ0FBV3FHLGFBQWYsQ0FBOEIsQ0FDMUIsTUFBTyxNQUFLckcsS0FBTCxDQUFXcUcsYUFDckIsQ0FFRCxLQUFLckcsS0FBTCxDQUFXcUcsYUFBWCxDQUEyQixHQUFJLE1BQUtwSCxJQUFMLENBQVUwRixHQUFWLENBQWNDLFFBQWxCLENBQ3ZCM0csYUFBYSxDQUFDNEcsR0FEUyxDQUV2QixLQUFLbEYsWUFGa0IsQ0FBM0IsQ0FJQSxNQUFPLE1BQUtLLEtBQUwsQ0FBV3FHLGFBQ3JCLENBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE8sc0hBQ0ksbUJBQXVCakYsRUFBdkIsa1JBQ0loRCxNQUFNLENBQUNZLEdBQVAsQ0FBVyxDQUFFb0MsRUFBRSxDQUFGQSxFQUFGLENBQVgsQ0FBbUIsQ0FDZkEsRUFBRSxDQUFFLENBQ0FsQyxJQUFJLENBQUUsUUFETixDQURXLENBQW5CLEVBREosSUFPUSxLQUFLYyxLQUFMLENBQVdJLFlBUG5CLDREQVFlLEtBQUtKLEtBQUwsQ0FBV0ksWUFSMUIsU0FXVWlHLGFBWFYsQ0FXMEIsS0FBS0MsZ0JBQUwsRUFYMUIseUJBWXNCRCxDQUFBQSxhQUFhLENBQzFCdkIsT0FEYSxDQUNMLDBCQURLLEVBQ3VCMUQsRUFEdkIsRUFDMkIyRCxJQUQzQixFQVp0QixRQVlVd0IsR0FaVixpQkFnQlF0QixNQWhCUixDQTJCUXNCLEdBM0JSLENBZ0JRdEIsTUFoQlIsQ0FpQlE5RixLQWpCUixDQTJCUW9ILEdBM0JSLENBaUJRcEgsS0FqQlIsQ0FrQlF5RyxXQWxCUixDQTJCUVcsR0EzQlIsQ0FrQlFYLFdBbEJSLENBbUJRSCxVQW5CUixDQTJCUWMsR0EzQlIsQ0FtQlFkLFVBbkJSLENBb0JRQyxpQkFwQlIsQ0EyQlFhLEdBM0JSLENBb0JRYixpQkFwQlIsQ0FxQlFDLGlCQXJCUixDQTJCUVksR0EzQlIsQ0FxQlFaLGlCQXJCUixDQXNCUWEsV0F0QlIsQ0EyQlFELEdBM0JSLENBc0JRQyxXQXRCUixDQXVCUUMsS0F2QlIsQ0EyQlFGLEdBM0JSLENBdUJRRSxLQXZCUixDQXdCUUMsUUF4QlIsQ0EyQlFILEdBM0JSLENBd0JRRyxRQXhCUixDQXlCUUMsUUF6QlIsQ0EyQlFKLEdBM0JSLENBeUJRSSxRQXpCUixDQTBCUUMsc0JBMUJSLENBMkJRTCxHQTNCUixDQTBCUUssc0JBMUJSLENBNkJJLEdBQUksQ0FBQzNCLE1BQUwsQ0FBYSxDQUVULEtBQUtqRCxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLE9BRFUsQ0FFaEIrQyxLQUFLLHdCQUFrQmIsRUFBbEIsY0FGVyxDQUdoQmMsS0FBSyxDQUFFLElBSFMsQ0FBcEIsQ0FLSCxDQUVELEdBQUksQ0FBQ3lFLFFBQUwsQ0FBZSxDQUVYLEtBQUszRSxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLE9BRFUsQ0FFaEIwRCxPQUFPLHdCQUFrQnhCLEVBQWxCLGdCQUZTLENBQXBCLENBSUgsQ0FFRCxHQUFJc0YsUUFBUSxHQUFLOUgsV0FBYixFQUE0QixDQUFDZ0ksc0JBQWpDLENBQXlELENBRXJELEtBQUs1RSxjQUFMLENBQW9CLENBQ2hCOUMsSUFBSSxDQUFFLE9BRFUsQ0FFaEIwRCxPQUFPLDRDQUFzQ3hCLEVBQXRDLG9CQUZTLENBQXBCLENBSUgsQ0FFRDtBQUNBLEtBQUtwQixLQUFMLENBQVdJLFlBQVgsQ0FBMEIsQ0FDdEJqQixLQUFLLENBQUxBLEtBRHNCLENBRXRCeUcsV0FBVyxDQUFYQSxXQUZzQixDQUd0QkgsVUFBVSxDQUFWQSxVQUhzQixDQUl0QkMsaUJBQWlCLENBQWpCQSxpQkFKc0IsQ0FLdEJDLGlCQUFpQixDQUFqQkEsaUJBTHNCLENBTXRCYSxXQUFXLENBQVhBLFdBTnNCLENBT3RCQyxLQUFLLENBQUxBLEtBUHNCLENBUXRCQyxRQUFRLENBQVJBLFFBUnNCLENBU3RCQyxRQUFRLENBQVJBLFFBVHNCLENBVXRCQyxzQkFBc0IsQ0FBdEJBLHNCQVZzQixDQUExQixDQWFBLEtBQUszRyxNQUFMLENBQVlHLFlBQVosQ0FBMkIsS0FBS0osS0FBTCxDQUFXSSxZQUF0QyxDQXBFSixrQ0FxRVcsS0FBS0gsTUFBTCxDQUFZRyxZQXJFdkIsaUUsd0dBd0VBO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTywrQkFDSSwwQkFBbUIsQ0FDZixNQUFPUyxDQUFBQSxNQUFNLENBQUM4QyxJQUFQLENBQVksS0FBS2xFLFlBQWpCLENBQ1YsQ0FFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTyw4QkFDSSx3QkFBZ0JWLE9BQWhCLENBQXlCLENBQ3JCWCxNQUFNLENBQUNZLEdBQVAsQ0FBV0QsT0FBWCxDQUFvQixDQUNoQkcsSUFBSSxDQUFFLENBQ0ZBLElBQUksQ0FBRSxNQURKLENBRUYySCxNQUFNLENBQUVoSSxXQUZOLENBRFUsQ0FLaEJvRCxLQUFLLENBQUUsQ0FDSC9DLElBQUksQ0FBRSxRQURILENBRUhHLFFBQVEsQ0FBRSxLQUZQLENBTFMsQ0FTaEJ1RCxPQUFPLENBQUUsQ0FDTDFELElBQUksQ0FBRSxRQURELENBRUxHLFFBQVEsQ0FBRSxLQUZMLENBVE8sQ0FhaEI2QyxLQUFLLENBQUUsQ0FDSGhELElBQUksQ0FBRSxTQURILENBRUhHLFFBQVEsQ0FBRSxLQUZQLENBYlMsQ0FBcEIsRUFtQkEsR0FBUUgsQ0FBQUEsSUFBUixDQUFpQ0gsT0FBakMsQ0FBUUcsSUFBUixDQUFjK0MsS0FBZCxDQUFpQ2xELE9BQWpDLENBQWNrRCxLQUFkLENBQXFCVyxPQUFyQixDQUFpQzdELE9BQWpDLENBQXFCNkQsT0FBckIsQ0FFQTtBQUNBLEtBQUszQyxNQUFMLENBQVlJLE1BQVosQ0FBcUIsS0FBS0osTUFBTCxDQUFZSSxNQUFaLENBQW1CQyxHQUFuQixDQUNqQixTQUFBd0csS0FBSyxDQUFJLENBQ0wsR0FBSUEsS0FBSyxDQUFDNUgsSUFBTixHQUFlQSxJQUFuQixDQUF5QixDQUNyQjRILEtBQUssOENBQ0VBLEtBREYsRUFHRzdFLEtBQUssQ0FDQyxDQUNFUyxNQUFNLDhCQUNFb0UsS0FBSyxDQUFDcEUsTUFBTixFQUFnQixFQURsQixFQUVDLENBQUNULEtBQUQsQ0FGRCxDQURSLENBREQsQ0FPQyxFQVZULEVBYUdXLE9BQU8sQ0FDRCxDQUNFbUUsUUFBUSw4QkFDQUQsS0FBSyxDQUFDbEUsT0FBTixFQUFpQixFQURqQixFQUVELENBQUNBLE9BQUQsQ0FGQyxDQURWLENBREMsQ0FPRCxFQXBCVCxDQUFMLENBd0JBa0UsS0FBSyxDQUFDdkcsTUFBTixDQUFlLENBQUN1RyxLQUFLLENBQUNwRSxNQUFQLEVBQ1ZvRSxLQUFLLENBQUNwRSxNQUFOLEVBQWdCb0UsS0FBSyxDQUFDcEUsTUFBTixDQUFhVyxNQUFiLEdBQXdCLENBQ2hELENBRUQsTUFBT3lELENBQUFBLEtBQ1YsQ0FoQ2dCLENBQXJCLENBbUNBLEdBQUkvSCxPQUFPLENBQUNtRCxLQUFaLENBQW1CLENBQ2YsS0FBTSxJQUFJVCxDQUFBQSxLQUFKLFdBQ0N2QyxJQURELGNBQ1UrQyxLQURWLEVBR1QsQ0FDSixDLDZCQUVELHdCQUFpQixDQUNiLEdBQU0rRSxDQUFBQSxlQUFlLENBQUcsR0FBSWxJLENBQUFBLGFBQUosQ0FBa0IsQ0FDdENHLElBQUksQ0FBRSxLQUFLQSxJQUQyQixDQUV0Q0UsS0FBSyxDQUFFLEtBQUtRLFlBRjBCLENBR3RDUCxVQUFVLENBQUUsS0FBS1EsaUJBSHFCLENBQWxCLENBQXhCLENBTUFvSCxlQUFlLENBQUN4SCxrQkFBaEIsQ0FBcUMsS0FBS0Esa0JBQTFDLENBQ0F3SCxlQUFlLENBQUN2SCxZQUFoQixDQUErQixLQUFLQSxZQUFwQyxDQUNBdUgsZUFBZSxDQUFDdEgsY0FBaEIsQ0FBaUMsS0FBS0EsY0FBdEMsQ0FDQSxNQUFPc0gsQ0FBQUEsZUFDVixDLDRCQUdMQyxNQUFNLENBQUNDLE9BQVAsQ0FBZXBJLGFBQWYsQ0FBK0JBLGFBQS9CLENBQ0FtSSxNQUFNLENBQUNDLE9BQVAsQ0FBZTVJLGVBQWYsQ0FBaUNBLGVBQWpDLENBQ0EySSxNQUFNLENBQUNDLE9BQVAsQ0FBZTNJLG1CQUFmLENBQXFDQSxtQkFBckMsQ0FDQTBJLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlMUksa0JBQWYsQ0FBb0NBLGtCQUFwQyxDQUNBeUksTUFBTSxDQUFDQyxPQUFQLENBQWV6SSxZQUFmLENBQThCQSxZQUE5QixDQUNBd0ksTUFBTSxDQUFDQyxPQUFQLENBQWVySSxXQUFmLENBQTZCZ0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxDQUFrQmpDLFdBQWxCLENBQTdCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTtcbmNvbnN0IHsgdmFsaWRhdGVWYyB9ID0gcmVxdWlyZSgnLi91dGlscy92YycpO1xuY29uc3QgZGlkRG9jdW1lbnRTY2hlbWEgPSByZXF1aXJlKCdvcmcuanNvbi1zY2hlbWEtMC4zJyk7XG5jb25zdCBkaWREb2N1bWVudFNjaGVtYTA0ID0gcmVxdWlyZSgnb3JnLmpzb24tc2NoZW1hLTAuNCcpO1xuY29uc3QgeyBPcmdJZENvbnRyYWN0IH0gPSByZXF1aXJlKCdAd2luZGluZ3RyZWUvb3JnLmlkJyk7XG5jb25zdCB7IExpZkRlcG9zaXRDb250cmFjdCB9ID0gcmVxdWlyZSgnQHdpbmRpbmd0cmVlL29yZy5pZC1saWYtZGVwb3NpdCcpO1xuY29uc3QgQWp2ID0gcmVxdWlyZSgnYWp2Jyk7XG5cbi8vIFV0aWxpdGllc1xuY29uc3QgZXhwZWN0ID0gcmVxdWlyZSgnLi91dGlscy9leHBlY3QnKTtcbmNvbnN0IHsgbWFrZUhhc2ggfSA9IHJlcXVpcmUoJy4vdXRpbHMvZG9jdW1lbnQnKTtcblxuLy8gTW9kdWxlc1xuY29uc3QgaHR0cEZldGNoTWV0aG9kID0gcmVxdWlyZSgnLi9odHRwJyk7XG5jb25zdCBsaW5rZWRJbkZldGNoTWV0aG9kID0gcmVxdWlyZSgnLi9saW5rZWRJbicpO1xuY29uc3QgdHdpdHRlckZldGNoTWV0aG9kID0gcmVxdWlyZSgnLi90d2l0dGVyJyk7XG5jb25zdCB3aG9pc1NlcnZpY2UgPSByZXF1aXJlKCcuL3dob2lzJyk7XG5jb25zdCB7IGdldERuc0RhdGEsIFJlc291cmNlUmVjb3JkVHlwZXMgfSA9IHJlcXVpcmUoJy4vZG5zJyk7XG5jb25zdCB7IHplcm9BZGRyZXNzIH0gPSByZXF1aXJlKCcuL3V0aWxzL2NvbnN0YW50cycpO1xuXG4vLyBFcnJvcnMgdHlwZXMgZGVmaW5pdGlvbnNcbmNvbnN0IGNoZWNrc1R5cGVzID0gW1xuICAgICdESURfU1lOVEFYJyxcbiAgICAnT1JHSUQnLFxuICAgICdESURfRE9DVU1FTlQnLFxuICAgICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAnTElGX1NUQUtFJ1xuXTtcblxuLyoqXG4gKiBPUkcuSUQgcmVzb2x2ZXIgY2xhc3NcbiAqIEBjbGFzcyBPcmdJZFJlc29sdmVyXG4gKi9cbmNsYXNzIE9yZ0lkUmVzb2x2ZXIge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBPcmdJZFJlc29sdmVyLlxuICAgICAqIEBwYXJhbSB7T2JlamN0fSBvcHRpb25zIENvbnRydWN0b3IgcGFyYW1ldGVyc1xuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBleHBlY3QuYWxsKG9wdGlvbnMsIHtcbiAgICAgICAgICAgIHdlYjM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZ0lkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2FkZHJlc3MnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGlmRGVwb3NpdDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRob3JpemVkVHJ1c3RQcm9vZnNJc3N1ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWV0aG9kTmFtZSA9ICdvcmdpZCc7XG4gICAgICAgIHRoaXMuZmV0Y2hTb2NpYWxNZXRob2RzID0ge307XG4gICAgICAgIHRoaXMuZmV0Y2hNZXRob2RzID0ge307XG4gICAgICAgIHRoaXMuc2VydmljZU1ldGhvZHMgPSB7fTtcbiAgICAgICAgdGhpcy53ZWIzID0gb3B0aW9ucy53ZWIzO1xuICAgICAgICB0aGlzLm9yZ0lkQWRkcmVzcyA9IG9wdGlvbnMub3JnSWQ7XG4gICAgICAgIHRoaXMubGlmRGVwb3NpdEFkZHJlc3MgPSBvcHRpb25zLmxpZkRlcG9zaXQ7XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZFRydXN0UHJvb2ZzSXNzdWVycyA9IG9wdGlvbnMuYXV0aG9yaXplZFRydXN0UHJvb2ZzSXNzdWVycztcblxuICAgICAgICB0aGlzLnZhbGlkYXRvciA9IG51bGw7XG4gICAgICAgIHRoaXMucmVzb2x1dGlvblN0YXJ0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXN1bHRUZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgZGVmYXVsdHNcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqL1xuICAgIHJlc2V0ICgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0b3IgPSBuZXcgQWp2KCk7XG4gICAgICAgIHRoaXMucmVzb2x1dGlvblN0YXJ0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXN1bHRUZW1wbGF0ZSA9IHtcbiAgICAgICAgICAgIGRpZERvY3VtZW50OiBudWxsLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBudWxsLFxuICAgICAgICAgICAgY2hlY2tzOiBjaGVja3NUeXBlcy5tYXAodHlwZSA9PiAoe1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgcGFzc2VkOiBbJ1RSVVNUX0FTU0VSVElPTlMnLCAnTElGX1NUQUtFJ10uaW5jbHVkZXModHlwZSlcbiAgICAgICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIHRydXN0OiBbXSxcbiAgICAgICAgICAgIC4uLihcbiAgICAgICAgICAgICAgICB0aGlzLmxpZkRlcG9zaXRBZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlmRGVwb3NpdDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge31cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByZXNvbHZlck1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgcmV0cmlldmVkOiBudWxsLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlc3VsdFRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZzIERJRCBpbnRvIGl0cyBkb2N1bWVudFxuICAgICAqIGFuZCBtYWtlcyBwcm9wZXIgdmFsaWRhdGlvbnMgYW5kIHZlcmlmaWNhdGlvbnNcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaWQgRElEXG4gICAgICogQHJldHVybnMge1Byb21pc2U8e09iamVjdH0+fSBSZXNvbHZpbmcgcmVzdWx0XG4gICAgICovXG4gICAgYXN5bmMgcmVzb2x2ZSAoZGlkKSB7XG4gICAgICAgIGV4cGVjdC5hbGwoeyBkaWQgfSwge1xuICAgICAgICAgICAgZGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLnJlc29sdXRpb25TdGFydCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVEaWRTeW50YXgoZGlkKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0T3JnYW5pemF0aW9uKHRoaXMucmVzdWx0LmlkKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGlkRG9jdW1lbnQodGhpcy5yZXN1bHQub3JnYW5pemF0aW9uKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVEaWREb2N1bWVudCh0aGlzLnJlc3VsdC5kaWREb2N1bWVudCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeVRydXN0UmVjb3Jkcyh0aGlzLnJlc3VsdC5kaWREb2N1bWVudCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeUxpZlN0YWtlKHRoaXMucmVzdWx0LmlkKTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJlc29sdmluZyBmbG93IGhhcyBiZWVuIHRlcm1pbmF0ZWQgZHVlIHRvIHNlcmlvdXMgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX07ICR7ZXJyb3Iuc3RhY2t9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzdWx0LnJlc29sdmVyTWV0YWRhdGEudmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgICAgIHRoaXMucmVzdWx0LnJlc29sdmVyTWV0YWRhdGEucmV0cmlldmVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICB0aGlzLnJlc3VsdC5yZXNvbHZlck1ldGFkYXRhLmR1cmF0aW9uID1cbiAgICAgICAgICAgIERhdGUubm93KCkgLSB0aGlzLnJlc29sdXRpb25TdGFydDtcbiAgICAgICAgdGhpcy5yZXN1bHQucmVzb2x2ZXJNZXRhZGF0YS5vcmdJZEFkZHJlc3MgPSB0aGlzLm9yZ0lkQWRkcmVzcztcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gRElEIHN5bnRheFxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpZCBESURcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7c3RyaW5nfT59IE9yZ2FuaXphdGlvbiBJZFxuICAgICAqL1xuICAgIGFzeW5jIHZhbGlkYXRlRGlkU3ludGF4IChkaWQpIHtcbiAgICAgICAgZXhwZWN0LmFsbCh7IGRpZCB9LCB7XG4gICAgICAgICAgICBkaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwYXJ0cyA9IGRpZC5zcGxpdCgnOicpO1xuXG4gICAgICAgIGlmIChwYXJ0c1swXSAhPT0gJ2RpZCcpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9TWU5UQVgnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBgSW52YWxpZCBESUQgcHJlZml4OiAke3BhcnRzWzBdfWAsXG4gICAgICAgICAgICAgICAgdGhyb3c6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnRzWzFdICE9PSB0aGlzLm1ldGhvZE5hbWUpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9TWU5UQVgnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBgVW5zdXBwb3J0ZWQgRElEIG1ldGhvZDogJHtwYXJ0c1sxXX1gLFxuICAgICAgICAgICAgICAgIHRocm93OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNwbGl0IHBhdGhzLCBtZXRob2QgcGFyYW1ldGVycyBhbmQgcXVlcmllc1xuICAgICAgICBjb25zdCBzdWJQYXJ0cyA9IHBhcnRzWzJdLnNwbGl0KC8oPzojfDt8XFw/KS8pO1xuXG4gICAgICAgIGlmICghbmV3IFJlZ0V4cCgnXjB4W2EtZkEtRjAtOV17NjR9JCcpLnRlc3Qoc3ViUGFydHNbMF0pKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdESURfU1lOVEFYJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEludmFsaWQgbWV0aG9kIHNwZWNpZmljIElkOiAke3N1YlBhcnRzWzBdfWAsXG4gICAgICAgICAgICAgICAgdGhyb3c6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN1bHQuaWQgPSBzdWJQYXJ0c1swXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0LmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gRElEIGRvY3VtZW50XG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGlkRG9jdW1lbnQgRElEIGRvY3VtZW50XG4gICAgICogQHJldHVybnMge1Byb21pc2U8e2Jvb2xlYW59Pn0gVmFsaWRhdGlvbiByZXN1bHRcbiAgICAgKi9cbiAgICBhc3luYyB2YWxpZGF0ZURpZERvY3VtZW50IChkaWREb2N1bWVudCkge1xuICAgICAgICBleHBlY3QuYWxsKHsgZGlkRG9jdW1lbnQgfSwge1xuICAgICAgICAgICAgZGlkRG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzY2hlbWEgPSBkaWREb2N1bWVudC5zY2hlbWFWZXJzaW9uICYmIGRpZERvY3VtZW50LnNjaGVtYVZlcnNpb24ubWF0Y2goL14wLjQvKVxuICAgICAgICAgICAgPyBkaWREb2N1bWVudFNjaGVtYTA0XG4gICAgICAgICAgICA6IGRpZERvY3VtZW50U2NoZW1hO1xuXG4gICAgICAgIC8vIFVzZSB0aGUgQWp2IHZhbGlkYXRvclxuICAgICAgICAvLyBkaWREb2N1bWVudFNjaGVtYSBpcyBvYnRhaW5lZCBmcm9tIEB3aW5kaW5ndHJlZS9vcmcuanNvbi1zY2hlbWFcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0b3IudmFsaWRhdGUoc2NoZW1hLCBkaWREb2N1bWVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLmVycm9ycyAhPT0gbnVsbCkge1xuXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRvci5lcnJvcnMubWFwKGRldGFpbCA9PiB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRElEX0RPQ1VNRU5UJyxcbiAgICAgICAgICAgICAgICB3YXJuaW5nOiBkZXRhaWxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgdHJ1c3Qgb2JqZWN0cyBmcm9tIHRoZSBESUQgZG9jdW1lbnRcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkaWREb2N1bWVudCBESUQgZG9jdW1lbnRcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICAgKi9cbiAgICBhc3luYyB2ZXJpZnlUcnVzdFJlY29yZHMgKGRpZERvY3VtZW50KSB7XG5cbiAgICAgICAgaWYgKCFkaWREb2N1bWVudC50cnVzdCB8fCAhQXJyYXkuaXNBcnJheShkaWREb2N1bWVudC50cnVzdC5hc3NlcnRpb25zKSkge1xuICAgICAgICAgICAgLy8gTm90aGluZyB0byB2ZXJpZnlcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsb25lZCB0cnVzdCBzZWN0aW9uXG4gICAgICAgIGNvbnN0IHRydXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkaWREb2N1bWVudC50cnVzdCkpO1xuXG4gICAgICAgIC8vIE9yZ2FuaXphdGlvbiBJZCBwYXJ0IG9mIHRoZSBESURcbiAgICAgICAgY29uc3QgaWQgPSBkaWREb2N1bWVudC5pZC5tYXRjaCgvXmRpZDpvcmdpZDooMHhbYS1mQS1GMC05XXs2NH0pezF9JC9pbSlbMV07XG5cbiAgICAgICAgLy8gUHJvb2ZzIGV4aXN0ZW5jZSBmbGFnXG4gICAgICAgIGxldCBpc1Byb29mc0ZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQXNzZXJ0aW9ucyB2ZXJpZmljYXRpb25cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cnVzdC5hc3NlcnRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYXNzZXJ0aW9uID0gdHJ1c3QuYXNzZXJ0aW9uc1tpXTtcbiAgICAgICAgICAgIGxldCBhc3NlcnRpb25Db250ZW50O1xuICAgICAgICAgICAgbGV0IHByb29mRm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gV0hPSVMgaW5mb3JtYXRpb24gYWJvdXQgZG9tYWluXG4gICAgICAgICAgICBsZXQgd2hvaXNJbmZvO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGFzc2VydGlvbi50eXBlKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBGb3IgcHJvb2YgcmVjb3JkcyB0aGF0IHBsYWNlZCBpbnRvIEROUyB0ZXh0dWFsIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyBISU5GTyxTUEYsVFhUIHJlY29yZHMgdHlwZXMgYXJlIHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rucyc6XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFSZXNvdXJjZVJlY29yZFR5cGVzW2Fzc2VydGlvbi5wcm9vZl0pIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RSVVNUX0FTU0VSVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogcHJvb2YgdmFsdWUgXCIke2Fzc2VydGlvbi5wcm9vZn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaW4gdGhlIHJhbmdlIG9mIFske09iamVjdC5rZXlzKFJlc291cmNlUmVjb3JkVHlwZXMpLmpvaW4oJywnKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25Db250ZW50ID0gYXdhaXQgZ2V0RG5zRGF0YShhc3NlcnRpb24uY2xhaW0sIGFzc2VydGlvbi5wcm9vZik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3NlcnRpb25Db250ZW50Lmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiBjbGFpbSBzb3VyY2UgaXMgZW1wdHlgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGFzc2VydGlvbkNvbnRlbnQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWdFeHAoZGlkRG9jdW1lbnQuaWQsICdnJykudGVzdChyZWNvcmQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2ZGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9vZkZvdW5kKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RSVVNUX0FTU0VSVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYHRydXN0LmFzc2VydGlvbnNbJHtpfV06IHByb29mIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RSVVNUX0FTU0VSVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogY2Fubm90IGdldCB0aGUgcHJvb2ZgXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgdXNlZCBmb3IgaGFuZGxlIHByb29mcyB0aGF0IHJlbGF0ZWQgdG9cbiAgICAgICAgICAgICAgICAvLyB3ZWIgc2l0ZXMgYW5kIHNvY2lhbCBhY2NvdW50c1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NvY2lhbCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9tYWluJzpcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggV0hPSVMgaW5mb3JtYXRpb24gZm9yIGRvbWFpblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2VydGlvbi50eXBlID09PSAnZG9tYWluJyAmJiB0aGlzLnNlcnZpY2VNZXRob2RzLndob2lzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdERvbWFpbiA9IGFzc2VydGlvbi5jbGFpbS5tYXRjaCgvW14uXStcXC5bXi5dKyQvKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9pc0luZm8gPSBhd2FpdCB0aGlzLnNlcnZpY2VNZXRob2RzLndob2lzLmZldGNoKHJvb3REb21haW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb29mRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYHRydXN0LmFzc2VydGlvbnNbJHtpfV06IHVuYWJsZSB0byBmZXRjaCB3aG9pcyBpbmZvcm1hdGlvbmBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW4gb2JqZWN0IHByb3ZpZGVkIGFzIFZDIHByb29mIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB2YWxpZGF0ZSB0aGlzIHByb29mIGFzIGEgVmVyaWZpYWJsZSBjcmVkZW50aWFsXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc3NlcnRpb24ucHJvb2YubWF0Y2goL15kaWQub3JnaWQvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB2YWxpZGF0ZVZjKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb24ucHJvb2YsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbi5jbGFpbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcjIyMnLCBlcnIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiBWQyBESUQgbm90IHBhc3MgdmVyaWZpY2F0aW9uYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBhc3NlcnRpb24ucHJvb2YgcmVjb3JkIGFzIFVSTCB0byB0aGUgcHJvb2ZcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGluIHRoZSBhc3NlcnRpb24uY2xhaW0gbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVJlZ0V4cChgXihodHRwfGh0dHBzKTovLyh3d3cuKXswLDF9JHthc3NlcnRpb24uY2xhaW0ucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50ZXN0KGFzc2VydGlvbi5wcm9vZikpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogY2xhaW0gaXMgbm90IGluIHRoZSBkb21haW4gbmFtZXNwYWNlYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGZXRjaCBmaWxlIHdpdGggcHJvb2YgYnkgVVJJXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbkNvbnRlbnQgPSBhd2FpdCB0aGlzLmZldGNoRmlsZUJ5VXJpKGFzc2VydGlvbi5wcm9vZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uQ29udGVudCA9IHR5cGVvZiBhc3NlcnRpb25Db250ZW50ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGFzc2VydGlvbkNvbnRlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNzZXJ0aW9uQ29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiBjYW5ub3QgZ2V0IHRoZSBwcm9vZmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBkaWQgaW5zaWRlIHRoZSBmaWxlIG9idGFpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVJlZ0V4cChpZCwgJ2ltJykudGVzdChhc3NlcnRpb25Db250ZW50KSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiBESUQgbm90IGZvdW5kIGluIHRoZSBjbGFpbWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2ZGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGNhc2VzIHdoZXJlIHVua25vd24gYXNzZXJ0aW9uIHR5cGUgaGFzIGJlZW4gcHJvdmlkZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYHRydXN0LmFzc2VydGlvbnNbJHtpfV06IHVua25vd24gYXNzZXJ0aW9uIHR5cGUgXCIke2Fzc2VydGlvbi50eXBlfVwiYFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXNzZXJ0aW9uLnZlcmlmaWVkID0gcHJvb2ZGb3VuZDtcbiAgICAgICAgICAgIGFzc2VydGlvbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5hc3NlcnRpb24sXG4gICAgICAgICAgICAgICAgLi4uKFxuICAgICAgICAgICAgICAgICAgICB3aG9pc0luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdob2lzOiB3aG9pc0luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDoge31cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHJ1c3QuYXNzZXJ0aW9uc1tpXSA9IGFzc2VydGlvbjtcblxuICAgICAgICAgICAgaWYgKHByb29mRm91bmQpIHtcbiAgICAgICAgICAgICAgICBpc1Byb29mc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Byb29mc0ZvdW5kKSB7XG4gICAgICAgICAgICAvLyBKdXN0IG1hcmsgYXMgcGFzc2VkXG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN1bHQudHJ1c3QgPSB0cnVzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0LnRydXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgb3JnYW5pemF0aW9uIGRhdGFcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgb3JnYW5pemF0aW9uIElkXG4gICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICovXG4gICAgYXN5bmMgdmVyaWZ5TGlmU3Rha2UgKGlkKSB7XG4gICAgICAgIGlmICghdGhpcy5saWZEZXBvc2l0QWRkcmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0LmFsbCh7IGlkIH0sIHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGRlcG9zaXQgPSAwO1xuICAgICAgICBsZXQgd2l0aGRyYXdhbFJlcXVlc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBsaWZEZXBvc2l0Q29udHJhY3QgPSBuZXcgdGhpcy53ZWIzLmV0aC5Db250cmFjdChcbiAgICAgICAgICAgIExpZkRlcG9zaXRDb250cmFjdC5hYmksXG4gICAgICAgICAgICB0aGlzLmxpZkRlcG9zaXRBZGRyZXNzXG4gICAgICAgICk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlcG9zaXQgPSBhd2FpdCBsaWZEZXBvc2l0Q29udHJhY3RcbiAgICAgICAgICAgICAgICAubWV0aG9kc1snYmFsYW5jZU9mKGJ5dGVzMzIpJ10oaWQpLmNhbGwoKTtcblxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdFNvdXJjZSA9IGF3YWl0IGxpZkRlcG9zaXRDb250cmFjdFxuICAgICAgICAgICAgICAgIC5tZXRob2RzWydnZXRXaXRoZHJhd2FsUmVxdWVzdChieXRlczMyKSddKGlkKS5jYWxsKCk7XG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0U291cmNlLmV4aXN0cykge1xuXG4gICAgICAgICAgICAgICAgd2l0aGRyYXdhbFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXF1ZXN0U291cmNlLnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3VGltZTogcmVxdWVzdFNvdXJjZS53aXRoZHJhd1RpbWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVzdWx0LmxpZkRlcG9zaXQgPSB7XG4gICAgICAgICAgICAgICAgZGVwb3NpdCxcbiAgICAgICAgICAgICAgICB3aXRoZHJhd2FsUmVxdWVzdFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGRlcG9zaXQgIT09ICcwJyAmJiAhd2l0aGRyYXdhbFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBKdXN0IG1hcmsgYXMgcGFzc2VkXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdMSUZfU1RBS0UnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlcG9zaXQgIT09ICcwJyAmJiB3aXRoZHJhd2FsUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTElGX1NUQUtFJyxcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZzogJ1RoZSBvcmdhbml6YXRpb24gc2VudCBhIHdpdGhkcmF3YWwgcmVxdWVzdCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0xJRl9TVEFLRScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2ggYSBmaWxlIGJ5IHRoZSBnaXZlbiBVUklcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmkgVGhlIGZpbGUgVVJJXG4gICAgICogQHJldHVybnMge1Byb21pc2U8e09iamVjdHxzdHJpbmd9Pn0gRmV0Y2hlZCBmaWxlXG4gICAgICovXG4gICAgYXN5bmMgZmV0Y2hGaWxlQnlVcmkgKHVyaSkge1xuICAgICAgICBleHBlY3QuYWxsKHsgdXJpIH0sIHtcbiAgICAgICAgICAgIHVyaToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh1cmkgPT09ICcnKSB7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnRmV0Y2hlciBlcnJvcjogZW1wdHkgVVJJJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmZXRjaDtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5mZXRjaE1ldGhvZHMpLmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0luY29tcGxldGUgY29uZmlndXJhdGlvbjogYXQgbGVhc3Qgb25lIGZldGNoaW5nIG1ldGhvZCBzaG91bGQgYmUgcmVnaXN0ZXJlZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnkgdG8gY2hvb3NlIGEgc29jaWFsIGZldGNoIG1ldGhvZHNcbiAgICAgICAgZm9yIChjb25zdCBmIGluIHRoaXMuZmV0Y2hTb2NpYWxNZXRob2RzKSB7XG5cbiAgICAgICAgICAgIGlmIChSZWdFeHAodGhpcy5mZXRjaFNvY2lhbE1ldGhvZHNbZl0ucGF0dGVybikudGVzdCh1cmkpKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2ggPSB0aGlzLmZldGNoU29jaWFsTWV0aG9kc1tmXS5mZXRjaDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmV0Y2gpIHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBjaG9vc2UgYW5vdGhlciBmZXRjaGluZyBtZXRob2RcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBpbiB0aGlzLmZldGNoTWV0aG9kcykge1xuXG4gICAgICAgICAgICAgICAgaWYgKFJlZ0V4cCh0aGlzLmZldGNoTWV0aG9kc1tmXS5wYXR0ZXJuKS50ZXN0KHVyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2ggPSB0aGlzLmZldGNoTWV0aG9kc1tmXS5mZXRjaDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmZXRjaCkge1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEZldGNoZXIgZXJyb3I6IHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGZldGNoaW5nIG1ldGhvZCBmb3IgVVJJOiAke3VyaX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5aW5nIHRvIGZldGNoIHRoZSBmaWxlXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gYXdhaXQgZmV0Y2godXJpKTtcblxuICAgICAgICBpZiAoIWRvY3VtZW50KSB7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgRmV0Y2hlciBlcnJvcjogZmlsZSBub3QgZm91bmQgYnkgdGhlIGdpdmVuIFVSSTogJHt1cml9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAgZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2ggYSBESUQgZG9jdW1lbnQgYnkgdGhlIGdpdmVuIElkXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3JnYW5pemF0aW9uIFRoZSBvcmdhbml6YXRpb24gb2JqZWN0XG4gICAgICogQHJldHVybnMge1Byb21pc2U8e09iamVjdH0+fSBESUQgZG9jdW1lbnRcbiAgICAgKi9cbiAgICBhc3luYyBnZXREaWREb2N1bWVudCAob3JnYW5pemF0aW9uID0ge30pIHtcbiAgICAgICAgZXhwZWN0LmFsbChvcmdhbml6YXRpb24sIHtcbiAgICAgICAgICAgIG9yZ0lkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JnSnNvblVyaToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JnSnNvblVyaUJhY2t1cDE6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmdKc29uVXJpQmFja3VwMjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBvcmdJZCxcbiAgICAgICAgICAgIG9yZ0pzb25IYXNoLFxuICAgICAgICAgICAgb3JnSnNvblVyaSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAxLFxuICAgICAgICAgICAgb3JnSnNvblVyaUJhY2t1cDJcbiAgICAgICAgfSA9IG9yZ2FuaXphdGlvbjtcblxuICAgICAgICAvLyBSZXNvbHZlIGZpcnN0IHNldHRsZWQgcHJvbWlzZVxuICAgICAgICBjb25zdCBmaXJzdFNldHRsZWQgPSBhc3luYyBmZXRjaGVzID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmV0Y2hQcm9taXNlIG9mIGZldGNoZXMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaFByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIGZldGNoIERJRCBEb2N1bWVudCBmcm9tIGdpdmVuIHNvdXJjZXMuXG4gICAgICAgICAgICAgICAgICAgICR7ZXJyb3JzLmxlbmd0aCA/IGVycm9ycy5qb2luKCc7ICcpIDogJyd9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgZGlkRG9jdW1lbnQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRpZERvY3VtZW50ID0gYXdhaXQgZmlyc3RTZXR0bGVkKFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgb3JnSnNvblVyaSxcbiAgICAgICAgICAgICAgICAgICAgb3JnSnNvblVyaUJhY2t1cDEsXG4gICAgICAgICAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAyXG4gICAgICAgICAgICAgICAgXS5tYXAoXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9PiAoKSA9PiB0aGlzLmZldGNoRmlsZUJ5VXJpKHVyaSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRElEX0RPQ1VNRU5UJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0aHJvdzogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGlkT2JqZWN0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkaWRPYmplY3QgPSBKU09OLnBhcnNlKGRpZERvY3VtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9ET0NVTUVOVCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdCcm9rZW4gT1JHLkpTT04uIFVuYWJsZSB0byBwYXJzZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tcGFyaW5nIG9mIHRoZSBzdG9yZWQgYW5kIGFjdHVhbCBoYXNoXG4gICAgICAgIGlmIChtYWtlSGFzaChkaWREb2N1bWVudCwgdGhpcy53ZWIzKSAhPT0gb3JnSnNvbkhhc2gpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9ET0NVTUVOVCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdJbnZhbGlkIERJRCBEb2N1bWVudCBoYXNoJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBESUQgZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW5pbmcgYSBwcm9wZXIgRElEXG4gICAgICAgIGlmIChgZGlkOiR7dGhpcy5tZXRob2ROYW1lfToke29yZ0lkfWAgIT09IGRpZE9iamVjdC5pZCkge1xuXG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRElEX0RPQ1VNRU5UJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEludmFsaWQgRElEIERvY3VtZW50IGlkLiBFeHBlY3RlZCB0byBiZTogJHtvcmdJZH0sXG4gICAgICAgICAgICAgICAgICAgIGJ1dCBhY3R1YWwgaXM6ICR7ZGlkT2JqZWN0LmlkfWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN1bHQuZGlkRG9jdW1lbnQgPSBkaWRPYmplY3Q7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5kaWREb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIGZldGNoaW5nIG1ldGhvZCBmb3Igc29jaWFsIGFjY291bnRzXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWV0aG9kQ29uZmlnIFRoZSBmZXRjaGluZyBtZXRob2QgY29uZmlndXJhdGlvbiBjb25maWdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWV0aG9kT3B0aW9ucyBUaGUgZmV0Y2hpbmcgbWV0aG9kIG9wdGlvbnMgKEFQSSBrZXksIGV0YylcbiAgICAgKi9cbiAgICByZWdpc3RlclNvY2lhbEZldGNoTWV0aG9kIChtZXRob2RDb25maWcgPSB7fSwgbWV0aG9kT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGV4cGVjdC5hbGwobWV0aG9kQ29uZmlnLCB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXR0ZXJuOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmZXRjaDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmdW5jdGlvbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mZXRjaFNvY2lhbE1ldGhvZHNbbWV0aG9kQ29uZmlnLm5hbWVdID0ge1xuICAgICAgICAgICAgLi4ubWV0aG9kQ29uZmlnLFxuICAgICAgICAgICAgZmV0Y2g6IGFzeW5jIHVyaSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1ldGhvZE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG1ldGhvZENvbmZpZy5mZXRjaCh1cmksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGEgZmV0Y2hpbmcgbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWV0aG9kQ29uZmlnIFRoZSBmZXRjaGluZyBtZXRob2QgY29uZmlndXJhdGlvbiBjb25maWdcbiAgICAgKi9cbiAgICByZWdpc3RlckZldGNoTWV0aG9kIChtZXRob2RDb25maWcgPSB7fSkge1xuICAgICAgICBleHBlY3QuYWxsKG1ldGhvZENvbmZpZywge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmV0Y2g6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmV0Y2hNZXRob2RzW21ldGhvZENvbmZpZy5uYW1lXSA9IG1ldGhvZENvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIHNlcnZpY2UgbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWV0aG9kQ29uZmlnIFRoZSBzZXJ2aWNlIG1ldGhvZCBjb25maWd1cmF0aW9uIGNvbmZpZ1xuICAgICAqL1xuICAgIHJlZ2lzdGVyU2VydmljZSAobWV0aG9kQ29uZmlnID0ge30pIHtcbiAgICAgICAgZXhwZWN0LmFsbChtZXRob2RDb25maWcsIHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZldGNoOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VNZXRob2RzW21ldGhvZENvbmZpZy5uYW1lXSA9IG1ldGhvZENvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIE9yZ0lkIGNvbnRyYWN0IGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgT3JnSWQgY29udHJhY3QgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBnZXRPcmdJZENvbnRyYWN0ICgpIHtcblxuICAgICAgICBpZiAodGhpcy5jYWNoZS5vcmdJZENvbnRyYWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5vcmdJZENvbnRyYWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWNoZS5vcmdJZENvbnRyYWN0ID0gbmV3IHRoaXMud2ViMy5ldGguQ29udHJhY3QoXG4gICAgICAgICAgICBPcmdJZENvbnRyYWN0LmFiaSxcbiAgICAgICAgICAgIHRoaXMub3JnSWRBZGRyZXNzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlLm9yZ0lkQ29udHJhY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBvcmdhbml6YXRpb24gZGF0YVxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBvcmdhbml6YXRpb24gSWRcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBUaGUgT3JnSWQgY29udHJhY3QgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhc3luYyBnZXRPcmdhbml6YXRpb24gKGlkKSB7XG4gICAgICAgIGV4cGVjdC5hbGwoeyBpZCB9LCB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlLm9yZ2FuaXphdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUub3JnYW5pemF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JnSWRDb250cmFjdCA9IHRoaXMuZ2V0T3JnSWRDb250cmFjdCgpO1xuICAgICAgICBjb25zdCBvcmcgPSBhd2FpdCBvcmdJZENvbnRyYWN0XG4gICAgICAgICAgICAubWV0aG9kc1snZ2V0T3JnYW5pemF0aW9uKGJ5dGVzMzIpJ10oaWQpLmNhbGwoKTtcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBleGlzdHMsXG4gICAgICAgICAgICBvcmdJZCxcbiAgICAgICAgICAgIG9yZ0pzb25IYXNoLFxuICAgICAgICAgICAgb3JnSnNvblVyaSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAxLFxuICAgICAgICAgICAgb3JnSnNvblVyaUJhY2t1cDIsXG4gICAgICAgICAgICBwYXJlbnRPcmdJZCxcbiAgICAgICAgICAgIG93bmVyLFxuICAgICAgICAgICAgZGlyZWN0b3IsXG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGlzRGlyZWN0b3JzaGlwQWNjZXB0ZWRcbiAgICAgICAgfSA9IG9yZztcblxuICAgICAgICBpZiAoIWV4aXN0cykge1xuXG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnT1JHSUQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBgT3JnYW5pemF0aW9uICR7aWR9IG5vdCBmb3VuZGAsXG4gICAgICAgICAgICAgICAgdGhyb3c6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuXG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnT1JHSUQnLFxuICAgICAgICAgICAgICAgIHdhcm5pbmc6IGBPcmdhbml6YXRpb24gJHtpZH0gaXMgZGlzYWJsZWRgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXJlY3RvciAhPT0gemVyb0FkZHJlc3MgJiYgIWlzRGlyZWN0b3JzaGlwQWNjZXB0ZWQpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ09SR0lEJyxcbiAgICAgICAgICAgICAgICB3YXJuaW5nOiBgRGlyZWN0b3JzaGlwIG9mIHRoZSBvcmdhbml6YXRpb24gJHtpZH0gaXMgbm90IGFjY2VwdGVkYFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIG5vcm1hbGlzZWQgb3JpZ2FuaXphdGlvbiBvYmplY3RcbiAgICAgICAgdGhpcy5jYWNoZS5vcmdhbml6YXRpb24gPSB7XG4gICAgICAgICAgICBvcmdJZCxcbiAgICAgICAgICAgIG9yZ0pzb25IYXNoLFxuICAgICAgICAgICAgb3JnSnNvblVyaSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAxLFxuICAgICAgICAgICAgb3JnSnNvblVyaUJhY2t1cDIsXG4gICAgICAgICAgICBwYXJlbnRPcmdJZCxcbiAgICAgICAgICAgIG93bmVyLFxuICAgICAgICAgICAgZGlyZWN0b3IsXG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGlzRGlyZWN0b3JzaGlwQWNjZXB0ZWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlc3VsdC5vcmdhbml6YXRpb24gPSB0aGlzLmNhY2hlLm9yZ2FuaXphdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0Lm9yZ2FuaXphdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBmZXRjaGluZyBtZXRob2RzIG5hbWVzXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IFJlZ2lzdGVyZWQgZmV0Y2hpbmcgbmV0aG9kcyBuYW1lc1xuICAgICAqL1xuICAgIGdldEZldGNoTWV0aG9kcyAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZldGNoTWV0aG9kcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNwZWNpZmljIGNoZWNrIHJlc3VsdFxuICAgICAqIGFuZCB0aHJvd3MgYSBlcnJvciBpZiB0aGlzIGJlaGF2aW91ciBpcyBzZXQgaW4gdGhlIG9wdGlvbnNcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gUmVnaXN0ZXJlZCBmZXRjaGluZyBuZXRob2RzIG5hbWVzXG4gICAgICovXG4gICAgYWRkQ2hlY2tSZXN1bHQgKG9wdGlvbnMpIHtcbiAgICAgICAgZXhwZWN0LmFsbChvcHRpb25zLCB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2VudW0nLFxuICAgICAgICAgICAgICAgIHZhbHVlczogY2hlY2tzVHlwZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhcm5pbmc6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aHJvdzoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgeyB0eXBlLCBlcnJvciwgd2FybmluZyB9ID0gb3B0aW9ucztcblxuICAgICAgICAvLyBFeHRyYWN0IHNwZWNpZmljIGNoZWNrXG4gICAgICAgIHRoaXMucmVzdWx0LmNoZWNrcyA9IHRoaXMucmVzdWx0LmNoZWNrcy5tYXAoXG4gICAgICAgICAgICBjaGVjayA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jaGVjayxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihjaGVjay5lcnJvcnMgfHwgW10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLltlcnJvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihjaGVjay53YXJuaW5nIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5bd2FybmluZ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY2hlY2sucGFzc2VkID0gIWNoZWNrLmVycm9ycyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrLmVycm9ycyAmJiBjaGVjay5lcnJvcnMubGVuZ3RoID09PSAwKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudGhyb3cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgJHt0eXBlfTogJHtlcnJvcn1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3Bhd25SZXNvbHZlciAoKSB7XG4gICAgICAgIGNvbnN0IHNwYXduZWRSZXNvbHZlciA9IG5ldyBPcmdJZFJlc29sdmVyKHtcbiAgICAgICAgICAgIHdlYjM6IHRoaXMud2ViMyxcbiAgICAgICAgICAgIG9yZ0lkOiB0aGlzLm9yZ0lkQWRkcmVzcyxcbiAgICAgICAgICAgIGxpZkRlcG9zaXQ6IHRoaXMubGlmRGVwb3NpdEFkZHJlc3NcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bhd25lZFJlc29sdmVyLmZldGNoU29jaWFsTWV0aG9kcyA9IHRoaXMuZmV0Y2hTb2NpYWxNZXRob2RzO1xuICAgICAgICBzcGF3bmVkUmVzb2x2ZXIuZmV0Y2hNZXRob2RzID0gdGhpcy5mZXRjaE1ldGhvZHM7XG4gICAgICAgIHNwYXduZWRSZXNvbHZlci5zZXJ2aWNlTWV0aG9kcyA9IHRoaXMuc2VydmljZU1ldGhvZHM7XG4gICAgICAgIHJldHVybiBzcGF3bmVkUmVzb2x2ZXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5PcmdJZFJlc29sdmVyID0gT3JnSWRSZXNvbHZlcjtcbm1vZHVsZS5leHBvcnRzLmh0dHBGZXRjaE1ldGhvZCA9IGh0dHBGZXRjaE1ldGhvZDtcbm1vZHVsZS5leHBvcnRzLmxpbmtlZEluRmV0Y2hNZXRob2QgPSBsaW5rZWRJbkZldGNoTWV0aG9kO1xubW9kdWxlLmV4cG9ydHMudHdpdHRlckZldGNoTWV0aG9kID0gdHdpdHRlckZldGNoTWV0aG9kO1xubW9kdWxlLmV4cG9ydHMud2hvaXNTZXJ2aWNlID0gd2hvaXNTZXJ2aWNlO1xubW9kdWxlLmV4cG9ydHMuY2hlY2tzVHlwZXMgPSBPYmplY3QuYXNzaWduKHt9LCBjaGVja3NUeXBlcyk7XG4iXX0=
package/dist/linkedIn.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";require("regenerator-runtime/runtime.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var axios=require("axios");// Configuration of the HTTP fetching method
2
- module.exports={name:"linkedin",pattern:"linkedin",fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(uri,options){var activityId,source,timeout,response;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:activityId=uri.split(":activity:")[1];source=axios.CancelToken.source();timeout=setTimeout(function(){return source.cancel("Cannot connect to the source: ".concat(uri))},7000);// connection timeout
3
- _context.next=5;return axios({method:"get",url:"https://api.linkedin.com/v2/activities?ids=List(".concat(activityId,")"),headers:{"Authorization":"Bearer ".concat(options.key),"cache-control":"no-cache","X-Restli-Protocol-Version":"2.0.0"},transformResponse:[function(data){return data}],// Do not convert JSON to object
4
- cancelToken:source.token});case 5:response=_context.sent;clearTimeout(timeout);console.log("@@@@@@@@@@@@@@@@@@@@@",response);return _context.abrupt("return",response.data);case 9:case"end":return _context.stop();}}},_callee)}));function fetch(_x,_x2){return _fetch.apply(this,arguments)}return fetch}()};
5
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saW5rZWRJbi5qcyJdLCJuYW1lcyI6WyJheGlvcyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsInBhdHRlcm4iLCJmZXRjaCIsInVyaSIsIm9wdGlvbnMiLCJhY3Rpdml0eUlkIiwic3BsaXQiLCJzb3VyY2UiLCJDYW5jZWxUb2tlbiIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiY2FuY2VsIiwibWV0aG9kIiwidXJsIiwiaGVhZGVycyIsImtleSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiZGF0YSIsImNhbmNlbFRva2VuIiwidG9rZW4iLCJyZXNwb25zZSIsImNsZWFyVGltZW91dCIsImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJ1eUJBQUEsR0FBTUEsQ0FBQUEsS0FBSyxDQUFHQyxPQUFPLENBQUMsT0FBRCxDQUFyQixDQUVBO0FBQ0FDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUNiQyxJQUFJLENBQUUsVUFETyxDQUViQyxPQUFPLENBQUUsVUFGSSxDQUdiQyxLQUFLLDhFQUFFLGlCQUFPQyxHQUFQLENBQVlDLE9BQVosd0pBQ0dDLFVBREgsQ0FDZ0JGLEdBQUcsQ0FBQ0csS0FBSixDQUFVLFlBQVYsRUFBd0IsQ0FBeEIsQ0FEaEIsQ0FFR0MsTUFGSCxDQUVZWCxLQUFLLENBQUNZLFdBQU4sQ0FBa0JELE1BQWxCLEVBRlosQ0FHR0UsT0FISCxDQUdhQyxVQUFVLENBQUMsaUJBQU1ILENBQUFBLE1BQU0sQ0FBQ0ksTUFBUCx5Q0FDSVIsR0FESixFQUFOLENBQUQsQ0FFdkIsSUFGdUIsQ0FIdkIsQ0FLTTtBQUxOLHNCQU1vQlAsQ0FBQUEsS0FBSyxDQUN4QixDQUNJZ0IsTUFBTSxDQUFFLEtBRFosQ0FFSUMsR0FBRywyREFBcURSLFVBQXJELEtBRlAsQ0FHSVMsT0FBTyxDQUFFLENBQ0wsaUNBQTJCVixPQUFPLENBQUNXLEdBQW5DLENBREssQ0FFTCxnQkFBaUIsVUFGWixDQUdMLDRCQUE2QixPQUh4QixDQUhiLENBUUlDLGlCQUFpQixDQUFFLENBQUMsU0FBQUMsSUFBSSxRQUFJQSxDQUFBQSxJQUFKLENBQUwsQ0FSdkIsQ0FRdUM7QUFDbkNDLFdBQVcsQ0FBRVgsTUFBTSxDQUFDWSxLQVR4QixDQUR3QixDQU56QixRQU1HQyxRQU5ILGVBbUJIQyxZQUFZLENBQUNaLE9BQUQsQ0FBWixDQUNBYSxPQUFPLENBQUNDLEdBQVIsQ0FBWSx1QkFBWixDQUFxQ0gsUUFBckMsRUFwQkcsZ0NBcUJJQSxRQUFRLENBQUNILElBckJiLHVEQUFGLDZFQUhRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuXG4vLyBDb25maWd1cmF0aW9uIG9mIHRoZSBIVFRQIGZldGNoaW5nIG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmFtZTogJ2xpbmtlZGluJyxcbiAgICBwYXR0ZXJuOiAnbGlua2VkaW4nLFxuICAgIGZldGNoOiBhc3luYyAodXJpLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSB1cmkuc3BsaXQoJzphY3Rpdml0eTonKVsxXTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gYXhpb3MuQ2FuY2VsVG9rZW4uc291cmNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHNvdXJjZS5jYW5jZWwoXG4gICAgICAgICAgICBgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNvdXJjZTogJHt1cml9YFxuICAgICAgICApLCA3MDAwKTsvLyBjb25uZWN0aW9uIHRpbWVvdXRcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmxpbmtlZGluLmNvbS92Mi9hY3Rpdml0aWVzP2lkcz1MaXN0KCR7YWN0aXZpdHlJZH0pYCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke29wdGlvbnMua2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUmVzdGxpLVByb3RvY29sLVZlcnNpb24nOiAnMi4wLjAnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZTogW2RhdGEgPT4gZGF0YV0sIC8vIERvIG5vdCBjb252ZXJ0IEpTT04gdG8gb2JqZWN0XG4gICAgICAgICAgICAgICAgY2FuY2VsVG9rZW46IHNvdXJjZS50b2tlblxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdAQEBAQEBAQEBAQEBAQEBAQEBAQEAnLCByZXNwb25zZSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH1cbn07XG4iXX0=
package/dist/twitter.js DELETED
@@ -1,6 +0,0 @@
1
- "use strict";require("regenerator-runtime/runtime.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var axios=require("axios");// https://twitter.com/mindsaur/status/1263529968690225152
2
- // Configuration of the HTTP fetching method
3
- module.exports={name:"twitter",pattern:"twitter",fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(uri,options){var tweetId,source,timeout,response;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:tweetId=uri.split("/status/")[1];source=axios.CancelToken.source();timeout=setTimeout(function(){return source.cancel("Cannot connect to the source: ".concat(uri))},7000);// connection timeout
4
- _context.next=5;return axios({method:"get",url:"https://api.twitter.com/2/tweets/".concat(tweetId),headers:{"Authorization":"Bearer ".concat(options.key),"cache-control":"no-cache"},transformResponse:[function(data){return data}],// Do not convert JSON to object
5
- cancelToken:source.token});case 5:response=_context.sent;clearTimeout(timeout);return _context.abrupt("return",response.data);case 8:case"end":return _context.stop();}}},_callee)}));function fetch(_x,_x2){return _fetch.apply(this,arguments)}return fetch}()};
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90d2l0dGVyLmpzIl0sIm5hbWVzIjpbImF4aW9zIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJuYW1lIiwicGF0dGVybiIsImZldGNoIiwidXJpIiwib3B0aW9ucyIsInR3ZWV0SWQiLCJzcGxpdCIsInNvdXJjZSIsIkNhbmNlbFRva2VuIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJjYW5jZWwiLCJtZXRob2QiLCJ1cmwiLCJoZWFkZXJzIiwia2V5IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJkYXRhIiwiY2FuY2VsVG9rZW4iLCJ0b2tlbiIsInJlc3BvbnNlIiwiY2xlYXJUaW1lb3V0Il0sIm1hcHBpbmdzIjoidXlCQUFBLEdBQU1BLENBQUFBLEtBQUssQ0FBR0MsT0FBTyxDQUFDLE9BQUQsQ0FBckIsQ0FFQTtBQUVBO0FBQ0FDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUNiQyxJQUFJLENBQUUsU0FETyxDQUViQyxPQUFPLENBQUUsU0FGSSxDQUdiQyxLQUFLLDhFQUFFLGlCQUFPQyxHQUFQLENBQVlDLE9BQVoscUpBQ0dDLE9BREgsQ0FDYUYsR0FBRyxDQUFDRyxLQUFKLENBQVUsVUFBVixFQUFzQixDQUF0QixDQURiLENBRUdDLE1BRkgsQ0FFWVgsS0FBSyxDQUFDWSxXQUFOLENBQWtCRCxNQUFsQixFQUZaLENBR0dFLE9BSEgsQ0FHYUMsVUFBVSxDQUFDLGlCQUFNSCxDQUFBQSxNQUFNLENBQUNJLE1BQVAseUNBQ0lSLEdBREosRUFBTixDQUFELENBRXZCLElBRnVCLENBSHZCLENBS007QUFMTixzQkFNb0JQLENBQUFBLEtBQUssQ0FDeEIsQ0FDSWdCLE1BQU0sQ0FBRSxLQURaLENBRUlDLEdBQUcsNENBQXNDUixPQUF0QyxDQUZQLENBR0lTLE9BQU8sQ0FBRSxDQUNMLGlDQUEyQlYsT0FBTyxDQUFDVyxHQUFuQyxDQURLLENBRUwsZ0JBQWlCLFVBRlosQ0FIYixDQU9JQyxpQkFBaUIsQ0FBRSxDQUFDLFNBQUFDLElBQUksUUFBSUEsQ0FBQUEsSUFBSixDQUFMLENBUHZCLENBT3VDO0FBQ25DQyxXQUFXLENBQUVYLE1BQU0sQ0FBQ1ksS0FSeEIsQ0FEd0IsQ0FOekIsUUFNR0MsUUFOSCxlQWtCSEMsWUFBWSxDQUFDWixPQUFELENBQVosQ0FsQkcsZ0NBbUJJVyxRQUFRLENBQUNILElBbkJiLHVEQUFGLDZFQUhRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuXG4vLyBodHRwczovL3R3aXR0ZXIuY29tL21pbmRzYXVyL3N0YXR1cy8xMjYzNTI5OTY4NjkwMjI1MTUyXG5cbi8vIENvbmZpZ3VyYXRpb24gb2YgdGhlIEhUVFAgZmV0Y2hpbmcgbWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYW1lOiAndHdpdHRlcicsXG4gICAgcGF0dGVybjogJ3R3aXR0ZXInLFxuICAgIGZldGNoOiBhc3luYyAodXJpLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHR3ZWV0SWQgPSB1cmkuc3BsaXQoJy9zdGF0dXMvJylbMV07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGF4aW9zLkNhbmNlbFRva2VuLnNvdXJjZSgpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBzb3VyY2UuY2FuY2VsKFxuICAgICAgICAgICAgYENhbm5vdCBjb25uZWN0IHRvIHRoZSBzb3VyY2U6ICR7dXJpfWBcbiAgICAgICAgKSwgNzAwMCk7Ly8gY29ubmVjdGlvbiB0aW1lb3V0XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS50d2l0dGVyLmNvbS8yL3R3ZWV0cy8ke3R3ZWV0SWR9YCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke29wdGlvbnMua2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IFtkYXRhID0+IGRhdGFdLCAvLyBEbyBub3QgY29udmVydCBKU09OIHRvIG9iamVjdFxuICAgICAgICAgICAgICAgIGNhbmNlbFRva2VuOiBzb3VyY2UudG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG59O1xuIl19
package/dist/utils/cli.js DELETED
@@ -1,23 +0,0 @@
1
- "use strict";require("core-js/modules/es.symbol.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/es.array.from.js");require("core-js/modules/es.function.name.js");require("core-js/modules/es.array.slice.js");require("core-js/modules/es.array.for-each.js");require("core-js/modules/web.dom-collections.for-each.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.string.match.js");require("core-js/modules/es.parse-int.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.regexp.to-string.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}/**
2
- * Parse argv parameters
3
- * @param {String[]} argv Argv array to parce
4
- * @param {Number} skip Count of parameters to skip from beginning of the array
5
- * @returns {Object} Object with command line arguments
6
- */module.exports.parseArgv=function(argv){var skip=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(!Array.isArray(argv)){throw new Error("ERROR_INVALID_ARGV")}argv=argv.slice(skip);var normalised=[];var args={};argv.forEach(function(arg){// Splitting and cleananup
7
- normalised=[].concat(_toConsumableArray(normalised),_toConsumableArray(arg.split("=").map(function(a){return a.replace(/^-{1,2}/g,"")})))});for(var i=0;i<normalised.length;i+=2){args[normalised[i]]=normalised[i+1]?normalised[i+1]:""}return args};/**
8
- * Parse command parameters
9
- * @param {Object} params
10
- * @returns {String[]}
11
- */module.exports.parseParams=function(params){if(!params){return[]}return params.split(",").map(function(p){var template=/^number:/g;return p.match(template)?parseInt(p.replace(template,"")):p})};/**
12
- * Replace properties in the arguments array
13
- * @param {string[]} source Array of arguments
14
- * @param {Object} options Replacements object
15
- * @returns {string[]}
16
- */module.exports.applyArgs=function(){var source=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return source.map(function(i){return options[i]?options[i]:i})};// Converting result property
17
- // Calling recursively on objects and arrays
18
- var convertProperty=function convertProperty(prop){if(typeof prop==="string"){return prop}if(typeof prop==="number"){return String(prop)}if(web3.utils.isBN(prop)||web3.utils.isBigNumber(prop)){return prop.toString()}if(Array.isArray(prop)){return prop.map(function(p){return convertProperty(p)})}if(_typeof(prop)==="object"){for(var p in prop){prop[p]=convertProperty(prop[p])}return prop}return prop};/**
19
- * Converting web3 result to string value
20
- * @param {*} result web3 call result
21
- * @returns {*}
22
- */module.exports.parseCallResult=function(result){return convertProperty(result)};
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jbGkuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInBhcnNlQXJndiIsImFyZ3YiLCJza2lwIiwiQXJyYXkiLCJpc0FycmF5IiwiRXJyb3IiLCJzbGljZSIsIm5vcm1hbGlzZWQiLCJhcmdzIiwiZm9yRWFjaCIsImFyZyIsInNwbGl0IiwibWFwIiwiYSIsInJlcGxhY2UiLCJpIiwibGVuZ3RoIiwicGFyc2VQYXJhbXMiLCJwYXJhbXMiLCJwIiwidGVtcGxhdGUiLCJtYXRjaCIsInBhcnNlSW50IiwiYXBwbHlBcmdzIiwic291cmNlIiwib3B0aW9ucyIsImNvbnZlcnRQcm9wZXJ0eSIsInByb3AiLCJTdHJpbmciLCJ3ZWIzIiwidXRpbHMiLCJpc0JOIiwiaXNCaWdOdW1iZXIiLCJ0b1N0cmluZyIsInBhcnNlQ2FsbFJlc3VsdCIsInJlc3VsdCJdLCJtYXBwaW5ncyI6InkwRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDQUEsTUFBTSxDQUFDQyxPQUFQLENBQWVDLFNBQWYsQ0FBMkIsU0FBQ0MsSUFBRCxDQUFvQixJQUFiQyxDQUFBQSxJQUFhLDJEQUFOLENBQU0sQ0FFM0MsR0FBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsSUFBZCxDQUFMLENBQTBCLENBQ3RCLEtBQU0sSUFBSUksQ0FBQUEsS0FBSixDQUFVLG9CQUFWLENBQ1QsQ0FFREosSUFBSSxDQUFHQSxJQUFJLENBQUNLLEtBQUwsQ0FBV0osSUFBWCxDQUFQLENBRUEsR0FBSUssQ0FBQUEsVUFBVSxDQUFHLEVBQWpCLENBQ0EsR0FBTUMsQ0FBQUEsSUFBSSxDQUFHLEVBQWIsQ0FFQVAsSUFBSSxDQUFDUSxPQUFMLENBQWEsU0FBQ0MsR0FBRCxDQUFTLENBRWxCO0FBQ0FILFVBQVUsOEJBQU9BLFVBQVAscUJBQXVCRyxHQUFHLENBQUNDLEtBQUosQ0FBVSxHQUFWLENBQUQsQ0FDM0JDLEdBRDJCLENBQ3ZCLFNBQUFDLENBQUMsUUFBSUEsQ0FBQUEsQ0FBQyxDQUFDQyxPQUFGLENBQVUsVUFBVixDQUFzQixFQUF0QixDQUFKLENBRHNCLENBQXRCLEVBRWIsQ0FMRCxFQU9BLElBQUssR0FBSUMsQ0FBQUEsQ0FBQyxDQUFHLENBQWIsQ0FBZ0JBLENBQUMsQ0FBR1IsVUFBVSxDQUFDUyxNQUEvQixDQUF1Q0QsQ0FBQyxFQUFJLENBQTVDLENBQStDLENBQzNDUCxJQUFJLENBQUNELFVBQVUsQ0FBQ1EsQ0FBRCxDQUFYLENBQUosQ0FBc0JSLFVBQVUsQ0FBQ1EsQ0FBQyxDQUFHLENBQUwsQ0FBVixDQUFvQlIsVUFBVSxDQUFDUSxDQUFDLENBQUcsQ0FBTCxDQUE5QixDQUF3QyxFQUNqRSxDQUVELE1BQU9QLENBQUFBLElBQ1YsQ0F2QkQsQ0F5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNBVixNQUFNLENBQUNDLE9BQVAsQ0FBZWtCLFdBQWYsQ0FBNkIsU0FBQUMsTUFBTSxDQUFJLENBRW5DLEdBQUksQ0FBQ0EsTUFBTCxDQUFhLENBQ1QsTUFBTyxFQUNWLENBRUQsTUFBT0EsQ0FBQUEsTUFBTSxDQUFDUCxLQUFQLENBQWEsR0FBYixFQUFrQkMsR0FBbEIsQ0FBc0IsU0FBQU8sQ0FBQyxDQUFJLENBQzlCLEdBQU1DLENBQUFBLFFBQVEsQ0FBRyxXQUFqQixDQUNBLE1BQU9ELENBQUFBLENBQUMsQ0FBQ0UsS0FBRixDQUFRRCxRQUFSLEVBQW9CRSxRQUFRLENBQUNILENBQUMsQ0FBQ0wsT0FBRixDQUFVTSxRQUFWLENBQW9CLEVBQXBCLENBQUQsQ0FBNUIsQ0FBd0RELENBQ2xFLENBSE0sQ0FJVixDQVZELENBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ0FyQixNQUFNLENBQUNDLE9BQVAsQ0FBZXdCLFNBQWYsQ0FBMkIsY0FBQ0MsQ0FBQUEsTUFBRCwyREFBVSxFQUFWLElBQWNDLENBQUFBLE9BQWQsMkRBQXdCLEVBQXhCLE9BQStCRCxDQUFBQSxNQUFNLENBQUNaLEdBQVAsQ0FDdEQsU0FBQUcsQ0FBQyxRQUFJVSxDQUFBQSxPQUFPLENBQUNWLENBQUQsQ0FBUCxDQUFhVSxPQUFPLENBQUNWLENBQUQsQ0FBcEIsQ0FBMEJBLENBQTlCLENBRHFELENBQS9CLENBQTNCLENBSUE7QUFDQTtBQUNBLEdBQU1XLENBQUFBLGVBQWUsQ0FBRyxRQUFsQkEsQ0FBQUEsZUFBa0IsQ0FBQUMsSUFBSSxDQUFJLENBRTVCLEdBQUksTUFBT0EsQ0FBQUEsSUFBUCxHQUFnQixRQUFwQixDQUE4QixDQUMxQixNQUFPQSxDQUFBQSxJQUNWLENBRUQsR0FBSSxNQUFPQSxDQUFBQSxJQUFQLEdBQWdCLFFBQXBCLENBQThCLENBQzFCLE1BQU9DLENBQUFBLE1BQU0sQ0FBQ0QsSUFBRCxDQUNoQixDQUVELEdBQUlFLElBQUksQ0FBQ0MsS0FBTCxDQUFXQyxJQUFYLENBQWdCSixJQUFoQixHQUF5QkUsSUFBSSxDQUFDQyxLQUFMLENBQVdFLFdBQVgsQ0FBdUJMLElBQXZCLENBQTdCLENBQTJELENBQ3ZELE1BQU9BLENBQUFBLElBQUksQ0FBQ00sUUFBTCxFQUNWLENBRUQsR0FBSTlCLEtBQUssQ0FBQ0MsT0FBTixDQUFjdUIsSUFBZCxDQUFKLENBQXlCLENBQ3JCLE1BQU9BLENBQUFBLElBQUksQ0FBQ2YsR0FBTCxDQUFTLFNBQUFPLENBQUMsUUFBSU8sQ0FBQUEsZUFBZSxDQUFDUCxDQUFELENBQW5CLENBQVYsQ0FDVixDQUVELEdBQUksUUFBT1EsSUFBUCxJQUFnQixRQUFwQixDQUE4QixDQUMxQixJQUFLLEdBQU1SLENBQUFBLENBQVgsR0FBZ0JRLENBQUFBLElBQWhCLENBQXNCLENBQ2xCQSxJQUFJLENBQUNSLENBQUQsQ0FBSixDQUFVTyxlQUFlLENBQUNDLElBQUksQ0FBQ1IsQ0FBRCxDQUFMLENBQzVCLENBQ0QsTUFBT1EsQ0FBQUEsSUFDVixDQUVELE1BQU9BLENBQUFBLElBQ1YsQ0ExQkQsQ0E0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNBN0IsTUFBTSxDQUFDQyxPQUFQLENBQWVtQyxlQUFmLENBQWlDLFNBQUFDLE1BQU0sUUFBSVQsQ0FBQUEsZUFBZSxDQUFDUyxNQUFELENBQW5CLENBQXZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBhcmd2IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7U3RyaW5nW119IGFyZ3YgQXJndiBhcnJheSB0byBwYXJjZVxuICogQHBhcmFtIHtOdW1iZXJ9IHNraXAgQ291bnQgb2YgcGFyYW1ldGVycyB0byBza2lwIGZyb20gYmVnaW5uaW5nIG9mICB0aGUgYXJyYXlcbiAqIEByZXR1cm5zIHtPYmplY3R9IE9iamVjdCB3aXRoIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqL1xubW9kdWxlLmV4cG9ydHMucGFyc2VBcmd2ID0gKGFyZ3YsIHNraXAgPSAwKSA9PiB7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJndikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFUlJPUl9JTlZBTElEX0FSR1YnKTtcbiAgICB9XG5cbiAgICBhcmd2ID0gYXJndi5zbGljZShza2lwKTtcblxuICAgIGxldCBub3JtYWxpc2VkID0gW107XG4gICAgY29uc3QgYXJncyA9IHt9O1xuXG4gICAgYXJndi5mb3JFYWNoKChhcmcpID0+IHtcblxuICAgICAgICAvLyBTcGxpdHRpbmcgYW5kIGNsZWFuYW51cFxuICAgICAgICBub3JtYWxpc2VkID0gWy4uLm5vcm1hbGlzZWQsIC4uLihhcmcuc3BsaXQoJz0nKSlcbiAgICAgICAgICAgIC5tYXAoYSA9PiBhLnJlcGxhY2UoL14tezEsMn0vZywgJycpKV07XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vcm1hbGlzZWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgYXJnc1tub3JtYWxpc2VkW2ldXSA9IG5vcm1hbGlzZWRbaSArIDFdID8gbm9ybWFsaXNlZFtpICsgMV0gOiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbn07XG5cbi8qKlxuICogUGFyc2UgY29tbWFuZCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7U3RyaW5nW119XG4gKi9cbm1vZHVsZS5leHBvcnRzLnBhcnNlUGFyYW1zID0gcGFyYW1zID0+IHtcblxuICAgIGlmICghcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLnNwbGl0KCcsJykubWFwKHAgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IC9ebnVtYmVyOi9nO1xuICAgICAgICByZXR1cm4gcC5tYXRjaCh0ZW1wbGF0ZSkgPyBwYXJzZUludChwLnJlcGxhY2UodGVtcGxhdGUsICcnKSkgOiBwO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBSZXBsYWNlIHByb3BlcnRpZXMgaW4gdGhlIGFyZ3VtZW50cyBhcnJheVxuICogQHBhcmFtIHtzdHJpbmdbXX0gc291cmNlIEFycmF5IG9mIGFyZ3VtZW50c1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgUmVwbGFjZW1lbnRzIG9iamVjdFxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICovXG5tb2R1bGUuZXhwb3J0cy5hcHBseUFyZ3MgPSAoc291cmNlID0gW10sIG9wdGlvbnMgPSB7fSkgPT4gc291cmNlLm1hcChcbiAgICBpID0+IG9wdGlvbnNbaV0gPyBvcHRpb25zW2ldIDogaVxuKTtcblxuLy8gQ29udmVydGluZyByZXN1bHQgcHJvcGVydHlcbi8vIENhbGxpbmcgcmVjdXJzaXZlbHkgb24gb2JqZWN0cyBhbmQgYXJyYXlzXG5jb25zdCBjb252ZXJ0UHJvcGVydHkgPSBwcm9wID0+IHtcblxuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHByb3ApO1xuICAgIH1cblxuICAgIGlmICh3ZWIzLnV0aWxzLmlzQk4ocHJvcCkgfHwgd2ViMy51dGlscy5pc0JpZ051bWJlcihwcm9wKSkge1xuICAgICAgICByZXR1cm4gcHJvcC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3ApKSB7XG4gICAgICAgIHJldHVybiBwcm9wLm1hcChwID0+IGNvbnZlcnRQcm9wZXJ0eShwKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcHJvcCkge1xuICAgICAgICAgICAgcHJvcFtwXSA9IGNvbnZlcnRQcm9wZXJ0eShwcm9wW3BdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcDtcbn07XG5cbi8qKlxuICogQ29udmVydGluZyB3ZWIzIHJlc3VsdCB0byBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gcmVzdWx0IHdlYjMgY2FsbCByZXN1bHRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5tb2R1bGUuZXhwb3J0cy5wYXJzZUNhbGxSZXN1bHQgPSByZXN1bHQgPT4gY29udmVydFByb3BlcnR5KHJlc3VsdCk7XG4iXX0=
@@ -1,2 +0,0 @@
1
- "use strict";module.exports.zeroAddress="0x0000000000000000000000000000000000000000";
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInplcm9BZGRyZXNzIl0sIm1hcHBpbmdzIjoiYUFBQUEsTUFBTSxDQUFDQyxPQUFQLENBQWVDLFdBQWYsQ0FBNkIsNENBQTdCIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMuemVyb0FkZHJlc3MgPSAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiJdfQ==
@@ -1,2 +0,0 @@
1
- "use strict";var makeHash=function makeHash(jsonString,web3){return web3.utils.soliditySha3(jsonString)};module.exports.makeHash=makeHash;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb2N1bWVudC5qcyJdLCJuYW1lcyI6WyJtYWtlSGFzaCIsImpzb25TdHJpbmciLCJ3ZWIzIiwidXRpbHMiLCJzb2xpZGl0eVNoYTMiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiYUFBQSxHQUFNQSxDQUFBQSxRQUFRLENBQUcsUUFBWEEsQ0FBQUEsUUFBVyxDQUFDQyxVQUFELENBQWFDLElBQWIsUUFBc0JBLENBQUFBLElBQUksQ0FBQ0MsS0FBTCxDQUNsQ0MsWUFEa0MsQ0FDckJILFVBRHFCLENBQXRCLENBQWpCLENBRUFJLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlTixRQUFmLENBQTBCQSxRQUExQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IG1ha2VIYXNoID0gKGpzb25TdHJpbmcsIHdlYjMpID0+IHdlYjMudXRpbHNcbiAgICAuc29saWRpdHlTaGEzKGpzb25TdHJpbmcpO1xubW9kdWxlLmV4cG9ydHMubWFrZUhhc2ggPSBtYWtlSGFzaDtcbiJdfQ==
@@ -1,20 +0,0 @@
1
- "use strict";require("core-js/modules/es.object.set-prototype-of.js");require("core-js/modules/es.object.get-prototype-of.js");require("core-js/modules/es.array.index-of.js");require("core-js/modules/es.reflect.construct.js");require("core-js/modules/es.map.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/esnext.map.delete-all.js");require("core-js/modules/esnext.map.every.js");require("core-js/modules/esnext.map.filter.js");require("core-js/modules/esnext.map.find.js");require("core-js/modules/esnext.map.find-key.js");require("core-js/modules/esnext.map.includes.js");require("core-js/modules/esnext.map.key-of.js");require("core-js/modules/esnext.map.map-keys.js");require("core-js/modules/esnext.map.map-values.js");require("core-js/modules/esnext.map.merge.js");require("core-js/modules/esnext.map.reduce.js");require("core-js/modules/esnext.map.some.js");require("core-js/modules/esnext.map.update.js");require("core-js/modules/es.symbol.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("core-js/modules/es.object.keys.js");require("core-js/modules/es.array.reduce.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.string.includes.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.regexp.constructor.js");require("core-js/modules/es.regexp.to-string.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}else if(call!==void 0){throw new TypeError("Derived constructors may only return object or undefined")}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _wrapNativeSuper(Class){var _cache=typeof Map==="function"?new Map:undefined;_wrapNativeSuper=function _wrapNativeSuper(Class){if(Class===null||!_isNativeFunction(Class))return Class;if(typeof Class!=="function"){throw new TypeError("Super expression must either be null or a function")}if(typeof _cache!=="undefined"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _setPrototypeOf(Wrapper,Class)};return _wrapNativeSuper(Class)}function _construct(Parent,args,Class){if(_isNativeReflectConstruct()){_construct=Reflect.construct}else{_construct=function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor;if(Class)_setPrototypeOf(instance,Class.prototype);return instance}}return _construct.apply(null,arguments)}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _isNativeFunction(fn){return Function.toString.call(fn).indexOf("[native code]")!==-1}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var _require=require("web3"),web3utils=_require.utils;/**
2
- * ExpectError class
3
- * @class ExpectError
4
- * @extends {Error}
5
- */var ExpectError=/*#__PURE__*/function(_Error){_inherits(ExpectError,_Error);var _super=_createSuper(ExpectError);/**
6
- * Creates an instance of ExpectError.
7
- * @param {String} message
8
- * @memberof ExpectError
9
- */function ExpectError(){var _this;var message=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"Unknown error";_classCallCheck(this,ExpectError);// eslint-disable-line space-before-function-paren
10
- _this=_super.call(this,message);for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}_this.args=args;return _this}return ExpectError}(/*#__PURE__*/_wrapNativeSuper(Error));;module.exports.ExpectError=ExpectError;/**
11
- * Ensuring expected parameters helper
12
- * @param {Object} options
13
- * @param {Object} model
14
- */var all=function all(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var model=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(_typeof(options)!=="object"||Object.keys(options).length===0){throw new ExpectError("Options for \"expect.all\" must be an object")}if(_typeof(model)!=="object"||Object.keys(model).length===0){throw new ExpectError("Model for \"expect.all\" must be an object")}for(var _i=0,_Object$keys=Object.keys(model);_i<_Object$keys.length;_i++){var key=_Object$keys[_i];if(!model[key].type){throw new ExpectError("Model property must have a \"type\" defined")}var value=key.split(".").reduce(function(acc,part){return acc&&acc[part]!==undefined?acc[part]:null},options);if(options[key]===undefined&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("The \"".concat(key,"\" property not found"),{expected:model[key].type,key:key,value:value})}switch(model[key].type){case"enum":if(!model[key].values||!Array.isArray(model[key].values)){throw new ExpectError("Enumerator conditions array not defined in the model",{expected:"enum",values:model[key].values,key:key,value:value})}if(!model[key].values.includes(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("The value type of the \"".concat(String(key),"\" property is not valid. Expected type one of ").concat(model[key].values," but got: ").concat(String(value)),{expected:"enum",values:model[key].values,key:key,value:value})}break;case"address":if(!new RegExp("^0x[a-fA-F0-9]{40}$").test(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("Ethereum address is required as value for the property: \"".concat(key,"\""),{expected:"address",key:key,value:value})}break;case"hash":if(!new RegExp("^0x[a-fA-F0-9]{64}$").test(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("Ethereum tx hash is required as value for the property: \"".concat(key,"\""),{expected:"hash",key:key,value:value})}break;case"bn":if(!web3utils.isBN(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("BN instance expected as value for the property \"".concat(key,"\" but got: ").concat(value),{expected:"bn",key:key,value:value})}break;case"functionOrMember":if(typeof value==="function"){// It is OK
15
- break}// If not then follow the next rule
16
- // eslint-disable-next-line no-fallthrough
17
- case"member":if(!model[key].provider||_typeof(model[key].provider)!=="object"){throw new ExpectError("Provider object must be defined as \"provider\" model option for \"".concat(key,"\""))}if(typeof value!=="string"){throw new ExpectError("Property with \"member\" type must be a string but actually, it is a \"".concat(_typeof(value),"\""))}// eslint-disable-next-line no-case-declarations
18
- var memberValue=value.split(".").reduce(function(acc,part){return acc&&acc[part]!==undefined?acc[part]:null},model[key].provider);if(!memberValue){throw new ExpectError("Not a member",{expected:model[key].type,provider:model[key].provider,key:key,value:value})}break;default:// eslint-disable-next-line valid-typeof
19
- if(_typeof(value)!==model[key].type&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("The \"".concat(key,"\" property value has a wrong type: ").concat(_typeof(value)),{expected:model[key].type,key:key,value:value})}}}};module.exports.all=all;
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9leHBlY3QuanMiXSwibmFtZXMiOlsicmVxdWlyZSIsIndlYjN1dGlscyIsInV0aWxzIiwiRXhwZWN0RXJyb3IiLCJtZXNzYWdlIiwiYXJncyIsIkVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsImFsbCIsIm9wdGlvbnMiLCJtb2RlbCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJrZXkiLCJ0eXBlIiwidmFsdWUiLCJzcGxpdCIsInJlZHVjZSIsImFjYyIsInBhcnQiLCJ1bmRlZmluZWQiLCJyZXF1aXJlZCIsImV4cGVjdGVkIiwidmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJTdHJpbmciLCJSZWdFeHAiLCJ0ZXN0IiwiaXNCTiIsInByb3ZpZGVyIiwibWVtYmVyVmFsdWUiXSwibWFwcGluZ3MiOiJ5OUpBQUEsYUFBNkJBLE9BQU8sQ0FBQyxNQUFELENBQXBDLENBQWVDLFNBQWYsVUFBUUMsS0FBUixDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRyxHQUNNQyxDQUFBQSxXLGtHQUVGO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsT0FDSSxzQkFBZ0QsY0FBcENDLENBQUFBLE9BQW9DLDJEQUExQixlQUEwQixtQ0FBRTtBQUM5Qyx1QkFBTUEsT0FBTixFQUQ0Qyw4QkFBTkMsSUFBTSxxREFBTkEsSUFBTSx5QkFFNUMsTUFBS0EsSUFBTCxDQUFZQSxJQUFaLENBRjRDLFlBRy9DLEMsa0RBVnFCQyxLLEdBV3pCLENBQ0RDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlTCxXQUFmLENBQTZCQSxXQUE3QixDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDQSxHQUFNTSxDQUFBQSxHQUFHLENBQUcsUUFBTkEsQ0FBQUEsR0FBTSxFQUE4QixJQUE3QkMsQ0FBQUEsT0FBNkIsMkRBQW5CLEVBQW1CLElBQWZDLENBQUFBLEtBQWUsMkRBQVAsRUFBTyxDQUV0QyxHQUFJLFFBQU9ELE9BQVAsSUFBbUIsUUFBbkIsRUFBK0JFLE1BQU0s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aEMsQ0FNVCxDQUVELE1BRUosUUFFSTtBQUNBLEdBQUksUUFBT0EsS0FBUCxJQUFpQk4sS0FBSyxDQUFDSSxHQUFELENBQUwsQ0FBV0MsSUFBNUIsR0FDQ0wsS0FBSyxDQUFDSSxHQUFELENBQUwsQ0FBV1EsUUFBWCxHQUF3QixJQUF4QixFQUFnQ1osS0FBSyxDQUFDSSxHQUFELENBQUwsQ0FBV1EsUUFBWCxHQUF3QkQsU0FEekQsQ0FBSixDQUN5RSxDQUVyRSxLQUFNLElBQUluQixDQUFBQSxXQUFKLGlCQUNNWSxHQUROLHdEQUNzREUsS0FEdEQsR0FFRixDQUNJTyxRQUFRLENBQUViLEtBQUssQ0FBQ0ksR0FBRCxDQUFMLENBQVdDLElBRHpCLENBRUlELEdBQUcsQ0FBSEEsR0FGSixDQUdJRSxLQUFLLENBQUxBLEtBSEosQ0FGRSxDQVFULENBM0lULENBNklILENBQ0osQ0FsTEQsQ0FtTEFWLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxHQUFmLENBQXFCQSxHQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHsgdXRpbHM6IHdlYjN1dGlscyB9ID0gcmVxdWlyZSgnd2ViMycpO1xuXG4vKipcbiAqIEV4cGVjdEVycm9yIGNsYXNzXG4gKiBAY2xhc3MgRXhwZWN0RXJyb3JcbiAqIEBleHRlbmRzIHtFcnJvcn1cbiAqL1xuY2xhc3MgRXhwZWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEV4cGVjdEVycm9yLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG1lbWJlcm9mIEV4cGVjdEVycm9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdVbmtub3duIGVycm9yJywgLi4uYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlblxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG59O1xubW9kdWxlLmV4cG9ydHMuRXhwZWN0RXJyb3IgPSBFeHBlY3RFcnJvcjtcblxuLyoqXG4gKiBFbnN1cmluZyBleHBlY3RlZCBwYXJhbWV0ZXJzIGhlbHBlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtb2RlbFxuICovXG5jb25zdCBhbGwgPSAob3B0aW9ucyA9IHt9LCBtb2RlbCA9IHt9KSA9PiB7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnIHx8IE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcignT3B0aW9ucyBmb3IgXCJleHBlY3QuYWxsXCIgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1vZGVsICE9PSAnb2JqZWN0JyB8fCBPYmplY3Qua2V5cyhtb2RlbCkubGVuZ3RoID09PSAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKCdNb2RlbCBmb3IgXCJleHBlY3QuYWxsXCIgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtb2RlbCkpIHtcblxuICAgICAgICBpZiAoIW1vZGVsW2tleV0udHlwZSkge1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoJ01vZGVsIHByb3BlcnR5IG11c3QgaGF2ZSBhIFwidHlwZVwiIGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0ga2V5LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgYWNjW3BhcnRdICE9PSB1bmRlZmluZWQgPyBhY2NbcGFydF0gOiBudWxsO1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9uc1trZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIChtb2RlbFtrZXldLnJlcXVpcmVkID09PSB0cnVlIHx8IG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkpIHtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKFxuICAgICAgICAgICAgICAgIGBUaGUgXCIke2tleX1cIiBwcm9wZXJ0eSBub3QgZm91bmRgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IG1vZGVsW2tleV0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG1vZGVsW2tleV0udHlwZSkge1xuXG4gICAgICAgICAgICBjYXNlICdlbnVtJzpcblxuICAgICAgICAgICAgICAgIGlmICghbW9kZWxba2V5XS52YWx1ZXMgfHwgIUFycmF5LmlzQXJyYXkobW9kZWxba2V5XS52YWx1ZXMpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VudW1lcmF0b3IgY29uZGl0aW9ucyBhcnJheSBub3QgZGVmaW5lZCBpbiB0aGUgbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnZW51bScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBtb2RlbFtrZXldLnZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1vZGVsW2tleV0udmFsdWVzLmluY2x1ZGVzKHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAobW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdHJ1ZSB8fCBtb2RlbFtrZXldLnJlcXVpcmVkID09PSB1bmRlZmluZWQpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBcIiR7U3RyaW5nKGtleSl9XCIgcHJvcGVydHkgaXMgbm90IHZhbGlkLiBFeHBlY3RlZCB0eXBlIG9uZSBvZiAke21vZGVsW2tleV0udmFsdWVzfSBidXQgZ290OiAke1N0cmluZyh2YWx1ZSl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogJ2VudW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kZWxba2V5XS52YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuXG4gICAgICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKCdeMHhbYS1mQS1GMC05XXs0MH0kJykudGVzdCh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHRydWUgfHwgbW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBFdGhlcmV1bSBhZGRyZXNzIGlzIHJlcXVpcmVkIGFzIHZhbHVlIGZvciB0aGUgcHJvcGVydHk6IFwiJHtrZXl9XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2hhc2gnOlxuXG4gICAgICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKCdeMHhbYS1mQS1GMC05XXs2NH0kJykudGVzdCh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHRydWUgfHwgbW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBFdGhlcmV1bSB0eCBoYXNoIGlzIHJlcXVpcmVkIGFzIHZhbHVlIGZvciB0aGUgcHJvcGVydHk6IFwiJHtrZXl9XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2JuJzpcblxuICAgICAgICAgICAgICAgIGlmICghd2ViM3V0aWxzLmlzQk4odmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChtb2RlbFtrZXldLnJlcXVpcmVkID09PSB0cnVlIHx8IG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgQk4gaW5zdGFuY2UgZXhwZWN0ZWQgYXMgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eSBcIiR7a2V5fVwiIGJ1dCBnb3Q6ICR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogJ2JuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb25Pck1lbWJlcic6XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgT0tcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIG5vdCB0aGVuIGZvbGxvdyB0aGUgbmV4dCBydWxlXG5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgJ21lbWJlcic6XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1vZGVsW2tleV0ucHJvdmlkZXIgfHwgdHlwZW9mIG1vZGVsW2tleV0ucHJvdmlkZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBQcm92aWRlciBvYmplY3QgbXVzdCBiZSBkZWZpbmVkIGFzIFwicHJvdmlkZXJcIiBtb2RlbCBvcHRpb24gZm9yIFwiJHtrZXl9XCJgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFByb3BlcnR5IHdpdGggXCJtZW1iZXJcIiB0eXBlIG11c3QgYmUgYSBzdHJpbmcgYnV0IGFjdHVhbGx5LCBpdCBpcyBhIFwiJHt0eXBlb2YgdmFsdWV9XCJgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgbWVtYmVyVmFsdWUgPSB2YWx1ZS5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgYWNjW3BhcnRdICE9PSB1bmRlZmluZWQgPyBhY2NbcGFydF0gOiBudWxsO1xuICAgICAgICAgICAgICAgIH0sIG1vZGVsW2tleV0ucHJvdmlkZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFtZW1iZXJWYWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcignTm90IGEgbWVtYmVyJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IG1vZGVsW2tleV0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBtb2RlbFtrZXldLnByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdmFsaWQtdHlwZW9mXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gbW9kZWxba2V5XS50eXBlICYmXG4gICAgICAgICAgICAgICAgICAgIChtb2RlbFtrZXldLnJlcXVpcmVkID09PSB0cnVlIHx8IG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgVGhlIFwiJHtrZXl9XCIgcHJvcGVydHkgdmFsdWUgaGFzIGEgd3JvbmcgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogbW9kZWxba2V5XS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5tb2R1bGUuZXhwb3J0cy5hbGwgPSBhbGw7XG4iXX0=
package/dist/utils/vc.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");require("regenerator-runtime/runtime.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.array.filter.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.string.includes.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var _require=require("@windingtree/vc"),verifyVc=_require.verifyVc;module.exports.validateVc=/*#__PURE__*/function(){var _ref=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(resolver,proof,claim){var proofDid,sourceDid,didResult,proofResolver,didDocumentValid,vc,verificationMethod,verifierDid,verifierDidResult,verifierResolver,verifierDidDocumentValid,verificationKey,verificationResult;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:proofDid=proof.split("#")[0];sourceDid=resolver.result.didDocument.id.toLowerCase();if(proofDid){_context.next=4;break}throw new Error("Unable to find a proof DID in the proof: ".concat(proof));case 4:// Normalize the proof DID
2
- proofDid=proofDid.toLowerCase();// Check if the source DID is the same as the proof DID
3
- if(!(proofDid===sourceDid)){_context.next=9;break}// Take already resolved DID
4
- didResult=resolver.result;_context.next=13;break;case 9:// Make new resolution
5
- proofResolver=resolver.spawnResolver();_context.next=12;return proofResolver.resolve(proof);case 12:didResult=_context.sent;case 13:if(didResult){_context.next=15;break}throw new Error("Unable to resolve DID of the proof: ".concat(proof));case 15:// Check if the proof DID document is valid
6
- didDocumentValid=didResult.checks.filter(function(c){return c.type==="DID_DOCUMENT"})[0];if(!(!didDocumentValid||!didDocumentValid.passed)){_context.next=18;break}throw new Error("DID document of the proof is not valid: ".concat(proof));case 18:// Get VC from the proof DID document
7
- vc=didResult.didDocument.trust.credentials.filter(function(c){return c.id===proof})[0];if(vc){_context.next=21;break}throw new Error("Unable to find VC of the proof: ".concat(proof));case 21:// Fetch verification key
8
- verificationMethod=vc.proof.verificationMethod;verifierDid=verificationMethod.split("#")[0];// Check verifier DID existence
9
- if(verifierDid){_context.next=25;break}throw new Error("Unable to find a verifier DID in the verificationMethod: ".concat(verificationMethod));case 25:// Normalize the verifier DID
10
- verifierDid=verifierDid.toLowerCase();if(!(verifierDid===sourceDid)){_context.next=30;break}verifierDidResult=resolver.result;_context.next=34;break;case 30:verifierResolver=resolver.spawnResolver();_context.next=33;return verifierResolver.resolve(verifierDid);case 33:verifierDidResult=_context.sent;case 34:if(verifierDidResult){_context.next=36;break}throw new Error("Unable to resolve the proof verifier DID: ".concat(verifierDid));case 36:// Check if verifier DID document is valid
11
- verifierDidDocumentValid=verifierDidResult.checks.filter(function(c){return c.type==="DID_DOCUMENT"})[0];if(!(!verifierDidDocumentValid||!verifierDidDocumentValid.passed)){_context.next=39;break}throw new Error("DID document of the proof verifier is not valid: ".concat(proof));case 39:// Get verification key from the DID document
12
- verificationKey=verifierDidResult.didDocument.publicKey.filter(function(c){return c.id===verificationMethod})[0];if(verificationKey){_context.next=42;break}throw new Error("Unable to find verification key: ".concat(verificationMethod));case 42:console.log("@@@",verificationKey.publicKeyPem);// Validate VC integrity
13
- verificationResult=verifyVc(vc,vc.proof.type,verificationKey.publicKeyPem);// Check if the issuer DID is defined in the VC data
14
- if(verificationResult.issuer){_context.next=46;break}throw new Error("Unable to find issuer DID in the VC data");case 46:// Normalize the issuer DID
15
- verificationResult.issuer=verificationResult.issuer.toLowerCase();if(!(resolver.authorizedTrustProofsIssuers&&!resolver.authorizedTrustProofsIssuers.includes(verificationResult.issuer))){_context.next=49;break}throw new Error("Unauthorized trust proof issuer: ".concat(verificationResult.issuer));case 49:if(!(verificationResult.credentialSubject.id!==sourceDid)){_context.next=51;break}throw new Error("Unknown credential subject Id ".concat(verificationResult.credentialSubject.id));case 51:if(!(verificationResult.credentialSubject.claim!==claim)){_context.next=53;break}throw new Error("Unknown credential subject Claim ".concat(verificationResult.credentialSubject.claim));case 53:case"end":return _context.stop();}}},_callee)}));return function(_x,_x2,_x3){return _ref.apply(this,arguments)}}();
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92Yy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwidmVyaWZ5VmMiLCJtb2R1bGUiLCJleHBvcnRzIiwidmFsaWRhdGVWYyIsInJlc29sdmVyIiwicHJvb2YiLCJjbGFpbSIsInByb29mRGlkIiwic3BsaXQiLCJzb3VyY2VEaWQiLCJyZXN1bHQiLCJkaWREb2N1bWVudCIsImlkIiwidG9Mb3dlckNhc2UiLCJFcnJvciIsImRpZFJlc3VsdCIsInByb29mUmVzb2x2ZXIiLCJzcGF3blJlc29sdmVyIiwicmVzb2x2ZSIsImRpZERvY3VtZW50VmFsaWQiLCJjaGVja3MiLCJmaWx0ZXIiLCJjIiwidHlwZSIsInBhc3NlZCIsInZjIiwidHJ1c3QiLCJjcmVkZW50aWFscyIsInZlcmlmaWNhdGlvbk1ldGhvZCIsInZlcmlmaWVyRGlkIiwidmVyaWZpZXJEaWRSZXN1bHQiLCJ2ZXJpZmllclJlc29sdmVyIiwidmVyaWZpZXJEaWREb2N1bWVudFZhbGlkIiwidmVyaWZpY2F0aW9uS2V5IiwicHVibGljS2V5IiwiY29uc29sZSIsImxvZyIsInB1YmxpY0tleVBlbSIsInZlcmlmaWNhdGlvblJlc3VsdCIsImlzc3VlciIsImF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnMiLCJpbmNsdWRlcyIsImNyZWRlbnRpYWxTdWJqZWN0Il0sIm1hcHBpbmdzIjoiczdCQUFBLGFBQXFCQSxPQUFPLENBQUMsaUJBQUQsQ0FBNUIsQ0FBUUMsUUFBUixVQUFRQSxRQUFSLENBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxVQUFmLHlGQUE0QixpQkFBT0MsUUFBUCxDQUFpQkMsS0FBakIsQ0FBd0JDLEtBQXhCLGtUQUNwQkMsUUFEb0IsQ0FDVEYsS0FBSyxDQUFDRyxLQUFOLENBQVksR0FBWixFQUFpQixDQUFqQixDQURTLENBRXBCQyxTQUZvQixDQUVSTCxRQUFRLENBQUNNLE1BQVQsQ0FBZ0JDLFdBQWhCLENBQTRCQyxFQUE1QixDQUErQkMsV0FBL0IsRUFG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LEtBQVosQ0FBbUJILGVBQWUsQ0FBQ0ksWUFBbkMsRUFFQTtBQUNNQyxrQkExRWtCLENBMEVHdEMsUUFBUSxDQUMvQnlCLEVBRCtCLENBRS9CQSxFQUFFLENBQUNwQixLQUFILENBQVNrQixJQUZzQixDQUcvQlUsZUFBZSxDQUFDSSxZQUhlLENBMUVYLENBZ0Z4QjtBQWhGd0IsR0FpRm5CQyxrQkFBa0IsQ0FBQ0MsTUFqRkEsOEJBa0ZkLElBQUl6QixDQUFBQSxLQUFKLENBQVUsMENBQVYsQ0FsRmMsU0FvRnhCO0FBQ0F3QixrQkFBa0IsQ0FBQ0MsTUFBbkIsQ0FBNEJELGtCQUFrQixDQUFDQyxNQUFuQixDQUEwQjFCLFdBQTFCLEVBQTVCLENBckZ3QixLQXVGcEJULFFBQVEsQ0FBQ29DLDRCQUFULEVBQ0EsQ0FBQ3BDLFFBQVEsQ0FBQ29DLDRCQUFULENBQXNDQyxRQUF0QyxDQUErQ0gsa0JBQWtCLENBQUNDLE1BQWxFLENBeEZtQiwrQkF5RmQsSUFBSXpCLENBQUFBLEtBQUosNENBQThDd0Isa0JBQWtCLENBQUNDLE1BQWpFLEVBekZjLGNBNkZwQkQsa0JBQWtCLENBQUNJLGlCQUFuQixDQUFxQzlCLEVBQXJDLEdBQTRDSCxTQTdGeEIsK0JBOEZkLElBQUlLLENBQUFBLEtBQUoseUNBQTJDd0Isa0JBQWtCLENBQUNJLGlCQUFuQixDQUFxQzlCLEVBQWhGLEVBOUZjLGNBbUdwQjBCLGtCQUFrQixDQUFDSSxpQkFBbkIsQ0FBcUNwQyxLQUFyQyxHQUErQ0EsS0FuRzNCLCtCQW9HZCxJQUFJUSxDQUFBQSxLQUFKLDRDQUE4Q3dCLGtCQUFrQixDQUFDSSxpQkFBbkIsQ0FBcUNwQyxLQUFuRixFQXBHYyx1REFBNUIiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IHZlcmlmeVZjIH0gPSByZXF1aXJlKCdAd2luZGluZ3RyZWUvdmMnKTtcblxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVWYyA9IGFzeW5jIChyZXNvbHZlciwgcHJvb2YsIGNsYWltKSA9PiB7XG4gICAgbGV0IHByb29mRGlkID0gcHJvb2Yuc3BsaXQoJyMnKVswXTtcbiAgICBsZXQgc291cmNlRGlkID0gcmVzb2x2ZXIucmVzdWx0LmRpZERvY3VtZW50LmlkLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IGRpZFJlc3VsdDtcblxuICAgIC8vIENoZWNrIGlmIHByb29mIGhhcyBhIERJRFxuICAgIGlmICghcHJvb2ZEaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBhIHByb29mIERJRCBpbiB0aGUgcHJvb2Y6ICR7cHJvb2Z9YCk7XG4gICAgfVxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgcHJvb2YgRElEXG4gICAgcHJvb2ZEaWQgPSBwcm9vZkRpZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNvdXJjZSBESUQgaXMgdGhlIHNhbWUgYXMgdGhlIHByb29mIERJRFxuICAgIGlmIChwcm9vZkRpZCA9PT0gc291cmNlRGlkKSB7XG4gICAgICAgIC8vIFRha2UgYWxyZWFkeSByZXNvbHZlZCBESURcbiAgICAgICAgZGlkUmVzdWx0ID0gcmVzb2x2ZXIucmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1ha2UgbmV3IHJlc29sdXRpb25cbiAgICAgICAgY29uc3QgcHJvb2ZSZXNvbHZlciA9IHJlc29sdmVyLnNwYXduUmVzb2x2ZXIoKTtcbiAgICAgICAgZGlkUmVzdWx0ID0gYXdhaXQgcHJvb2ZSZXNvbHZlci5yZXNvbHZlKHByb29mKTtcbiAgICB9XG4gICAgaWYgKCFkaWRSZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBESUQgb2YgdGhlIHByb29mOiAke3Byb29mfWApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBwcm9vZiBESUQgZG9jdW1lbnQgaXMgdmFsaWRcbiAgICBjb25zdCBkaWREb2N1bWVudFZhbGlkID0gZGlkUmVzdWx0LmNoZWNrcy5maWx0ZXIoYyA9PiBjLnR5cGUgPT09ICdESURfRE9DVU1FTlQnKVswXTtcbiAgICBpZiAoIWRpZERvY3VtZW50VmFsaWQgfHwgIWRpZERvY3VtZW50VmFsaWQucGFzc2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRElEIGRvY3VtZW50IG9mIHRoZSBwcm9vZiBpcyBub3QgdmFsaWQ6ICR7cHJvb2Z9YCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IFZDIGZyb20gdGhlIHByb29mIERJRCBkb2N1bWVudFxuICAgIGNvbnN0IHZjID0gZGlkUmVzdWx0LmRpZERvY3VtZW50LnRydXN0LmNyZWRlbnRpYWxzLmZpbHRlcihjID0+IGMuaWQgPT09IHByb29mKVswXTtcbiAgICBpZiAoIXZjKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgVkMgb2YgdGhlIHByb29mOiAke3Byb29mfWApO1xuICAgIH1cblxuICAgIC8vIEZldGNoIHZlcmlmaWNhdGlvbiBrZXlcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSB2Yy5wcm9vZi52ZXJpZmljYXRpb25NZXRob2Q7XG4gICAgbGV0IHZlcmlmaWVyRGlkID0gdmVyaWZpY2F0aW9uTWV0aG9kLnNwbGl0KCcjJylbMF07XG5cbiAgICAvLyBDaGVjayB2ZXJpZmllciBESUQgZXhpc3RlbmNlXG4gICAgaWYgKCF2ZXJpZmllckRpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGEgdmVyaWZpZXIgRElEIGluIHRoZSB2ZXJpZmljYXRpb25NZXRob2Q6ICR7dmVyaWZpY2F0aW9uTWV0aG9kfWApO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgdGhlIHZlcmlmaWVyIERJRFxuICAgIHZlcmlmaWVyRGlkID0gdmVyaWZpZXJEaWQudG9Mb3dlckNhc2UoKTtcblxuICAgIGxldCB2ZXJpZmllckRpZFJlc3VsdDtcbiAgICBpZiAodmVyaWZpZXJEaWQgPT09IHNvdXJjZURpZCkge1xuICAgICAgICB2ZXJpZmllckRpZFJlc3VsdCA9IHJlc29sdmVyLnJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2ZXJpZmllclJlc29sdmVyID0gcmVzb2x2ZXIuc3Bhd25SZXNvbHZlcigpO1xuICAgICAgICB2ZXJpZmllckRpZFJlc3VsdCA9IGF3YWl0IHZlcmlmaWVyUmVzb2x2ZXIucmVzb2x2ZSh2ZXJpZmllckRpZCk7XG4gICAgfVxuICAgIGlmICghdmVyaWZpZXJEaWRSZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcHJvb2YgdmVyaWZpZXIgRElEOiAke3ZlcmlmaWVyRGlkfWApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHZlcmlmaWVyIERJRCBkb2N1bWVudCBpcyB2YWxpZFxuICAgIGNvbnN0IHZlcmlmaWVyRGlkRG9jdW1lbnRWYWxpZCA9IHZlcmlmaWVyRGlkUmVzdWx0LmNoZWNrcy5maWx0ZXIoYyA9PiBjLnR5cGUgPT09ICdESURfRE9DVU1FTlQnKVswXTtcbiAgICBpZiAoIXZlcmlmaWVyRGlkRG9jdW1lbnRWYWxpZCB8fCAhdmVyaWZpZXJEaWREb2N1bWVudFZhbGlkLnBhc3NlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERJRCBkb2N1bWVudCBvZiB0aGUgcHJvb2YgdmVyaWZpZXIgaXMgbm90IHZhbGlkOiAke3Byb29mfWApO1xuICAgIH1cblxuICAgIC8vIEdldCB2ZXJpZmljYXRpb24ga2V5IGZyb20gdGhlIERJRCBkb2N1bWVudFxuICAgIGNvbnN0IHZlcmlmaWNhdGlvbktleSA9IHZlcmlmaWVyRGlkUmVzdWx0LmRpZERvY3VtZW50LnB1YmxpY0tleS5maWx0ZXIoYyA9PiBjLmlkID09PSB2ZXJpZmljYXRpb25NZXRob2QpWzBdO1xuICAgIGlmICghdmVyaWZpY2F0aW9uS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgdmVyaWZpY2F0aW9uIGtleTogJHt2ZXJpZmljYXRpb25NZXRob2R9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ0BAQCcsIHZlcmlmaWNhdGlvbktleS5wdWJsaWNLZXlQZW0pO1xuXG4gICAgLy8gVmFsaWRhdGUgVkMgaW50ZWdyaXR5XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uUmVzdWx0ID0gdmVyaWZ5VmMoXG4gICAgICAgIHZjLFxuICAgICAgICB2Yy5wcm9vZi50eXBlLFxuICAgICAgICB2ZXJpZmljYXRpb25LZXkucHVibGljS2V5UGVtXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBpc3N1ZXIgRElEIGlzIGRlZmluZWQgaW4gdGhlIFZDIGRhdGFcbiAgICBpZiAoIXZlcmlmaWNhdGlvblJlc3VsdC5pc3N1ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBpc3N1ZXIgRElEIGluIHRoZSBWQyBkYXRhJyk7XG4gICAgfVxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXNzdWVyIERJRFxuICAgIHZlcmlmaWNhdGlvblJlc3VsdC5pc3N1ZXIgPSB2ZXJpZmljYXRpb25SZXN1bHQuaXNzdWVyLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAocmVzb2x2ZXIuYXV0aG9yaXplZFRydXN0UHJvb2ZzSXNzdWVycyAmJlxuICAgICAgICAhcmVzb2x2ZXIuYXV0aG9yaXplZFRydXN0UHJvb2ZzSXNzdWVycy5pbmNsdWRlcyh2ZXJpZmljYXRpb25SZXN1bHQuaXNzdWVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYXV0aG9yaXplZCB0cnVzdCBwcm9vZiBpc3N1ZXI6ICR7dmVyaWZpY2F0aW9uUmVzdWx0Lmlzc3Vlcn1gKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhIGNyZWRlbnRpYWwgc3ViamVjdCBJZC4gU2hvdWxkIGJlIGEgY29tcGFueSBESURcbiAgICBpZiAodmVyaWZpY2F0aW9uUmVzdWx0LmNyZWRlbnRpYWxTdWJqZWN0LmlkICE9PSBzb3VyY2VEaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNyZWRlbnRpYWwgc3ViamVjdCBJZCAke3ZlcmlmaWNhdGlvblJlc3VsdC5jcmVkZW50aWFsU3ViamVjdC5pZH1gKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhIGNyZWRlbnRpYWwgc3ViamVjdCBDbGFpbS5cbiAgICAvLyBTaG91bGQgYmUgYSBwcm92aWRlZCB0cnVzdCBhc3NlcnRpb24gY2xhaW1cbiAgICBpZiAodmVyaWZpY2F0aW9uUmVzdWx0LmNyZWRlbnRpYWxTdWJqZWN0LmNsYWltICE9PSBjbGFpbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY3JlZGVudGlhbCBzdWJqZWN0IENsYWltICR7dmVyaWZpY2F0aW9uUmVzdWx0LmNyZWRlbnRpYWxTdWJqZWN0LmNsYWltfWApO1xuICAgIH1cbn07XG4iXX0=
package/dist/whois.js DELETED
@@ -1,3 +0,0 @@
1
- "use strict";require("regenerator-runtime/runtime.js");require("core-js/modules/es.array.reduce.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.string.trim.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var whois=require("whois-light");var replacements={"Domain Name":"domainName","Registry Domain ID":"registryDomainId","Registrar WHOIS Server":"registrarWhoisServer","Registrar URL":"registrarUrl","Updated Date":"updatedDate","Creation Date":"creationDate","Registry Expiry Date":"expiryDate","Registrar":"registrar","Registrar IANA ID":"registrarIanaId","Registrar Abuse Contact Email":"registrarAbuseContactEmail","Registrar Abuse Contact Phone":"registrarAbuseContactPhone","Domain Status":"domainStatus","Name Server":"nameServer","DNSSEC":"DNSSEC"};// Configuration of the HTTP fetching method
2
- module.exports={name:"whois",fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(domainName){var domainResolution;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:_context.next=2;return whois.lookup(domainName);case 2:domainResolution=_context.sent;return _context.abrupt("return",domainResolution.split("\r\n").map(function(l){return l.trim()}).reduce(function(a,v){v=v.replace(">>> ","");v=v.replace(" <<<","");if(v!==""){v=v.split(": ");if(v.length>1&&replacements[v[0]]){a[replacements[v[0]]]=v[1]}}return a},{}));case 4:case"end":return _context.stop();}}},_callee)}));function fetch(_x){return _fetch.apply(this,arguments)}return fetch}()};
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93aG9pcy5qcyJdLCJuYW1lcyI6WyJ3aG9pcyIsInJlcXVpcmUiLCJyZXBsYWNlbWVudHMiLCJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImZldGNoIiwiZG9tYWluTmFtZSIsImxvb2t1cCIsImRvbWFpblJlc29sdXRpb24iLCJzcGxpdCIsIm1hcCIsImwiLCJ0cmltIiwicmVkdWNlIiwiYSIsInYiLCJyZXBsYWNlIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiNjlCQUFBLEdBQU1BLENBQUFBLEtBQUssQ0FBR0MsT0FBTyxDQUFDLGFBQUQsQ0FBckIsQ0FFQSxHQUFNQyxDQUFBQSxZQUFZLENBQUcsQ0FDakIsY0FBZSxZQURFLENBRWpCLHFCQUFzQixrQkFGTCxDQUdqQix5QkFBMEIsc0JBSFQsQ0FJakIsZ0JBQWlCLGNBSkEsQ0FLakIsZUFBZ0IsYUFMQyxDQU1qQixnQkFBaUIsY0FOQSxDQU9qQix1QkFBd0IsWUFQUCxDQVFqQixZQUFhLFdBUkksQ0FTakIsb0JBQXFCLGlCQVRKLENBVWpCLGdDQUFpQyw0QkFWaEIsQ0FXakIsZ0NBQWlDLDRCQVhoQixDQVlqQixnQkFBaUIsY0FaQSxDQWFqQixjQUFlLFlBYkUsQ0FjakIsU0FBVSxRQWRPLENBQXJCLENBaUJBO0FBQ0FDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUNiQyxJQUFJLENBQUUsT0FETyxDQUViQyxLQUFLLDhFQUFFLGlCQUFPQyxVQUFQLDRKQUMwQlAsQ0FBQUEsS0FBSyxDQUFDUSxNQUFOLENBQWFELFVBQWIsQ0FEMUIsUUFDQ0UsZ0JBREQsK0NBRUlBLGdCQUFnQixDQUNsQkMsS0FERSxDQUNJLE1BREosRUFFRkMsR0FGRSxDQUVFLFNBQUFDLENBQUMsUUFBSUEsQ0FBQUEsQ0FBQyxDQUFDQyxJQUFGLEVBQUosQ0FGSCxFQUdGQyxNQUhFLENBSUMsU0FBQ0MsQ0FBRCxDQUFJQyxDQUFKLENBQVUsQ0FDTkEsQ0FBQyxDQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxNQUFWLENBQWtCLEVBQWxCLENBQUosQ0FDQUQsQ0FBQyxDQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxNQUFWLENBQWtCLEVBQWxCLENBQUosQ0FDQSxHQUFJRCxDQUFDLEdBQUssRUFBVixDQUFjLENBQ1ZBLENBQUMsQ0FBR0EsQ0FBQyxDQUFDTixLQUFGLENBQVEsSUFBUixDQUFKLENBQ0EsR0FBSU0sQ0FBQyxDQUFDRSxNQUFGLENBQVcsQ0FBWCxFQUFnQmhCLFlBQVksQ0FBQ2MsQ0FBQyxDQUFDLENBQUQsQ0FBRixDQUFoQyxDQUF3QyxDQUNwQ0QsQ0FBQyxDQUFDYixZQUFZLENBQUNjLENBQUMsQ0FBQyxDQUFELENBQUYsQ0FBYixDQUFELENBQXdCQSxDQUFDLENBQUMsQ0FBRCxDQUM1QixDQUNKLENBQ0QsTUFBT0QsQ0FBQUEsQ0FDVixDQWRGLENBZUMsRUFmRCxDQUZKLHVEQUFGLHlFQUZRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgd2hvaXMgPSByZXF1aXJlKCd3aG9pcy1saWdodCcpO1xuXG5jb25zdCByZXBsYWNlbWVudHMgPSB7XG4gICAgJ0RvbWFpbiBOYW1lJzogJ2RvbWFpbk5hbWUnLFxuICAgICdSZWdpc3RyeSBEb21haW4gSUQnOiAncmVnaXN0cnlEb21haW5JZCcsXG4gICAgJ1JlZ2lzdHJhciBXSE9JUyBTZXJ2ZXInOiAncmVnaXN0cmFyV2hvaXNTZXJ2ZXInLFxuICAgICdSZWdpc3RyYXIgVVJMJzogJ3JlZ2lzdHJhclVybCcsXG4gICAgJ1VwZGF0ZWQgRGF0ZSc6ICd1cGRhdGVkRGF0ZScsXG4gICAgJ0NyZWF0aW9uIERhdGUnOiAnY3JlYXRpb25EYXRlJyxcbiAgICAnUmVnaXN0cnkgRXhwaXJ5IERhdGUnOiAnZXhwaXJ5RGF0ZScsXG4gICAgJ1JlZ2lzdHJhcic6ICdyZWdpc3RyYXInLFxuICAgICdSZWdpc3RyYXIgSUFOQSBJRCc6ICdyZWdpc3RyYXJJYW5hSWQnLFxuICAgICdSZWdpc3RyYXIgQWJ1c2UgQ29udGFjdCBFbWFpbCc6ICdyZWdpc3RyYXJBYnVzZUNvbnRhY3RFbWFpbCcsXG4gICAgJ1JlZ2lzdHJhciBBYnVzZSBDb250YWN0IFBob25lJzogJ3JlZ2lzdHJhckFidXNlQ29udGFjdFBob25lJyxcbiAgICAnRG9tYWluIFN0YXR1cyc6ICdkb21haW5TdGF0dXMnLFxuICAgICdOYW1lIFNlcnZlcic6ICduYW1lU2VydmVyJyxcbiAgICAnRE5TU0VDJzogJ0ROU1NFQydcbn07XG5cbi8vIENvbmZpZ3VyYXRpb24gb2YgdGhlIEhUVFAgZmV0Y2hpbmcgbWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYW1lOiAnd2hvaXMnLFxuICAgIGZldGNoOiBhc3luYyAoZG9tYWluTmFtZSkgPT4ge1xuICAgICAgICBsZXQgZG9tYWluUmVzb2x1dGlvbiA9IGF3YWl0IHdob2lzLmxvb2t1cChkb21haW5OYW1lKTtcbiAgICAgICAgcmV0dXJuIGRvbWFpblJlc29sdXRpb25cbiAgICAgICAgICAgIC5zcGxpdCgnXFxyXFxuJylcbiAgICAgICAgICAgIC5tYXAobCA9PiBsLnRyaW0oKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGEsIHYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHYucmVwbGFjZSgnPj4+ICcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHYucmVwbGFjZSgnIDw8PCcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdi5zcGxpdCgnOiAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgcmVwbGFjZW1lbnRzW3ZbMF1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtyZXBsYWNlbWVudHNbdlswXV1dID0gdlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuICAgIH1cbn07XG4iXX0=