@data-client/endpoint
Advanced tools
Comparing version 0.14.16 to 0.14.17
@@ -518,3 +518,3 @@ 'use strict'; | ||
for (const key in obj) { | ||
if (typeof obj[key] !== 'string' && obj[key] !== undefined) obj[key] = `${obj[key]}`; | ||
if (['number', 'boolean'].includes(typeof obj[key])) obj[key] = `${obj[key]}`; | ||
} | ||
@@ -521,0 +521,0 @@ return consistentSerialize(obj); |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Endpoint={})}(this,(function(e){"use strict";function t(e){return!("function"!=typeof e.hasOwnProperty||!(Object.hasOwnProperty.call(e,"__ownerID")||e._map&&Object.hasOwnProperty.call(e._map,"__ownerID")))}class r{constructor(e,t){this.schema=void 0,t&&(this._schemaAttribute="string"==typeof t?e=>e[t]:t),this.define(e)}get isSingleSchema(){return!this._schemaAttribute}define(e){"_schemaAttribute"in e&&!this._schemaAttribute?(this.schema=e.schema,this._schemaAttribute=e._schemaAttribute):this.schema=e}getSchemaAttribute(e,t,r){return!this.isSingleSchema&&this._schemaAttribute(e,t,r)}inferSchema(e,t,r){if(this.isSingleSchema)return this.schema;const s=this.getSchemaAttribute(e,t,r);return this.schema[s]}schemaKey(){return this.isSingleSchema?this.schema.key:Object.values(this.schema).join(";")}normalizeValue(e,t,r,s,n){if(!e)return e;const i=this.inferSchema(e,t,r);if(!i)return e;const o=n(i,e,t,r,s);return this.isSingleSchema||null==o?o:{id:o,schema:this.getSchemaAttribute(e,t,r)}}denormalizeValue(e,r){const s=!this.isSingleSchema&&e&&(t(e)?e.get("schema"):e.schema);if(!this.isSingleSchema&&!s){if("object"==typeof e&&null!==e){const t=this.inferSchema(e,void 0,void 0);if(t)return r(t,e)}return e}const n=this.isSingleSchema?void 0:t(e)?e.get("id"):e.id;return r(this.isSingleSchema?this.schema:this.schema[s],n||e)}}class s extends r{normalize(e,t,r,s,n,i,o,c){return Object.keys(e).reduce(((t,r,i)=>{const o=e[r];return null!=o?Object.assign({},t,{[r]:this.normalizeValue(o,e,r,s,n)}):t}),{})}denormalize(e,t,r){return Object.keys(e).reduce(((t,s)=>{const n=e[s],i=this.denormalizeValue(n,r);return i&&"symbol"!=typeof i?Object.assign({},t,{[s]:i}):t}),{})}queryKey(e,t,r,s){}}const n=e=>void 0!==e&&"symbol"!=typeof e;class i extends r{normalize(e,t,r,s,n,i,o,c){const a=(e=>Array.isArray(e)?e:Object.keys(e).map((t=>e[t])))(e);return a.map(((e,i)=>this.normalizeValue(e,t,r,s,n)))}denormalize(e,t,r){return e.map?e.map((e=>this.denormalizeValue(e,r))).filter(n):e}queryKey(e,t,r,s){}toJSON(){return[this.schema]}}const o=Symbol("INVALID");function c(e,r,s,n){if(t(r))return function(e,t,r){var s;let n;const i=Object.keys(e).reduce(((t,s)=>{const i=`${s}`,o=r(e[i],t.get(i));return"symbol"==typeof o&&(n=o),t.has(i)?t.set(i,o):t}),t);return null!=(s=n)?s:i}(e,r,n);const i=Object.assign({},r);for(const t of Object.keys(e)){const r=n(e[t],i[t]);if(void 0!==i[t]&&(i[t]=r),"symbol"==typeof r)return r}return i}const a=(e,t)=>[...e,...t],h=(e,t)=>[...t,...e],u=(e,t)=>Object.assign({},e,t),l=e=>[...e],m=e=>Object.assign({},e);function y(e,t,r){const s={merge:{value:t},normalize:{value:d},queryKey:{value:f}};return e.schema instanceof i&&(s.createIfValid={value:p},s.denormalize={value:b}),r&&(s.createCollectionFilter={value:r}),Object.create(e,s)}function f(){}function d(e,t,r,s,n,o,c,a){const h=this.schema.normalize(this.schema instanceof i&&!Array.isArray(e)?[e]:e,t,r,s,n,o,c,a),u=this.createCollectionFilter(...s),l=c(this.key);return l&&Object.keys(l).forEach((e=>{u(JSON.parse(e))&&o(this,h,e)})),h}function p(e){return Array.isArray(e)?[...e]:Object.assign({},e)}function b(e,t,r){return Array.isArray(e)?this.schema.denormalize(e,t,r):this.schema.denormalize([e],t,r)[0]}var g,O=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){e.exports=function(e,t){if(null==e)return{};var r,s,n={},i=Object.keys(e);for(s=0;s<i.length;s++)r=i[s],t.indexOf(r)>=0||(n[r]=e[r]);return n},e.exports.__esModule=!0,e.exports.default=e.exports})),k=(g=O)&&g.__esModule&&Object.prototype.hasOwnProperty.call(g,"default")?g.default:g;const j=["pk","schema","key"];function v(e,t={}){class r extends e{static toString(){return this.key}static toJSON(){return{key:this.key,schema:this.schema}}static pk(e,t,r,s){return this.prototype.pk.call(e,t,r,s)}static shouldUpdate(e,t,r,s){return!0}static shouldReorder(e,t,r,s){return t.fetchedAt<e.fetchedAt}static merge(e,t){return Object.assign({},e,t)}static mergeWithStore(e,t,r,s){return this.shouldUpdate(e,t,r,s)?typeof s!=typeof r?s:this.shouldReorder(e,t,r,s)?this.merge(s,r):this.merge(r,s):r}static mergeMetaWithStore(e,t,r,s){return this.shouldReorder(e,t,r,s)?e:t}static fromJS(e={}){const t=new this(e);return Object.assign(t,e),t}static createIfValid(e){if(!this.validate(e))return this.fromJS(e)}static process(e,t,r,s){return Object.assign({},e)}static normalize(e,t,r,s,n,i,o,c){const a=this.process(e,t,r,s);let h=this.pk(a,t,r,s);if(h=void 0===h||""===h||"undefined"===h?`MISS-${Math.random()}`:`${h}`,c(this.key,h,e))return h;return function(e){if(e){const t=new Error(e);throw t.status=400,t}}(this.validate(a)),Object.keys(this.schema).forEach((e=>{Object.hasOwn(a,e)&&(a[e]=n(this.schema[e],a[e],a,e,s))})),i(this,a,h),h}static validate(e){}static queryKey(e,t,r,s){if(!e[0])return;const n=function(e,t,r){if(["string","number"].includes(typeof t[0]))return`${t[0]}`;const s=e.pk(t[0],void 0,"",t);if(void 0!==s&&""!==s)return s;const n=(i=t[0],o=e.indexes,o?o.find((e=>Object.hasOwn(i,e))):void 0);var i,o;if(!n)return;const c=t[0][n];return r(e.key,n,c)[c]}(this,e,s);return r(this.key,n)?n:void 0}static denormalize(e,t,r){if("symbol"==typeof e)return e;for(const t of Object.keys(this.schema)){const s=r(this.schema[t],e[t]);if("symbol"==typeof s){if(this.defaults[t])return s;e[t]=void 0}else e[t]=s}return e}static get defaults(){return Object.hasOwn(this,"__defaults")||Object.defineProperty(this,"__defaults",{value:new this,writable:!0,configurable:!0}),this.__defaults}}const s=k(t,j);if(Object.assign(r,s),"schema"in t?r.schema=t.schema:e.schema||(r.schema={}),"pk"in t?"function"==typeof t.pk?r.prototype.pk=function(e,r){return t.pk(this,e,r)}:r.prototype.pk=function(){return this[t.pk]}:"function"!=typeof e.prototype.pk&&(r.prototype.pk=function(){return this.id}),"key"in t)Object.defineProperty(r,"key",{value:t.key,configurable:!0,writable:!0,enumerable:!0});else if(!("key"in e)){function n(e){Object.defineProperty(this,"key",{value:e,writable:!0,enumerable:!0,configurable:!0})}const i=function(){return"EntityMixin"===this.name?e.name:this.name},o="undefined"!=typeof document&&document.CLS_MANGLE?function(){return null==document.CLS_MANGLE||document.CLS_MANGLE(this),Object.defineProperty(r,"key",{get:i,set:n,enumerable:!0,configurable:!0}),i.call(this)}:i;Object.defineProperty(r,"key",{get:o,set:n,enumerable:!0,configurable:!0})}return r}var S=Object.freeze({__proto__:null,Union:class extends r{constructor(e,t){if(!t)throw new Error('Expected option "schemaAttribute" not found on UnionSchema.');super(e,t)}normalize(e,t,r,s,n,i,o,c){return this.normalizeValue(e,t,r,s,n)}denormalize(e,t,r){return this.denormalizeValue(e,r)}queryKey(e,t,r,s){if(!e[0])return;const n=this.getSchemaAttribute(e[0],void 0,""),i=this.schema[n];if(void 0===i)return;const o=t(i,e,r,s);return void 0!==o?{id:o,schema:n}:void 0}},Values:s,Array:i,All:class extends i{constructor(e,t){super(e,t)}normalize(e,t,r,s,n,i,o,c){super.normalize(e,t,r,s,n,i,o,c)}queryKey(e,t,r,s){if(this.isSingleSchema){const e=r(this.schema.key);return void 0===e?o:Object.values(e).map((e=>e&&this.schema.pk(e)))}let n=!1;const i=Object.values(this.schema).flatMap((e=>{const t=r(e.key);return void 0===t?[]:(n=!0,Object.values(t).map((t=>({id:t&&e.pk(t),schema:this.getSchemaAttribute(t,void 0,void 0)}))))}));return n?i:o}},Object:class{constructor(e){this.schema=void 0,this.define(e)}define(e){this.schema=Object.keys(e).reduce(((t,r)=>{const s=e[r];return Object.assign({},t,{[r]:s})}),this.schema||{})}normalize(...e){return((e,t,r,s,n,i,o,c,a)=>{const h=Object.assign({},t);return Object.keys(e).forEach((r=>{const s=e[r],o=i(s,t[r],t,r,n);void 0===o?delete h[r]:h[r]=o})),h})(this.schema,...e)}denormalize(e,t,r){return c(this.schema,e,0,r)}queryKey(e,t,r,s){return function(e,t,r,s,n){const i={};return Object.keys(e).forEach((o=>{i[o]=r(e[o],t,s,n)})),i}(this.schema,e,t,r,s)}},Invalidate:class{constructor(e){this._entity=e}get key(){return this._entity.key}normalize(e,t,r,s,n,i,c,a){const h=this._entity.process(e,t,r,s),u=this._entity.pk(h,t,r,s);return i(this,o,u),u}merge(e,t){return t}mergeWithStore(e,t,r,s){return this.merge(r,s)}mergeMetaWithStore(e,t,r,s){return t}queryKey(e,t,r,s){}denormalize(e,t,r){return r(this._entity,e)}_denormalizeNullable(){return{}}_normalizeNullable(){return{}}},Collection:class{addWith(e,t){return y(this,e,t)}createCollectionFilter(...e){return t=>Object.entries(t).every((([t,r])=>{var s;return this.nonFilterArgumentKeys(t)||`${e[0][t]}`===r||`${null==(s=e[1])?void 0:s[t]}`===r}))}nonFilterArgumentKeys(e){return e.startsWith("order")}constructor(e,t){if(this.schema=Array.isArray(e)?new i(e[0]):e,t?"nestKey"in t?this.nestKey=t.nestKey:this.argsKey="argsKey"in t?t.argsKey:e=>Object.assign({},e):this.argsKey=e=>Object.assign({},e),this.key=function(e){if(e instanceof i)return`[${e.schemaKey()}]`;if(e instanceof s)return`{${e.schemaKey()}}`;return`(${e.schemaKey()})`}(this.schema),null!=t&&t.nonFilterArgumentKeys){const{nonFilterArgumentKeys:e}=t;"function"==typeof e?this.nonFilterArgumentKeys=e:e instanceof RegExp?this.nonFilterArgumentKeys=t=>e.test(t):this.nonFilterArgumentKeys=t=>e.includes(t)}else null!=t&&t.createCollectionFilter&&(this.createCollectionFilter=t.createCollectionFilter.bind(this));this.schema instanceof i?(this.createIfValid=l,this.push=y(this,a),this.unshift=y(this,h)):e instanceof s&&(this.createIfValid=m,this.assign=y(this,u))}get cacheWith(){return this.schema.schema}toString(){return this.key}toJSON(){return{key:this.key,schema:this.schema.schema.toJSON()}}pk(e,t,r,s){const n=this.argsKey?this.argsKey(...s):this.nestKey(t,r);for(const e in n)"string"!=typeof n[e]&&void 0!==n[e]&&(n[e]=`${n[e]}`);return function(e){const t=Object.keys(e).sort(),r={};for(const s of t)r[s]=e[s];return JSON.stringify(r)}(n)}normalize(e,t,r,s,n,i,o,c){const a=this.schema.normalize(e,t,r,s,n,i,o,c),h=this.pk(a,t,r,s);return i(this,a,h),h}merge(e,t){return t}shouldReorder(e,t,r,s){return t.fetchedAt<e.fetchedAt}mergeWithStore(e,t,r,s){return this.shouldReorder(e,t,r,s)?this.merge(s,r):this.merge(r,s)}mergeMetaWithStore(e,t,r,s){return this.shouldReorder(e,t,r,s)?e:t}queryKey(e,t,r,s){if(this.argsKey){const t=this.pk(void 0,void 0,"",e);if(r(this.key,t))return t}}denormalize(e,t,r){return this.schema.denormalize(e,t,r)}},EntityMixin:v,Entity:v,Query:class{constructor(e,t){this.schema=e,this.process=t}normalize(...e){return this.schema.normalize(...e)}denormalize(e,t,r){const s=r(this.schema,e);return"symbol"==typeof s?s:this.process(s,...t)}queryKey(e,t,r,s){return t(this.schema,e,r,s)}}});const _=class{};class A extends(v(_)){static process(e,t,r,s){return super.process(e,t,r,s)}}var z;const K="undefined"!=typeof document;let x=K&&!(null!=(z=document.querySelector("meta[http-equiv='Content-Security-Policy']"))&&z.getAttribute("content"));try{x||Function()}catch(e){x=!0,K&&console.error("Content Security Policy: The previous CSP log can be safely ignored - @data-client/endpoint will use setPrototypeOf instead")}var w;class E extends Function{constructor(e,t){let r,s;return x?(r=(...e)=>r.fetch(...e),Object.setPrototypeOf(r,new.target.prototype)):(super("return arguments.callee.fetch.apply(arguments.callee, arguments)"),r=this),e&&(r.fetch=e),t&&"name"in t||!e||!e.name||"anonymous"===e.name||(s=e.name),Object.defineProperty(r,"name",{get(){return s||this.__name},set(e){this.__name=e}}),Object.assign(r,t),r}key(...e){return`${this.name} ${JSON.stringify(e)}`}testKey(e){return e.startsWith(this.name)}bind(e,...t){const r=this.fetch,s=this.key;return this.extend({fetch(){return r.apply(null!=e?e:this,t)},key(){return s.apply(this,t)}})}extend(e){class t extends this.constructor{}return Object.assign(t.prototype,this),new t(e.fetch,e)}}w=E,(()=>{if("undefined"!=typeof document&&document.FUNC_MANGLE){const e=w.prototype.key;w.prototype.key=function(...t){return null==document.FUNC_MANGLE||document.FUNC_MANGLE(this),this.prototype.key=e,e.call(this,...t)}}})();const N=E;Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e.Endpoint=E,e.Entity=A,e.EntityMixin=v,e.ExtendableEndpoint=N,e.INVALID=o,e.schema=S,e.validateRequired=function(e,t){let r="";if(Object.keys(t).some((t=>!Object.hasOwn(e,t)&&(r=t,!0))))return`Missing key ${r}`},Object.defineProperty(e,"__esModule",{value:!0})})); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Endpoint={})}(this,(function(e){"use strict";function t(e){return!("function"!=typeof e.hasOwnProperty||!(Object.hasOwnProperty.call(e,"__ownerID")||e._map&&Object.hasOwnProperty.call(e._map,"__ownerID")))}class r{constructor(e,t){this.schema=void 0,t&&(this._schemaAttribute="string"==typeof t?e=>e[t]:t),this.define(e)}get isSingleSchema(){return!this._schemaAttribute}define(e){"_schemaAttribute"in e&&!this._schemaAttribute?(this.schema=e.schema,this._schemaAttribute=e._schemaAttribute):this.schema=e}getSchemaAttribute(e,t,r){return!this.isSingleSchema&&this._schemaAttribute(e,t,r)}inferSchema(e,t,r){if(this.isSingleSchema)return this.schema;const s=this.getSchemaAttribute(e,t,r);return this.schema[s]}schemaKey(){return this.isSingleSchema?this.schema.key:Object.values(this.schema).join(";")}normalizeValue(e,t,r,s,n){if(!e)return e;const i=this.inferSchema(e,t,r);if(!i)return e;const o=n(i,e,t,r,s);return this.isSingleSchema||null==o?o:{id:o,schema:this.getSchemaAttribute(e,t,r)}}denormalizeValue(e,r){const s=!this.isSingleSchema&&e&&(t(e)?e.get("schema"):e.schema);if(!this.isSingleSchema&&!s){if("object"==typeof e&&null!==e){const t=this.inferSchema(e,void 0,void 0);if(t)return r(t,e)}return e}const n=this.isSingleSchema?void 0:t(e)?e.get("id"):e.id;return r(this.isSingleSchema?this.schema:this.schema[s],n||e)}}class s extends r{normalize(e,t,r,s,n,i,o,c){return Object.keys(e).reduce(((t,r,i)=>{const o=e[r];return null!=o?Object.assign({},t,{[r]:this.normalizeValue(o,e,r,s,n)}):t}),{})}denormalize(e,t,r){return Object.keys(e).reduce(((t,s)=>{const n=e[s],i=this.denormalizeValue(n,r);return i&&"symbol"!=typeof i?Object.assign({},t,{[s]:i}):t}),{})}queryKey(e,t,r,s){}}const n=e=>void 0!==e&&"symbol"!=typeof e;class i extends r{normalize(e,t,r,s,n,i,o,c){const a=(e=>Array.isArray(e)?e:Object.keys(e).map((t=>e[t])))(e);return a.map(((e,i)=>this.normalizeValue(e,t,r,s,n)))}denormalize(e,t,r){return e.map?e.map((e=>this.denormalizeValue(e,r))).filter(n):e}queryKey(e,t,r,s){}toJSON(){return[this.schema]}}const o=Symbol("INVALID");function c(e,r,s,n){if(t(r))return function(e,t,r){var s;let n;const i=Object.keys(e).reduce(((t,s)=>{const i=`${s}`,o=r(e[i],t.get(i));return"symbol"==typeof o&&(n=o),t.has(i)?t.set(i,o):t}),t);return null!=(s=n)?s:i}(e,r,n);const i=Object.assign({},r);for(const t of Object.keys(e)){const r=n(e[t],i[t]);if(void 0!==i[t]&&(i[t]=r),"symbol"==typeof r)return r}return i}const a=(e,t)=>[...e,...t],u=(e,t)=>[...t,...e],h=(e,t)=>Object.assign({},e,t),l=e=>[...e],m=e=>Object.assign({},e);function y(e,t,r){const s={merge:{value:t},normalize:{value:d},queryKey:{value:f}};return e.schema instanceof i&&(s.createIfValid={value:p},s.denormalize={value:b}),r&&(s.createCollectionFilter={value:r}),Object.create(e,s)}function f(){}function d(e,t,r,s,n,o,c,a){const u=this.schema.normalize(this.schema instanceof i&&!Array.isArray(e)?[e]:e,t,r,s,n,o,c,a),h=this.createCollectionFilter(...s),l=c(this.key);return l&&Object.keys(l).forEach((e=>{h(JSON.parse(e))&&o(this,u,e)})),u}function p(e){return Array.isArray(e)?[...e]:Object.assign({},e)}function b(e,t,r){return Array.isArray(e)?this.schema.denormalize(e,t,r):this.schema.denormalize([e],t,r)[0]}var g,O=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){e.exports=function(e,t){if(null==e)return{};var r={};for(var s in e)if({}.hasOwnProperty.call(e,s)){if(t.includes(s))continue;r[s]=e[s]}return r},e.exports.__esModule=!0,e.exports.default=e.exports})),k=(g=O)&&g.__esModule&&Object.prototype.hasOwnProperty.call(g,"default")?g.default:g;const j=["pk","schema","key"];function v(e,t={}){class r extends e{static toString(){return this.key}static toJSON(){return{key:this.key,schema:this.schema}}static pk(e,t,r,s){return this.prototype.pk.call(e,t,r,s)}static shouldUpdate(e,t,r,s){return!0}static shouldReorder(e,t,r,s){return t.fetchedAt<e.fetchedAt}static merge(e,t){return Object.assign({},e,t)}static mergeWithStore(e,t,r,s){return this.shouldUpdate(e,t,r,s)?typeof s!=typeof r?s:this.shouldReorder(e,t,r,s)?this.merge(s,r):this.merge(r,s):r}static mergeMetaWithStore(e,t,r,s){return this.shouldReorder(e,t,r,s)?e:t}static fromJS(e={}){const t=new this(e);return Object.assign(t,e),t}static createIfValid(e){if(!this.validate(e))return this.fromJS(e)}static process(e,t,r,s){return Object.assign({},e)}static normalize(e,t,r,s,n,i,o,c){const a=this.process(e,t,r,s);let u=this.pk(a,t,r,s);if(u=void 0===u||""===u||"undefined"===u?`MISS-${Math.random()}`:`${u}`,c(this.key,u,e))return u;return function(e){if(e){const t=new Error(e);throw t.status=400,t}}(this.validate(a)),Object.keys(this.schema).forEach((e=>{Object.hasOwn(a,e)&&(a[e]=n(this.schema[e],a[e],a,e,s))})),i(this,a,u),u}static validate(e){}static queryKey(e,t,r,s){if(!e[0])return;const n=function(e,t,r){if(["string","number"].includes(typeof t[0]))return`${t[0]}`;const s=e.pk(t[0],void 0,"",t);if(void 0!==s&&""!==s)return s;const n=(i=t[0],o=e.indexes,o?o.find((e=>Object.hasOwn(i,e))):void 0);var i,o;if(!n)return;const c=t[0][n];return r(e.key,n,c)[c]}(this,e,s);return r(this.key,n)?n:void 0}static denormalize(e,t,r){if("symbol"==typeof e)return e;for(const t of Object.keys(this.schema)){const s=r(this.schema[t],e[t]);if("symbol"==typeof s){if(this.defaults[t])return s;e[t]=void 0}else e[t]=s}return e}static get defaults(){return Object.hasOwn(this,"__defaults")||Object.defineProperty(this,"__defaults",{value:new this,writable:!0,configurable:!0}),this.__defaults}}const s=k(t,j);if(Object.assign(r,s),"schema"in t?r.schema=t.schema:e.schema||(r.schema={}),"pk"in t?"function"==typeof t.pk?r.prototype.pk=function(e,r){return t.pk(this,e,r)}:r.prototype.pk=function(){return this[t.pk]}:"function"!=typeof e.prototype.pk&&(r.prototype.pk=function(){return this.id}),"key"in t)Object.defineProperty(r,"key",{value:t.key,configurable:!0,writable:!0,enumerable:!0});else if(!("key"in e)){function n(e){Object.defineProperty(this,"key",{value:e,writable:!0,enumerable:!0,configurable:!0})}const i=function(){return"EntityMixin"===this.name?e.name:this.name},o="undefined"!=typeof document&&document.CLS_MANGLE?function(){return null==document.CLS_MANGLE||document.CLS_MANGLE(this),Object.defineProperty(r,"key",{get:i,set:n,enumerable:!0,configurable:!0}),i.call(this)}:i;Object.defineProperty(r,"key",{get:o,set:n,enumerable:!0,configurable:!0})}return r}var S=Object.freeze({__proto__:null,Union:class extends r{constructor(e,t){if(!t)throw new Error('Expected option "schemaAttribute" not found on UnionSchema.');super(e,t)}normalize(e,t,r,s,n,i,o,c){return this.normalizeValue(e,t,r,s,n)}denormalize(e,t,r){return this.denormalizeValue(e,r)}queryKey(e,t,r,s){if(!e[0])return;const n=this.getSchemaAttribute(e[0],void 0,""),i=this.schema[n];if(void 0===i)return;const o=t(i,e,r,s);return void 0!==o?{id:o,schema:n}:void 0}},Values:s,Array:i,All:class extends i{constructor(e,t){super(e,t)}normalize(e,t,r,s,n,i,o,c){super.normalize(e,t,r,s,n,i,o,c)}queryKey(e,t,r,s){if(this.isSingleSchema){const e=r(this.schema.key);return void 0===e?o:Object.values(e).map((e=>e&&this.schema.pk(e)))}let n=!1;const i=Object.values(this.schema).flatMap((e=>{const t=r(e.key);return void 0===t?[]:(n=!0,Object.values(t).map((t=>({id:t&&e.pk(t),schema:this.getSchemaAttribute(t,void 0,void 0)}))))}));return n?i:o}},Object:class{constructor(e){this.schema=void 0,this.define(e)}define(e){this.schema=Object.keys(e).reduce(((t,r)=>{const s=e[r];return Object.assign({},t,{[r]:s})}),this.schema||{})}normalize(...e){return((e,t,r,s,n,i,o,c,a)=>{const u=Object.assign({},t);return Object.keys(e).forEach((r=>{const s=e[r],o=i(s,t[r],t,r,n);void 0===o?delete u[r]:u[r]=o})),u})(this.schema,...e)}denormalize(e,t,r){return c(this.schema,e,0,r)}queryKey(e,t,r,s){return function(e,t,r,s,n){const i={};return Object.keys(e).forEach((o=>{i[o]=r(e[o],t,s,n)})),i}(this.schema,e,t,r,s)}},Invalidate:class{constructor(e){this._entity=e}get key(){return this._entity.key}normalize(e,t,r,s,n,i,c,a){const u=this._entity.process(e,t,r,s),h=this._entity.pk(u,t,r,s);return i(this,o,h),h}merge(e,t){return t}mergeWithStore(e,t,r,s){return this.merge(r,s)}mergeMetaWithStore(e,t,r,s){return t}queryKey(e,t,r,s){}denormalize(e,t,r){return r(this._entity,e)}_denormalizeNullable(){return{}}_normalizeNullable(){return{}}},Collection:class{addWith(e,t){return y(this,e,t)}createCollectionFilter(...e){return t=>Object.entries(t).every((([t,r])=>{var s;return this.nonFilterArgumentKeys(t)||`${e[0][t]}`===r||`${null==(s=e[1])?void 0:s[t]}`===r}))}nonFilterArgumentKeys(e){return e.startsWith("order")}constructor(e,t){if(this.schema=Array.isArray(e)?new i(e[0]):e,t?"nestKey"in t?this.nestKey=t.nestKey:this.argsKey="argsKey"in t?t.argsKey:e=>Object.assign({},e):this.argsKey=e=>Object.assign({},e),this.key=function(e){if(e instanceof i)return`[${e.schemaKey()}]`;if(e instanceof s)return`{${e.schemaKey()}}`;return`(${e.schemaKey()})`}(this.schema),null!=t&&t.nonFilterArgumentKeys){const{nonFilterArgumentKeys:e}=t;"function"==typeof e?this.nonFilterArgumentKeys=e:e instanceof RegExp?this.nonFilterArgumentKeys=t=>e.test(t):this.nonFilterArgumentKeys=t=>e.includes(t)}else null!=t&&t.createCollectionFilter&&(this.createCollectionFilter=t.createCollectionFilter.bind(this));this.schema instanceof i?(this.createIfValid=l,this.push=y(this,a),this.unshift=y(this,u)):e instanceof s&&(this.createIfValid=m,this.assign=y(this,h))}get cacheWith(){return this.schema.schema}toString(){return this.key}toJSON(){return{key:this.key,schema:this.schema.schema.toJSON()}}pk(e,t,r,s){const n=this.argsKey?this.argsKey(...s):this.nestKey(t,r);for(const e in n)["number","boolean"].includes(typeof n[e])&&(n[e]=`${n[e]}`);return function(e){const t=Object.keys(e).sort(),r={};for(const s of t)r[s]=e[s];return JSON.stringify(r)}(n)}normalize(e,t,r,s,n,i,o,c){const a=this.schema.normalize(e,t,r,s,n,i,o,c),u=this.pk(a,t,r,s);return i(this,a,u),u}merge(e,t){return t}shouldReorder(e,t,r,s){return t.fetchedAt<e.fetchedAt}mergeWithStore(e,t,r,s){return this.shouldReorder(e,t,r,s)?this.merge(s,r):this.merge(r,s)}mergeMetaWithStore(e,t,r,s){return this.shouldReorder(e,t,r,s)?e:t}queryKey(e,t,r,s){if(this.argsKey){const t=this.pk(void 0,void 0,"",e);if(r(this.key,t))return t}}denormalize(e,t,r){return this.schema.denormalize(e,t,r)}},EntityMixin:v,Entity:v,Query:class{constructor(e,t){this.schema=e,this.process=t}normalize(...e){return this.schema.normalize(...e)}denormalize(e,t,r){const s=r(this.schema,e);return"symbol"==typeof s?s:this.process(s,...t)}queryKey(e,t,r,s){return t(this.schema,e,r,s)}}});const _=class{};class A extends(v(_)){static process(e,t,r,s){return super.process(e,t,r,s)}}var z;const K="undefined"!=typeof document;let w=K&&!(null!=(z=document.querySelector("meta[http-equiv='Content-Security-Policy']"))&&z.getAttribute("content"));try{w||Function()}catch(e){w=!0,K&&console.error("Content Security Policy: The previous CSP log can be safely ignored - @data-client/endpoint will use setPrototypeOf instead")}var x;class E extends Function{constructor(e,t){let r,s;return w?(r=(...e)=>r.fetch(...e),Object.setPrototypeOf(r,new.target.prototype)):(super("return arguments.callee.fetch.apply(arguments.callee, arguments)"),r=this),e&&(r.fetch=e),t&&"name"in t||!e||!e.name||"anonymous"===e.name||(s=e.name),Object.defineProperty(r,"name",{get(){return s||this.__name},set(e){this.__name=e}}),Object.assign(r,t),r}key(...e){return`${this.name} ${JSON.stringify(e)}`}testKey(e){return e.startsWith(this.name)}bind(e,...t){const r=this.fetch,s=this.key;return this.extend({fetch(){return r.apply(null!=e?e:this,t)},key(){return s.apply(this,t)}})}extend(e){class t extends this.constructor{}return Object.assign(t.prototype,this),new t(e.fetch,e)}}x=E,(()=>{if("undefined"!=typeof document&&document.FUNC_MANGLE){const e=x.prototype.key;x.prototype.key=function(...t){return null==document.FUNC_MANGLE||document.FUNC_MANGLE(this),this.prototype.key=e,e.call(this,...t)}}})();const N=E;Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e.Endpoint=E,e.Entity=A,e.EntityMixin=v,e.ExtendableEndpoint=N,e.INVALID=o,e.schema=S,e.validateRequired=function(e,t){let r="";if(Object.keys(t).some((t=>!Object.hasOwn(e,t)&&(r=t,!0))))return`Missing key ${r}`},Object.defineProperty(e,"__esModule",{value:!0})})); |
@@ -93,3 +93,3 @@ import { consistentSerialize } from './consistentSerialize.js'; | ||
for (const key in obj) { | ||
if (typeof obj[key] !== 'string' && obj[key] !== undefined) obj[key] = `${obj[key]}`; | ||
if (['number', 'boolean'].includes(typeof obj[key])) obj[key] = `${obj[key]}`; | ||
} | ||
@@ -204,2 +204,2 @@ return consistentSerialize(obj); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25zaXN0ZW50U2VyaWFsaXplIiwiVmFsdWVzIiwiQXJyYXkiLCJBcnJheVNjaGVtYSIsInB1c2hNZXJnZSIsImV4aXN0aW5nIiwiaW5jb21pbmciLCJ1bnNoaWZ0TWVyZ2UiLCJ2YWx1ZXNNZXJnZSIsIk9iamVjdCIsImFzc2lnbiIsImNyZWF0ZUFycmF5IiwidmFsdWUiLCJjcmVhdGVWYWx1ZSIsIkNvbGxlY3Rpb25TY2hlbWEiLCJhZGRXaXRoIiwibWVyZ2UiLCJjcmVhdGVDb2xsZWN0aW9uRmlsdGVyIiwiQ3JlYXRlQWRkZXIiLCJhcmdzIiwiY29sbGVjdGlvbktleSIsImVudHJpZXMiLCJldmVyeSIsImtleSIsIl9hcmdzJCIsIm5vbkZpbHRlckFyZ3VtZW50S2V5cyIsInN0YXJ0c1dpdGgiLCJjb25zdHJ1Y3RvciIsInNjaGVtYSIsIm9wdGlvbnMiLCJpc0FycmF5IiwiYXJnc0tleSIsInBhcmFtcyIsIm5lc3RLZXkiLCJrZXlGcm9tU2NoZW1hIiwiUmVnRXhwIiwidGVzdCIsImluY2x1ZGVzIiwiYmluZCIsImNyZWF0ZUlmVmFsaWQiLCJwdXNoIiwidW5zaGlmdCIsImNhY2hlV2l0aCIsInRvU3RyaW5nIiwidG9KU09OIiwicGsiLCJwYXJlbnQiLCJvYmoiLCJ1bmRlZmluZWQiLCJub3JtYWxpemUiLCJpbnB1dCIsInZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwibm9ybWFsaXplZFZhbHVlIiwiaWQiLCJzaG91bGRSZW9yZGVyIiwiZXhpc3RpbmdNZXRhIiwiaW5jb21pbmdNZXRhIiwiZmV0Y2hlZEF0IiwibWVyZ2VXaXRoU3RvcmUiLCJtZXJnZU1ldGFXaXRoU3RvcmUiLCJxdWVyeUtleSIsImdldEluZGV4IiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiY29sbGVjdGlvbiIsInByb3BlcnRpZXMiLCJub3JtYWxpemVDcmVhdGUiLCJxdWVyeUtleUNyZWF0ZSIsImNyZWF0ZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNyZWF0aW5nIiwiZmlsdGVyQ29sbGVjdGlvbnMiLCJlbnRpdGllcyIsImtleXMiLCJmb3JFYWNoIiwiY29sbGVjdGlvblBrIiwiSlNPTiIsInBhcnNlIiwic2NoZW1hS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvQ29sbGVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zaXN0ZW50U2VyaWFsaXplIH0gZnJvbSAnLi9jb25zaXN0ZW50U2VyaWFsaXplLmpzJztcbmltcG9ydCB7IENoZWNrTG9vcCwgR2V0RW50aXR5LCBQb2x5bW9ycGhpY0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZXMsIEFycmF5IGFzIEFycmF5U2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRGVmYXVsdEFyZ3MsIEVudGl0eUludGVyZmFjZSB9IGZyb20gJy4uL3NjaGVtYVR5cGVzLmpzJztcblxuY29uc3QgcHVzaE1lcmdlID0gKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpID0+IHtcbiAgcmV0dXJuIFsuLi5leGlzdGluZywgLi4uaW5jb21pbmddO1xufTtcbmNvbnN0IHVuc2hpZnRNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiBbLi4uaW5jb21pbmcsIC4uLmV4aXN0aW5nXTtcbn07XG5jb25zdCB2YWx1ZXNNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiB7IC4uLmV4aXN0aW5nLCAuLi5pbmNvbWluZyB9O1xufTtcbmNvbnN0IGNyZWF0ZUFycmF5ID0gKHZhbHVlOiBhbnkpID0+IFsuLi52YWx1ZV07XG5jb25zdCBjcmVhdGVWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiAoeyAuLi52YWx1ZSB9KTtcblxuLyoqXG4gKiBFbnRpdGllcyBidXQgZm9yIEFycmF5cyBpbnN0ZWFkIG9mIGNsYXNzZXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblNjaGVtYTxcbiAgUyBleHRlbmRzIFBvbHltb3JwaGljSW50ZXJmYWNlID0gYW55LFxuICBBcmdzIGV4dGVuZHMgYW55W10gPSBEZWZhdWx0QXJncyxcbiAgUGFyZW50ID0gYW55LFxuPiB7XG4gIHByb3RlY3RlZCBkZWNsYXJlIG5lc3RLZXk6IChwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgcHJvdGVjdGVkIGRlY2xhcmUgYXJnc0tleT86ICguLi5hcmdzOiBhbnkpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgZGVjbGFyZSByZWFkb25seSBzY2hlbWE6IFM7XG5cbiAgZGVjbGFyZSByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBkZWNsYXJlIHB1c2g6IFMgZXh0ZW5kcyBBcnJheVNjaGVtYTxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgdW5zaGlmdDogUyBleHRlbmRzIEFycmF5U2NoZW1hPGFueT4gP1xuICAgIENvbGxlY3Rpb25TY2hlbWE8UywgQXJncywgUGFyZW50PlxuICA6IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGFzc2lnbjogUyBleHRlbmRzIFZhbHVlczxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGFkZFdpdGg8UCBleHRlbmRzIGFueVtdID0gQXJncz4oXG4gICAgbWVyZ2U6IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiBhbnksXG4gICAgY3JlYXRlQ29sbGVjdGlvbkZpbHRlcj86IChcbiAgICAgIC4uLmFyZ3M6IFBcbiAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuLFxuICApOiBDb2xsZWN0aW9uU2NoZW1hPFMsIFA+IHtcbiAgICByZXR1cm4gQ3JlYXRlQWRkZXIodGhpcywgbWVyZ2UsIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIpO1xuICB9XG5cbiAgLy8gdGhpcyBhZGRzIHRvIGFueSBsaXN0ICppbiBzdG9yZSogdGhhdCBoYXMgc2FtZSBtZW1iZXJzIGFzIHRoZSB1cmxQYXJhbXNcbiAgLy8gc28gZmV0Y2goY3JlYXRlLCB7IHVzZXJJZDogJ2JvYicsIGNvbXBsZXRlZDogdHJ1ZSB9LCBkYXRhKVxuICAvLyB3b3VsZCBwb3NzaWJseSBhZGQgdG8ge30sIHt1c2VySWQ6ICdib2InfSwge2NvbXBsZXRlZDogdHJ1ZX0sIHt1c2VySWQ6ICdib2InLCBjb21wbGV0ZWQ6IHRydWUgfSAtIGJ1dCBvbmx5IHRob3NlIGFscmVhZHkgaW4gdGhlIHN0b3JlXG4gIC8vIGl0IGlnbm9yZXMga2V5cyB0aGF0IHN0YXJ0IHdpdGggc29ydCBhcyB0aG9zZSBhcmUgcHJlc3VtZWQgdG8gbm90IGZpbHRlciByZXN1bHRzXG4gIHByb3RlY3RlZCBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICByZXR1cm4gKGNvbGxlY3Rpb25LZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+XG4gICAgICBPYmplY3QuZW50cmllcyhjb2xsZWN0aW9uS2V5KS5ldmVyeShcbiAgICAgICAgKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICB0aGlzLm5vbkZpbHRlckFyZ3VtZW50S2V5cyhrZXkpIHx8XG4gICAgICAgICAgLy8gc3RyaW5ncyBhcmUgY2Fub25pY2FsIGZvcm0uIFNlZSBwaygpIGFib3ZlIGZvciB2YWx1ZSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgIGAke2FyZ3NbMF1ba2V5XX1gID09PSB2YWx1ZSB8fFxuICAgICAgICAgIGAke2FyZ3NbMV0/LltrZXldfWAgPT09IHZhbHVlLFxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub25GaWx0ZXJBcmd1bWVudEtleXMoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoJ29yZGVyJyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY2hlbWE6IFMsIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uczxBcmdzLCBQYXJlbnQ+KSB7XG4gICAgdGhpcy5zY2hlbWEgPVxuICAgICAgQXJyYXkuaXNBcnJheShzY2hlbWEpID8gKG5ldyBBcnJheVNjaGVtYShzY2hlbWFbMF0pIGFzIGFueSkgOiBzY2hlbWE7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ25lc3RLZXknIGluIG9wdGlvbnMpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55KS5uZXN0S2V5ID0gb3B0aW9ucy5uZXN0S2V5O1xuICAgICAgfSBlbHNlIGlmICgnYXJnc0tleScgaW4gb3B0aW9ucykge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBvcHRpb25zLmFyZ3NLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtleSA9IGtleUZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgIGlmICgob3B0aW9ucyBhcyBhbnkpPy5ub25GaWx0ZXJBcmd1bWVudEtleXMpIHtcbiAgICAgIGNvbnN0IHsgbm9uRmlsdGVyQXJndW1lbnRLZXlzIH0gPSBvcHRpb25zIGFzIHtcbiAgICAgICAgbm9uRmlsdGVyQXJndW1lbnRLZXlzOiAoKGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IHN0cmluZ1tdIHwgUmVnRXhwO1xuICAgICAgfTtcbiAgICAgIGlmICh0eXBlb2Ygbm9uRmlsdGVyQXJndW1lbnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0gbm9uRmlsdGVyQXJndW1lbnRLZXlzO1xuICAgICAgfSBlbHNlIGlmIChub25GaWx0ZXJBcmd1bWVudEtleXMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgdGhpcy5ub25GaWx0ZXJBcmd1bWVudEtleXMgPSBrZXkgPT4gbm9uRmlsdGVyQXJndW1lbnRLZXlzLnRlc3Qoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0ga2V5ID0+IG5vbkZpbHRlckFyZ3VtZW50S2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKG9wdGlvbnMgYXMgYW55KT8uY3JlYXRlQ29sbGVjdGlvbkZpbHRlcilcbiAgICAgIC8vIFRPRE8oYnJlYWtpbmcpOiByZW5hbWUgdG8gZmlsdGVyQ29sbGVjdGlvbnNcbiAgICAgIHRoaXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciA9IChcbiAgICAgICAgb3B0aW9ucyBhcyBhbnkgYXMge1xuICAgICAgICAgIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI6IChcbiAgICAgICAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICAgICAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuO1xuICAgICAgICB9XG4gICAgICApLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIuYmluZCh0aGlzKSBhcyBhbnk7XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+PkNSRUFUSU9OPDw8PDw8PDw8PDw8PDxcbiAgICBpZiAodGhpcy5zY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlQXJyYXk7XG4gICAgICB0aGlzLnB1c2ggPSBDcmVhdGVBZGRlcih0aGlzLCBwdXNoTWVyZ2UpO1xuICAgICAgdGhpcy51bnNoaWZ0ID0gQ3JlYXRlQWRkZXIodGhpcywgdW5zaGlmdE1lcmdlKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFZhbHVlcykge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlVmFsdWU7XG4gICAgICB0aGlzLmFzc2lnbiA9IENyZWF0ZUFkZGVyKHRoaXMsIHZhbHVlc01lcmdlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FjaGVXaXRoKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLnNjaGVtYTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmtleTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEuc2NoZW1hLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICBwayh2YWx1ZTogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IGFueVtdKSB7XG4gICAgY29uc3Qgb2JqID1cbiAgICAgIHRoaXMuYXJnc0tleSA/IHRoaXMuYXJnc0tleSguLi5hcmdzKSA6IHRoaXMubmVzdEtleShwYXJlbnQsIGtleSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9ialtrZXldICE9PSAnc3RyaW5nJyAmJiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBvYmpba2V5XSA9IGAke29ialtrZXldfWA7XG4gICAgfVxuICAgIHJldHVybiBjb25zaXN0ZW50U2VyaWFsaXplKG9iaik7XG4gIH1cblxuICAvLyA+Pj4+Pj4+Pj4+Pj4+Pk5PUk1BTElaRTw8PDw8PDw8PDw8PDw8XG5cbiAgbm9ybWFsaXplKFxuICAgIGlucHV0OiBhbnksXG4gICAgcGFyZW50OiBQYXJlbnQsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgYXJnczogYW55W10sXG4gICAgdmlzaXQ6ICguLi5hcmdzOiBhbnkpID0+IGFueSxcbiAgICBhZGRFbnRpdHk6ICguLi5hcmdzOiBhbnkpID0+IGFueSxcbiAgICBnZXRFbnRpdHk6IGFueSxcbiAgICBjaGVja0xvb3A6IGFueSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLnNjaGVtYS5ub3JtYWxpemUoXG4gICAgICBpbnB1dCxcbiAgICAgIHBhcmVudCxcbiAgICAgIGtleSxcbiAgICAgIGFyZ3MsXG4gICAgICB2aXNpdCxcbiAgICAgIGFkZEVudGl0eSxcbiAgICAgIGdldEVudGl0eSxcbiAgICAgIGNoZWNrTG9vcCxcbiAgICApO1xuICAgIGNvbnN0IGlkID0gdGhpcy5wayhub3JtYWxpemVkVmFsdWUsIHBhcmVudCwga2V5LCBhcmdzKTtcblxuICAgIGFkZEVudGl0eSh0aGlzLCBub3JtYWxpemVkVmFsdWUsIGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvLyBhbHdheXMgcmVwbGFjZVxuICBtZXJnZShleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSB7XG4gICAgcmV0dXJuIGluY29taW5nO1xuICB9XG5cbiAgc2hvdWxkUmVvcmRlcihcbiAgICBleGlzdGluZ01ldGE6IHsgZGF0ZTogbnVtYmVyOyBmZXRjaGVkQXQ6IG51bWJlciB9LFxuICAgIGluY29taW5nTWV0YTogeyBkYXRlOiBudW1iZXI7IGZldGNoZWRBdDogbnVtYmVyIH0sXG4gICAgZXhpc3Rpbmc6IGFueSxcbiAgICBpbmNvbWluZzogYW55LFxuICApIHtcbiAgICByZXR1cm4gaW5jb21pbmdNZXRhLmZldGNoZWRBdCA8IGV4aXN0aW5nTWV0YS5mZXRjaGVkQXQ7XG4gIH1cblxuICBtZXJnZVdpdGhTdG9yZShcbiAgICBleGlzdGluZ01ldGE6IHtcbiAgICAgIGRhdGU6IG51bWJlcjtcbiAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgIH0sXG4gICAgaW5jb21pbmdNZXRhOiB7IGRhdGU6IG51bWJlcjsgZmV0Y2hlZEF0OiBudW1iZXIgfSxcbiAgICBleGlzdGluZzogYW55LFxuICAgIGluY29taW5nOiBhbnksXG4gICkge1xuICAgIHJldHVybiB0aGlzLnNob3VsZFJlb3JkZXIoZXhpc3RpbmdNZXRhLCBpbmNvbWluZ01ldGEsIGV4aXN0aW5nLCBpbmNvbWluZykgP1xuICAgICAgICB0aGlzLm1lcmdlKGluY29taW5nLCBleGlzdGluZylcbiAgICAgIDogdGhpcy5tZXJnZShleGlzdGluZywgaW5jb21pbmcpO1xuICB9XG5cbiAgbWVyZ2VNZXRhV2l0aFN0b3JlKFxuICAgIGV4aXN0aW5nTWV0YToge1xuICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICBkYXRlOiBudW1iZXI7XG4gICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICB9LFxuICAgIGluY29taW5nTWV0YTogeyBmZXRjaGVkQXQ6IG51bWJlcjsgZGF0ZTogbnVtYmVyOyBleHBpcmVzQXQ6IG51bWJlciB9LFxuICAgIGV4aXN0aW5nOiBhbnksXG4gICAgaW5jb21pbmc6IGFueSxcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVvcmRlcihleGlzdGluZ01ldGEsIGluY29taW5nTWV0YSwgZXhpc3RpbmcsIGluY29taW5nKSA/XG4gICAgICAgIGV4aXN0aW5nTWV0YVxuICAgICAgOiBpbmNvbWluZ01ldGE7XG4gIH1cblxuICAvLyA+Pj4+Pj4+Pj4+Pj4+PkRFTk9STUFMSVpFPDw8PDw8PDw8PDw8PDxcblxuICBxdWVyeUtleShcbiAgICBhcmdzOiBBcmdzLFxuICAgIHF1ZXJ5S2V5OiB1bmtub3duLFxuICAgIGdldEVudGl0eTogR2V0RW50aXR5LFxuICAgIGdldEluZGV4OiB1bmtub3duLFxuICApOiBhbnkge1xuICAgIGlmICh0aGlzLmFyZ3NLZXkpIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5wayh1bmRlZmluZWQsIHVuZGVmaW5lZCwgJycsIGFyZ3MpO1xuICAgICAgLy8gZW5zdXJlIHRoaXMgYWN0dWFsbHkgaGFzIGVudGl0eSBvciB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHVzZSBpdCBpbiBvdXIgcXVlcnlcbiAgICAgIGlmIChnZXRFbnRpdHkodGhpcy5rZXksIGlkKSkgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGRlY2xhcmUgY3JlYXRlSWZWYWxpZDogKHZhbHVlOiBhbnkpID0+IGFueSB8IHVuZGVmaW5lZDtcblxuICBkZW5vcm1hbGl6ZShcbiAgICBpbnB1dDogYW55LFxuICAgIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICAgIHVudmlzaXQ6IChzY2hlbWE6IGFueSwgaW5wdXQ6IGFueSkgPT4gYW55LFxuICApOiBSZXR1cm5UeXBlPFNbJ2Rlbm9ybWFsaXplJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuZGVub3JtYWxpemUoaW5wdXQsIGFyZ3MsIHVudmlzaXQpIGFzIGFueTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3B0aW9uczxcbiAgQXJncyBleHRlbmRzIGFueVtdID0gRGVmYXVsdEFyZ3MsXG4gIFBhcmVudCA9IGFueSxcbj4gPSAoXG4gIHwge1xuICAgICAgLyoqIERlZmluZXMgbG9va3VwcyBmb3IgQ29sbGVjdGlvbnMgbmVzdGVkIGluIG90aGVyIHNjaGVtYXMuXG4gICAgICAgKlxuICAgICAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvQ29sbGVjdGlvbiNuZXN0S2V5XG4gICAgICAgKi9cbiAgICAgIG5lc3RLZXk/OiAocGFyZW50OiBQYXJlbnQsIGtleTogc3RyaW5nKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH1cbiAgfCB7XG4gICAgICAvKiogRGVmaW5lcyBsb29rdXBzIHRvcC1sZXZlbCBDb2xsZWN0aW9ucyB1c2luZyAuLi5hcmdzLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb24jYXJnc0tleVxuICAgICAgICovXG4gICAgICBhcmdzS2V5PzogKC4uLmFyZ3M6IEFyZ3MpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuKSAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgLyoqIFNldHMgYSBkZWZhdWx0IGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgZm9yIGFkZFdpdGgoKSwgcHVzaCwgdW5zaGlmdCwgYW5kIGFzc2lnbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvQ29sbGVjdGlvbiNjcmVhdGVjb2xsZWN0aW9uZmlsdGVyXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyPzogKFxuICAgICAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICAgICAgKSA9PiAoY29sbGVjdGlvbktleTogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4gYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgLyoqIFRlc3QgdG8gZGV0ZXJtaW5lIHdoaWNoIGFyZyBrZXlzIHNob3VsZCAqKm5vdCoqIGJlIHVzZWQgZm9yIGZpbHRlcmluZyByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9Db2xsZWN0aW9uI25vbmZpbHRlcmFyZ3VtZW50a2V5c1xuICAgICAgICAgKi9cbiAgICAgICAgbm9uRmlsdGVyQXJndW1lbnRLZXlzPzogKChrZXk6IHN0cmluZykgPT4gYm9vbGVhbikgfCBzdHJpbmdbXSB8IFJlZ0V4cDtcbiAgICAgIH1cbiAgKTtcblxuZnVuY3Rpb24gQ3JlYXRlQWRkZXI8QyBleHRlbmRzIENvbGxlY3Rpb25TY2hlbWE8YW55LCBhbnk+LCBQIGV4dGVuZHMgYW55W10+KFxuICBjb2xsZWN0aW9uOiBDLFxuICBtZXJnZTogKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpID0+IGFueVtdLFxuICBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyPzogKFxuICAgIC4uLmFyZ3M6IFBcbiAgKSA9PiAoY29sbGVjdGlvbktleTogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4gYm9vbGVhbixcbikge1xuICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlc2NyaXB0b3JNYXAgPSB7XG4gICAgbWVyZ2U6IHsgdmFsdWU6IG1lcmdlIH0sXG4gICAgbm9ybWFsaXplOiB7IHZhbHVlOiBub3JtYWxpemVDcmVhdGUgfSxcbiAgICBxdWVyeUtleTogeyB2YWx1ZTogcXVlcnlLZXlDcmVhdGUgfSxcbiAgfTtcbiAgaWYgKGNvbGxlY3Rpb24uc2NoZW1hIGluc3RhbmNlb2YgQXJyYXlTY2hlbWEpIHtcbiAgICBwcm9wZXJ0aWVzLmNyZWF0ZUlmVmFsaWQgPSB7IHZhbHVlOiBjcmVhdGVJZlZhbGlkIH07XG4gICAgcHJvcGVydGllcy5kZW5vcm1hbGl6ZSA9IHsgdmFsdWU6IGRlbm9ybWFsaXplIH07XG4gIH1cbiAgaWYgKGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIpIHtcbiAgICBwcm9wZXJ0aWVzLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgPSB7IHZhbHVlOiBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyIH07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoY29sbGVjdGlvbiwgcHJvcGVydGllcyk7XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5S2V5Q3JlYXRlKCkge31cblxuZnVuY3Rpb24gbm9ybWFsaXplQ3JlYXRlKFxuICB0aGlzOiBDb2xsZWN0aW9uU2NoZW1hPGFueSwgYW55PixcbiAgaW5wdXQ6IGFueSxcbiAgcGFyZW50OiBhbnksXG4gIGtleTogc3RyaW5nLFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdmlzaXQ6ICgoLi4uYXJnczogYW55KSA9PiBhbnkpICYgeyBjcmVhdGluZz86IGJvb2xlYW4gfSxcbiAgYWRkRW50aXR5OiAoc2NoZW1hOiBhbnksIHByb2Nlc3NlZEVudGl0eTogYW55LCBpZDogc3RyaW5nKSA9PiB2b2lkLFxuICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbiAgY2hlY2tMb29wOiBDaGVja0xvb3AsXG4pOiBhbnkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIG1lYW5zICd0aGlzIGlzIGEgY3JlYXRpb24gZW5kcG9pbnQnIC0gc28gcmVhbCBQS3MgYXJlIG5vdCByZXF1aXJlZFxuICAgIC8vIHRoaXMgaXMgdXNlZCBieSBFbnRpdHkubm9ybWFsaXplKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYWxsb3cgZW1wdHkgcGtzXG4gICAgLy8gdmlzaXQgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIG9uIGVhY2ggbm9ybWFsaXplIGNhbGwgc28gdGhpcyB3aWxsIHNhZmVseSBiZSByZXNldFxuICAgIHZpc2l0LmNyZWF0aW5nID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLnNjaGVtYS5ub3JtYWxpemUoXG4gICAgISh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIEFycmF5U2NoZW1hKSB8fCBBcnJheS5pc0FycmF5KGlucHV0KSA/XG4gICAgICBpbnB1dFxuICAgIDogW2lucHV0XSxcbiAgICBwYXJlbnQsXG4gICAga2V5LFxuICAgIGFyZ3MsXG4gICAgdmlzaXQsXG4gICAgYWRkRW50aXR5LFxuICAgIGdldEVudGl0eSxcbiAgICBjaGVja0xvb3AsXG4gICk7XG4gIC8vIHBhcmVudCBpcyBhcmdzIHdoZW4gbm90IG5lc3RlZFxuICBjb25zdCBmaWx0ZXJDb2xsZWN0aW9ucyA9ICh0aGlzLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgYXMgYW55KSguLi5hcmdzKTtcbiAgLy8gYWRkIHRvIGFueSBjb2xsZWN0aW9ucyB0aGF0IG1hdGNoIHRoaXNcbiAgY29uc3QgZW50aXRpZXMgPSBnZXRFbnRpdHkodGhpcy5rZXkpO1xuICBpZiAoZW50aXRpZXMpXG4gICAgT2JqZWN0LmtleXMoZW50aXRpZXMpLmZvckVhY2goY29sbGVjdGlvblBrID0+IHtcbiAgICAgIGlmICghZmlsdGVyQ29sbGVjdGlvbnMoSlNPTi5wYXJzZShjb2xsZWN0aW9uUGspKSkgcmV0dXJuO1xuICAgICAgYWRkRW50aXR5KHRoaXMsIG5vcm1hbGl6ZWRWYWx1ZSwgY29sbGVjdGlvblBrKTtcbiAgICB9KTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZSBhcyBhbnk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlmVmFsaWQodmFsdWU6IG9iamVjdCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB7IC4uLnZhbHVlIH07XG59XG5cbi8vIG9ubHkgZm9yIGFycmF5c1xuZnVuY3Rpb24gZGVub3JtYWxpemUoXG4gIHRoaXM6IENvbGxlY3Rpb25TY2hlbWE8YW55LCBhbnk+LFxuICBpbnB1dDogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdW52aXNpdDogKHNjaGVtYTogYW55LCBpbnB1dDogYW55KSA9PiBhbnksXG4pOiBhbnkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbnB1dCkgP1xuICAgICAgKHRoaXMuc2NoZW1hLmRlbm9ybWFsaXplKGlucHV0LCBhcmdzLCB1bnZpc2l0KSBhcyBhbnkpXG4gICAgOiAodGhpcy5zY2hlbWEuZGVub3JtYWxpemUoW2lucHV0XSwgYXJncywgdW52aXNpdClbMF0gYXMgYW55KTtcbn1cbi8qKlxuICogV2UgY2FsbCBzY2hlbWEuZGVub3JtYWxpemUgYW5kIHNjaGVtYS5ub3JtYWxpemUgZGlyZWN0bHlcbiAqIGluc3RlYWQgb2YgdmlzaXQvdW52aXNpdCBhcyB3ZSBhcmUgbm90IG9wZXJhdGluZyBvbiBuZXcgZGF0YVxuICogc28gdGhlIGFkZGl0aW9uYWwgY2hlY2tzIGluIHRob3NlIG1ldGhvZHMgYXJlIHJlZHVuZGFudFxuICovXG5cbmZ1bmN0aW9uIGtleUZyb21TY2hlbWEoc2NoZW1hOiBQb2x5bW9ycGhpY0ludGVyZmFjZSkge1xuICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXJyYXlTY2hlbWEpIHtcbiAgICAvLyB0aGlzIGFzc3VtZXMgdGhlIGRlZmluaXRpb24gb2YgQXJyYXkvVmFsdWVzIGlzIEVudGl0eVxuICAgIHJldHVybiBgWyR7c2NoZW1hLnNjaGVtYUtleSgpfV1gO1xuICB9IGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFZhbHVlcykge1xuICAgIHJldHVybiBgeyR7c2NoZW1hLnNjaGVtYUtleSgpfX1gO1xuICB9XG4gIHJldHVybiBgKCR7c2NoZW1hLnNjaGVtYUtleSgpfSlgO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxtQkFBbUIsUUFBUSwwQkFBMEI7QUFFOUQsU0FBU0MsTUFBTSxFQUFFQyxLQUFLLElBQUlDLFdBQVcsUUFBUSxjQUFjO0FBRzNELE1BQU1DLFNBQVMsR0FBR0EsQ0FBQ0MsUUFBYSxFQUFFQyxRQUFhLEtBQUs7RUFDbEQsT0FBTyxDQUFDLEdBQUdELFFBQVEsRUFBRSxHQUFHQyxRQUFRLENBQUM7QUFDbkMsQ0FBQztBQUNELE1BQU1DLFlBQVksR0FBR0EsQ0FBQ0YsUUFBYSxFQUFFQyxRQUFhLEtBQUs7RUFDckQsT0FBTyxDQUFDLEdBQUdBLFFBQVEsRUFBRSxHQUFHRCxRQUFRLENBQUM7QUFDbkMsQ0FBQztBQUNELE1BQU1HLFdBQVcsR0FBR0EsQ0FBQ0gsUUFBYSxFQUFFQyxRQUFhLEtBQUs7RUFDcEQsT0FBQUcsTUFBQSxDQUFBQyxNQUFBLEtBQVlMLFFBQVEsRUFBS0MsUUFBUTtBQUNuQyxDQUFDO0FBQ0QsTUFBTUssV0FBVyxHQUFJQyxLQUFVLElBQUssQ0FBQyxHQUFHQSxLQUFLLENBQUM7QUFDOUMsTUFBTUMsV0FBVyxHQUFJRCxLQUFVLElBQUFILE1BQUEsQ0FBQUMsTUFBQSxLQUFXRSxLQUFLLENBQUc7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNRSxnQkFBZ0IsQ0FJbkM7RUFtQkFDLE9BQU9BLENBQ0xDLEtBQTRDLEVBQzVDQyxzQkFFdUQsRUFDL0I7SUFDeEIsT0FBT0MsV0FBVyxDQUFDLElBQUksRUFBRUYsS0FBSyxFQUFFQyxzQkFBc0IsQ0FBQztFQUN6RDs7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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25zaXN0ZW50U2VyaWFsaXplIiwiVmFsdWVzIiwiQXJyYXkiLCJBcnJheVNjaGVtYSIsInB1c2hNZXJnZSIsImV4aXN0aW5nIiwiaW5jb21pbmciLCJ1bnNoaWZ0TWVyZ2UiLCJ2YWx1ZXNNZXJnZSIsIk9iamVjdCIsImFzc2lnbiIsImNyZWF0ZUFycmF5IiwidmFsdWUiLCJjcmVhdGVWYWx1ZSIsIkNvbGxlY3Rpb25TY2hlbWEiLCJhZGRXaXRoIiwibWVyZ2UiLCJjcmVhdGVDb2xsZWN0aW9uRmlsdGVyIiwiQ3JlYXRlQWRkZXIiLCJhcmdzIiwiY29sbGVjdGlvbktleSIsImVudHJpZXMiLCJldmVyeSIsImtleSIsIl9hcmdzJCIsIm5vbkZpbHRlckFyZ3VtZW50S2V5cyIsInN0YXJ0c1dpdGgiLCJjb25zdHJ1Y3RvciIsInNjaGVtYSIsIm9wdGlvbnMiLCJpc0FycmF5IiwiYXJnc0tleSIsInBhcmFtcyIsIm5lc3RLZXkiLCJrZXlGcm9tU2NoZW1hIiwiUmVnRXhwIiwidGVzdCIsImluY2x1ZGVzIiwiYmluZCIsImNyZWF0ZUlmVmFsaWQiLCJwdXNoIiwidW5zaGlmdCIsImNhY2hlV2l0aCIsInRvU3RyaW5nIiwidG9KU09OIiwicGsiLCJwYXJlbnQiLCJvYmoiLCJub3JtYWxpemUiLCJpbnB1dCIsInZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwibm9ybWFsaXplZFZhbHVlIiwiaWQiLCJzaG91bGRSZW9yZGVyIiwiZXhpc3RpbmdNZXRhIiwiaW5jb21pbmdNZXRhIiwiZmV0Y2hlZEF0IiwibWVyZ2VXaXRoU3RvcmUiLCJtZXJnZU1ldGFXaXRoU3RvcmUiLCJxdWVyeUtleSIsImdldEluZGV4IiwidW5kZWZpbmVkIiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiY29sbGVjdGlvbiIsInByb3BlcnRpZXMiLCJub3JtYWxpemVDcmVhdGUiLCJxdWVyeUtleUNyZWF0ZSIsImNyZWF0ZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNyZWF0aW5nIiwiZmlsdGVyQ29sbGVjdGlvbnMiLCJlbnRpdGllcyIsImtleXMiLCJmb3JFYWNoIiwiY29sbGVjdGlvblBrIiwiSlNPTiIsInBhcnNlIiwic2NoZW1hS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvQ29sbGVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zaXN0ZW50U2VyaWFsaXplIH0gZnJvbSAnLi9jb25zaXN0ZW50U2VyaWFsaXplLmpzJztcbmltcG9ydCB7IENoZWNrTG9vcCwgR2V0RW50aXR5LCBQb2x5bW9ycGhpY0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZXMsIEFycmF5IGFzIEFycmF5U2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRGVmYXVsdEFyZ3MsIEVudGl0eUludGVyZmFjZSB9IGZyb20gJy4uL3NjaGVtYVR5cGVzLmpzJztcblxuY29uc3QgcHVzaE1lcmdlID0gKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpID0+IHtcbiAgcmV0dXJuIFsuLi5leGlzdGluZywgLi4uaW5jb21pbmddO1xufTtcbmNvbnN0IHVuc2hpZnRNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiBbLi4uaW5jb21pbmcsIC4uLmV4aXN0aW5nXTtcbn07XG5jb25zdCB2YWx1ZXNNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiB7IC4uLmV4aXN0aW5nLCAuLi5pbmNvbWluZyB9O1xufTtcbmNvbnN0IGNyZWF0ZUFycmF5ID0gKHZhbHVlOiBhbnkpID0+IFsuLi52YWx1ZV07XG5jb25zdCBjcmVhdGVWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiAoeyAuLi52YWx1ZSB9KTtcblxuLyoqXG4gKiBFbnRpdGllcyBidXQgZm9yIEFycmF5cyBpbnN0ZWFkIG9mIGNsYXNzZXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblNjaGVtYTxcbiAgUyBleHRlbmRzIFBvbHltb3JwaGljSW50ZXJmYWNlID0gYW55LFxuICBBcmdzIGV4dGVuZHMgYW55W10gPSBEZWZhdWx0QXJncyxcbiAgUGFyZW50ID0gYW55LFxuPiB7XG4gIHByb3RlY3RlZCBkZWNsYXJlIG5lc3RLZXk6IChwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgcHJvdGVjdGVkIGRlY2xhcmUgYXJnc0tleT86ICguLi5hcmdzOiBhbnkpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgZGVjbGFyZSByZWFkb25seSBzY2hlbWE6IFM7XG5cbiAgZGVjbGFyZSByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBkZWNsYXJlIHB1c2g6IFMgZXh0ZW5kcyBBcnJheVNjaGVtYTxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgdW5zaGlmdDogUyBleHRlbmRzIEFycmF5U2NoZW1hPGFueT4gP1xuICAgIENvbGxlY3Rpb25TY2hlbWE8UywgQXJncywgUGFyZW50PlxuICA6IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGFzc2lnbjogUyBleHRlbmRzIFZhbHVlczxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGFkZFdpdGg8UCBleHRlbmRzIGFueVtdID0gQXJncz4oXG4gICAgbWVyZ2U6IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiBhbnksXG4gICAgY3JlYXRlQ29sbGVjdGlvbkZpbHRlcj86IChcbiAgICAgIC4uLmFyZ3M6IFBcbiAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuLFxuICApOiBDb2xsZWN0aW9uU2NoZW1hPFMsIFA+IHtcbiAgICByZXR1cm4gQ3JlYXRlQWRkZXIodGhpcywgbWVyZ2UsIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIpO1xuICB9XG5cbiAgLy8gdGhpcyBhZGRzIHRvIGFueSBsaXN0ICppbiBzdG9yZSogdGhhdCBoYXMgc2FtZSBtZW1iZXJzIGFzIHRoZSB1cmxQYXJhbXNcbiAgLy8gc28gZmV0Y2goY3JlYXRlLCB7IHVzZXJJZDogJ2JvYicsIGNvbXBsZXRlZDogdHJ1ZSB9LCBkYXRhKVxuICAvLyB3b3VsZCBwb3NzaWJseSBhZGQgdG8ge30sIHt1c2VySWQ6ICdib2InfSwge2NvbXBsZXRlZDogdHJ1ZX0sIHt1c2VySWQ6ICdib2InLCBjb21wbGV0ZWQ6IHRydWUgfSAtIGJ1dCBvbmx5IHRob3NlIGFscmVhZHkgaW4gdGhlIHN0b3JlXG4gIC8vIGl0IGlnbm9yZXMga2V5cyB0aGF0IHN0YXJ0IHdpdGggc29ydCBhcyB0aG9zZSBhcmUgcHJlc3VtZWQgdG8gbm90IGZpbHRlciByZXN1bHRzXG4gIHByb3RlY3RlZCBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICByZXR1cm4gKGNvbGxlY3Rpb25LZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+XG4gICAgICBPYmplY3QuZW50cmllcyhjb2xsZWN0aW9uS2V5KS5ldmVyeShcbiAgICAgICAgKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICB0aGlzLm5vbkZpbHRlckFyZ3VtZW50S2V5cyhrZXkpIHx8XG4gICAgICAgICAgLy8gc3RyaW5ncyBhcmUgY2Fub25pY2FsIGZvcm0uIFNlZSBwaygpIGFib3ZlIGZvciB2YWx1ZSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgIGAke2FyZ3NbMF1ba2V5XX1gID09PSB2YWx1ZSB8fFxuICAgICAgICAgIGAke2FyZ3NbMV0/LltrZXldfWAgPT09IHZhbHVlLFxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub25GaWx0ZXJBcmd1bWVudEtleXMoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoJ29yZGVyJyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY2hlbWE6IFMsIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uczxBcmdzLCBQYXJlbnQ+KSB7XG4gICAgdGhpcy5zY2hlbWEgPVxuICAgICAgQXJyYXkuaXNBcnJheShzY2hlbWEpID8gKG5ldyBBcnJheVNjaGVtYShzY2hlbWFbMF0pIGFzIGFueSkgOiBzY2hlbWE7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ25lc3RLZXknIGluIG9wdGlvbnMpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55KS5uZXN0S2V5ID0gb3B0aW9ucy5uZXN0S2V5O1xuICAgICAgfSBlbHNlIGlmICgnYXJnc0tleScgaW4gb3B0aW9ucykge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBvcHRpb25zLmFyZ3NLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtleSA9IGtleUZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgIGlmICgob3B0aW9ucyBhcyBhbnkpPy5ub25GaWx0ZXJBcmd1bWVudEtleXMpIHtcbiAgICAgIGNvbnN0IHsgbm9uRmlsdGVyQXJndW1lbnRLZXlzIH0gPSBvcHRpb25zIGFzIHtcbiAgICAgICAgbm9uRmlsdGVyQXJndW1lbnRLZXlzOiAoKGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IHN0cmluZ1tdIHwgUmVnRXhwO1xuICAgICAgfTtcbiAgICAgIGlmICh0eXBlb2Ygbm9uRmlsdGVyQXJndW1lbnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0gbm9uRmlsdGVyQXJndW1lbnRLZXlzO1xuICAgICAgfSBlbHNlIGlmIChub25GaWx0ZXJBcmd1bWVudEtleXMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgdGhpcy5ub25GaWx0ZXJBcmd1bWVudEtleXMgPSBrZXkgPT4gbm9uRmlsdGVyQXJndW1lbnRLZXlzLnRlc3Qoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0ga2V5ID0+IG5vbkZpbHRlckFyZ3VtZW50S2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKG9wdGlvbnMgYXMgYW55KT8uY3JlYXRlQ29sbGVjdGlvbkZpbHRlcilcbiAgICAgIC8vIFRPRE8oYnJlYWtpbmcpOiByZW5hbWUgdG8gZmlsdGVyQ29sbGVjdGlvbnNcbiAgICAgIHRoaXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciA9IChcbiAgICAgICAgb3B0aW9ucyBhcyBhbnkgYXMge1xuICAgICAgICAgIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI6IChcbiAgICAgICAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICAgICAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuO1xuICAgICAgICB9XG4gICAgICApLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIuYmluZCh0aGlzKSBhcyBhbnk7XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+PkNSRUFUSU9OPDw8PDw8PDw8PDw8PDxcbiAgICBpZiAodGhpcy5zY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlQXJyYXk7XG4gICAgICB0aGlzLnB1c2ggPSBDcmVhdGVBZGRlcih0aGlzLCBwdXNoTWVyZ2UpO1xuICAgICAgdGhpcy51bnNoaWZ0ID0gQ3JlYXRlQWRkZXIodGhpcywgdW5zaGlmdE1lcmdlKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFZhbHVlcykge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlVmFsdWU7XG4gICAgICB0aGlzLmFzc2lnbiA9IENyZWF0ZUFkZGVyKHRoaXMsIHZhbHVlc01lcmdlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FjaGVXaXRoKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLnNjaGVtYTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmtleTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEuc2NoZW1hLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICBwayh2YWx1ZTogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IGFueVtdKSB7XG4gICAgY29uc3Qgb2JqID1cbiAgICAgIHRoaXMuYXJnc0tleSA/IHRoaXMuYXJnc0tleSguLi5hcmdzKSA6IHRoaXMubmVzdEtleShwYXJlbnQsIGtleSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoWydudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGVvZiBvYmpba2V5XSkpXG4gICAgICAgIG9ialtrZXldID0gYCR7b2JqW2tleV19YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnNpc3RlbnRTZXJpYWxpemUob2JqKTtcbiAgfVxuXG4gIC8vID4+Pj4+Pj4+Pj4+Pj4+Tk9STUFMSVpFPDw8PDw8PDw8PDw8PDxcblxuICBub3JtYWxpemUoXG4gICAgaW5wdXQ6IGFueSxcbiAgICBwYXJlbnQ6IFBhcmVudCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBhcmdzOiBhbnlbXSxcbiAgICB2aXNpdDogKC4uLmFyZ3M6IGFueSkgPT4gYW55LFxuICAgIGFkZEVudGl0eTogKC4uLmFyZ3M6IGFueSkgPT4gYW55LFxuICAgIGdldEVudGl0eTogYW55LFxuICAgIGNoZWNrTG9vcDogYW55LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuc2NoZW1hLm5vcm1hbGl6ZShcbiAgICAgIGlucHV0LFxuICAgICAgcGFyZW50LFxuICAgICAga2V5LFxuICAgICAgYXJncyxcbiAgICAgIHZpc2l0LFxuICAgICAgYWRkRW50aXR5LFxuICAgICAgZ2V0RW50aXR5LFxuICAgICAgY2hlY2tMb29wLFxuICAgICk7XG4gICAgY29uc3QgaWQgPSB0aGlzLnBrKG5vcm1hbGl6ZWRWYWx1ZSwgcGFyZW50LCBrZXksIGFyZ3MpO1xuXG4gICAgYWRkRW50aXR5KHRoaXMsIG5vcm1hbGl6ZWRWYWx1ZSwgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8vIGFsd2F5cyByZXBsYWNlXG4gIG1lcmdlKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpIHtcbiAgICByZXR1cm4gaW5jb21pbmc7XG4gIH1cblxuICBzaG91bGRSZW9yZGVyKFxuICAgIGV4aXN0aW5nTWV0YTogeyBkYXRlOiBudW1iZXI7IGZldGNoZWRBdDogbnVtYmVyIH0sXG4gICAgaW5jb21pbmdNZXRhOiB7IGRhdGU6IG51bWJlcjsgZmV0Y2hlZEF0OiBudW1iZXIgfSxcbiAgICBleGlzdGluZzogYW55LFxuICAgIGluY29taW5nOiBhbnksXG4gICkge1xuICAgIHJldHVybiBpbmNvbWluZ01ldGEuZmV0Y2hlZEF0IDwgZXhpc3RpbmdNZXRhLmZldGNoZWRBdDtcbiAgfVxuXG4gIG1lcmdlV2l0aFN0b3JlKFxuICAgIGV4aXN0aW5nTWV0YToge1xuICAgICAgZGF0ZTogbnVtYmVyO1xuICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgfSxcbiAgICBpbmNvbWluZ01ldGE6IHsgZGF0ZTogbnVtYmVyOyBmZXRjaGVkQXQ6IG51bWJlciB9LFxuICAgIGV4aXN0aW5nOiBhbnksXG4gICAgaW5jb21pbmc6IGFueSxcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVvcmRlcihleGlzdGluZ01ldGEsIGluY29taW5nTWV0YSwgZXhpc3RpbmcsIGluY29taW5nKSA/XG4gICAgICAgIHRoaXMubWVyZ2UoaW5jb21pbmcsIGV4aXN0aW5nKVxuICAgICAgOiB0aGlzLm1lcmdlKGV4aXN0aW5nLCBpbmNvbWluZyk7XG4gIH1cblxuICBtZXJnZU1ldGFXaXRoU3RvcmUoXG4gICAgZXhpc3RpbmdNZXRhOiB7XG4gICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgIGRhdGU6IG51bWJlcjtcbiAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIH0sXG4gICAgaW5jb21pbmdNZXRhOiB7IGZldGNoZWRBdDogbnVtYmVyOyBkYXRlOiBudW1iZXI7IGV4cGlyZXNBdDogbnVtYmVyIH0sXG4gICAgZXhpc3Rpbmc6IGFueSxcbiAgICBpbmNvbWluZzogYW55LFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5zaG91bGRSZW9yZGVyKGV4aXN0aW5nTWV0YSwgaW5jb21pbmdNZXRhLCBleGlzdGluZywgaW5jb21pbmcpID9cbiAgICAgICAgZXhpc3RpbmdNZXRhXG4gICAgICA6IGluY29taW5nTWV0YTtcbiAgfVxuXG4gIC8vID4+Pj4+Pj4+Pj4+Pj4+REVOT1JNQUxJWkU8PDw8PDw8PDw8PDw8PFxuXG4gIHF1ZXJ5S2V5KFxuICAgIGFyZ3M6IEFyZ3MsXG4gICAgcXVlcnlLZXk6IHVua25vd24sXG4gICAgZ2V0RW50aXR5OiBHZXRFbnRpdHksXG4gICAgZ2V0SW5kZXg6IHVua25vd24sXG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuYXJnc0tleSkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLnBrKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnJywgYXJncyk7XG4gICAgICAvLyBlbnN1cmUgdGhpcyBhY3R1YWxseSBoYXMgZW50aXR5IG9yIHdlIHNob3VsZG4ndCB0cnkgdG8gdXNlIGl0IGluIG91ciBxdWVyeVxuICAgICAgaWYgKGdldEVudGl0eSh0aGlzLmtleSwgaWQpKSByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgZGVjbGFyZSBjcmVhdGVJZlZhbGlkOiAodmFsdWU6IGFueSkgPT4gYW55IHwgdW5kZWZpbmVkO1xuXG4gIGRlbm9ybWFsaXplKFxuICAgIGlucHV0OiBhbnksXG4gICAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gICAgdW52aXNpdDogKHNjaGVtYTogYW55LCBpbnB1dDogYW55KSA9PiBhbnksXG4gICk6IFJldHVyblR5cGU8U1snZGVub3JtYWxpemUnXT4ge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5kZW5vcm1hbGl6ZShpbnB1dCwgYXJncywgdW52aXNpdCkgYXMgYW55O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25PcHRpb25zPFxuICBBcmdzIGV4dGVuZHMgYW55W10gPSBEZWZhdWx0QXJncyxcbiAgUGFyZW50ID0gYW55LFxuPiA9IChcbiAgfCB7XG4gICAgICAvKiogRGVmaW5lcyBsb29rdXBzIGZvciBDb2xsZWN0aW9ucyBuZXN0ZWQgaW4gb3RoZXIgc2NoZW1hcy5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9Db2xsZWN0aW9uI25lc3RLZXlcbiAgICAgICAqL1xuICAgICAgbmVzdEtleT86IChwYXJlbnQ6IFBhcmVudCwga2V5OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuICB8IHtcbiAgICAgIC8qKiBEZWZpbmVzIGxvb2t1cHMgdG9wLWxldmVsIENvbGxlY3Rpb25zIHVzaW5nIC4uLmFyZ3MuXG4gICAgICAgKlxuICAgICAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvQ29sbGVjdGlvbiNhcmdzS2V5XG4gICAgICAgKi9cbiAgICAgIGFyZ3NLZXk/OiAoLi4uYXJnczogQXJncykgPT4gUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4pICZcbiAgKFxuICAgIHwge1xuICAgICAgICAvKiogU2V0cyBhIGRlZmF1bHQgY3JlYXRlQ29sbGVjdGlvbkZpbHRlciBmb3IgYWRkV2l0aCgpLCBwdXNoLCB1bnNoaWZ0LCBhbmQgYXNzaWduLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9Db2xsZWN0aW9uI2NyZWF0ZWNvbGxlY3Rpb25maWx0ZXJcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI/OiAoXG4gICAgICAgICAgLi4uYXJnczogQXJnc1xuICAgICAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICAvKiogVGVzdCB0byBkZXRlcm1pbmUgd2hpY2ggYXJnIGtleXMgc2hvdWxkICoqbm90KiogYmUgdXNlZCBmb3IgZmlsdGVyaW5nIHJlc3VsdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb24jbm9uZmlsdGVyYXJndW1lbnRrZXlzXG4gICAgICAgICAqL1xuICAgICAgICBub25GaWx0ZXJBcmd1bWVudEtleXM/OiAoKGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IHN0cmluZ1tdIHwgUmVnRXhwO1xuICAgICAgfVxuICApO1xuXG5mdW5jdGlvbiBDcmVhdGVBZGRlcjxDIGV4dGVuZHMgQ29sbGVjdGlvblNjaGVtYTxhbnksIGFueT4sIFAgZXh0ZW5kcyBhbnlbXT4oXG4gIGNvbGxlY3Rpb246IEMsXG4gIG1lcmdlOiAoZXhpc3Rpbmc6IGFueSwgaW5jb21pbmc6IGFueSkgPT4gYW55W10sXG4gIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI/OiAoXG4gICAgLi4uYXJnczogUFxuICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuLFxuKSB7XG4gIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVzY3JpcHRvck1hcCA9IHtcbiAgICBtZXJnZTogeyB2YWx1ZTogbWVyZ2UgfSxcbiAgICBub3JtYWxpemU6IHsgdmFsdWU6IG5vcm1hbGl6ZUNyZWF0ZSB9LFxuICAgIHF1ZXJ5S2V5OiB7IHZhbHVlOiBxdWVyeUtleUNyZWF0ZSB9LFxuICB9O1xuICBpZiAoY29sbGVjdGlvbi5zY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgIHByb3BlcnRpZXMuY3JlYXRlSWZWYWxpZCA9IHsgdmFsdWU6IGNyZWF0ZUlmVmFsaWQgfTtcbiAgICBwcm9wZXJ0aWVzLmRlbm9ybWFsaXplID0geyB2YWx1ZTogZGVub3JtYWxpemUgfTtcbiAgfVxuICBpZiAoY3JlYXRlQ29sbGVjdGlvbkZpbHRlcikge1xuICAgIHByb3BlcnRpZXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciA9IHsgdmFsdWU6IGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgfTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShjb2xsZWN0aW9uLCBwcm9wZXJ0aWVzKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlLZXlDcmVhdGUoKSB7fVxuXG5mdW5jdGlvbiBub3JtYWxpemVDcmVhdGUoXG4gIHRoaXM6IENvbGxlY3Rpb25TY2hlbWE8YW55LCBhbnk+LFxuICBpbnB1dDogYW55LFxuICBwYXJlbnQ6IGFueSxcbiAga2V5OiBzdHJpbmcsXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB2aXNpdDogKCguLi5hcmdzOiBhbnkpID0+IGFueSkgJiB7IGNyZWF0aW5nPzogYm9vbGVhbiB9LFxuICBhZGRFbnRpdHk6IChzY2hlbWE6IGFueSwgcHJvY2Vzc2VkRW50aXR5OiBhbnksIGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gIGdldEVudGl0eTogR2V0RW50aXR5LFxuICBjaGVja0xvb3A6IENoZWNrTG9vcCxcbik6IGFueSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gbWVhbnMgJ3RoaXMgaXMgYSBjcmVhdGlvbiBlbmRwb2ludCcgLSBzbyByZWFsIFBLcyBhcmUgbm90IHJlcXVpcmVkXG4gICAgLy8gdGhpcyBpcyB1c2VkIGJ5IEVudGl0eS5ub3JtYWxpemUoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhbGxvdyBlbXB0eSBwa3NcbiAgICAvLyB2aXNpdCBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQgb24gZWFjaCBub3JtYWxpemUgY2FsbCBzbyB0aGlzIHdpbGwgc2FmZWx5IGJlIHJlc2V0XG4gICAgdmlzaXQuY3JlYXRpbmcgPSB0cnVlO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuc2NoZW1hLm5vcm1hbGl6ZShcbiAgICAhKHRoaXMuc2NoZW1hIGluc3RhbmNlb2YgQXJyYXlTY2hlbWEpIHx8IEFycmF5LmlzQXJyYXkoaW5wdXQpID9cbiAgICAgIGlucHV0XG4gICAgOiBbaW5wdXRdLFxuICAgIHBhcmVudCxcbiAgICBrZXksXG4gICAgYXJncyxcbiAgICB2aXNpdCxcbiAgICBhZGRFbnRpdHksXG4gICAgZ2V0RW50aXR5LFxuICAgIGNoZWNrTG9vcCxcbiAgKTtcbiAgLy8gcGFyZW50IGlzIGFyZ3Mgd2hlbiBub3QgbmVzdGVkXG4gIGNvbnN0IGZpbHRlckNvbGxlY3Rpb25zID0gKHRoaXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciBhcyBhbnkpKC4uLmFyZ3MpO1xuICAvLyBhZGQgdG8gYW55IGNvbGxlY3Rpb25zIHRoYXQgbWF0Y2ggdGhpc1xuICBjb25zdCBlbnRpdGllcyA9IGdldEVudGl0eSh0aGlzLmtleSk7XG4gIGlmIChlbnRpdGllcylcbiAgICBPYmplY3Qua2V5cyhlbnRpdGllcykuZm9yRWFjaChjb2xsZWN0aW9uUGsgPT4ge1xuICAgICAgaWYgKCFmaWx0ZXJDb2xsZWN0aW9ucyhKU09OLnBhcnNlKGNvbGxlY3Rpb25QaykpKSByZXR1cm47XG4gICAgICBhZGRFbnRpdHkodGhpcywgbm9ybWFsaXplZFZhbHVlLCBjb2xsZWN0aW9uUGspO1xuICAgIH0pO1xuICByZXR1cm4gbm9ybWFsaXplZFZhbHVlIGFzIGFueTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSWZWYWxpZCh2YWx1ZTogb2JqZWN0KTogYW55IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IHsgLi4udmFsdWUgfTtcbn1cblxuLy8gb25seSBmb3IgYXJyYXlzXG5mdW5jdGlvbiBkZW5vcm1hbGl6ZShcbiAgdGhpczogQ29sbGVjdGlvblNjaGVtYTxhbnksIGFueT4sXG4gIGlucHV0OiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB1bnZpc2l0OiAoc2NoZW1hOiBhbnksIGlucHV0OiBhbnkpID0+IGFueSxcbik6IGFueSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGlucHV0KSA/XG4gICAgICAodGhpcy5zY2hlbWEuZGVub3JtYWxpemUoaW5wdXQsIGFyZ3MsIHVudmlzaXQpIGFzIGFueSlcbiAgICA6ICh0aGlzLnNjaGVtYS5kZW5vcm1hbGl6ZShbaW5wdXRdLCBhcmdzLCB1bnZpc2l0KVswXSBhcyBhbnkpO1xufVxuLyoqXG4gKiBXZSBjYWxsIHNjaGVtYS5kZW5vcm1hbGl6ZSBhbmQgc2NoZW1hLm5vcm1hbGl6ZSBkaXJlY3RseVxuICogaW5zdGVhZCBvZiB2aXNpdC91bnZpc2l0IGFzIHdlIGFyZSBub3Qgb3BlcmF0aW5nIG9uIG5ldyBkYXRhXG4gKiBzbyB0aGUgYWRkaXRpb25hbCBjaGVja3MgaW4gdGhvc2UgbWV0aG9kcyBhcmUgcmVkdW5kYW50XG4gKi9cblxuZnVuY3Rpb24ga2V5RnJvbVNjaGVtYShzY2hlbWE6IFBvbHltb3JwaGljSW50ZXJmYWNlKSB7XG4gIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgIC8vIHRoaXMgYXNzdW1lcyB0aGUgZGVmaW5pdGlvbiBvZiBBcnJheS9WYWx1ZXMgaXMgRW50aXR5XG4gICAgcmV0dXJuIGBbJHtzY2hlbWEuc2NoZW1hS2V5KCl9XWA7XG4gIH0gZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVmFsdWVzKSB7XG4gICAgcmV0dXJuIGB7JHtzY2hlbWEuc2NoZW1hS2V5KCl9fWA7XG4gIH1cbiAgcmV0dXJuIGAoJHtzY2hlbWEuc2NoZW1hS2V5KCl9KWA7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG1CQUFtQixRQUFRLDBCQUEwQjtBQUU5RCxTQUFTQyxNQUFNLEVBQUVDLEtBQUssSUFBSUMsV0FBVyxRQUFRLGNBQWM7QUFHM0QsTUFBTUMsU0FBUyxHQUFHQSxDQUFDQyxRQUFhLEVBQUVDLFFBQWEsS0FBSztFQUNsRCxPQUFPLENBQUMsR0FBR0QsUUFBUSxFQUFFLEdBQUdDLFFBQVEsQ0FBQztBQUNuQyxDQUFDO0FBQ0QsTUFBTUMsWUFBWSxHQUFHQSxDQUFDRixRQUFhLEVBQUVDLFFBQWEsS0FBSztFQUNyRCxPQUFPLENBQUMsR0FBR0EsUUFBUSxFQUFFLEdBQUdELFFBQVEsQ0FBQztBQUNuQyxDQUFDO0FBQ0QsTUFBTUcsV0FBVyxHQUFHQSxDQUFDSCxRQUFhLEVBQUVDLFFBQWEsS0FBSztFQUNwRCxPQUFBRyxNQUFBLENBQUFDLE1BQUEsS0FBWUwsUUFBUSxFQUFLQyxRQUFRO0FBQ25DLENBQUM7QUFDRCxNQUFNSyxXQUFXLEdBQUlDLEtBQVUsSUFBSyxDQUFDLEdBQUdBLEtBQUssQ0FBQztBQUM5QyxNQUFNQyxXQUFXLEdBQUlELEtBQVUsSUFBQUgsTUFBQSxDQUFBQyxNQUFBLEtBQVdFLEtBQUssQ0FBRzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU1FLGdCQUFnQixDQUluQztFQW1CQUMsT0FBT0EsQ0FDTEMsS0FBNEMsRUFDNUNDLHNCQUV1RCxFQUMvQjtJQUN4QixPQUFPQyxXQUFXLENBQUMsSUFBSSxFQUFFRixLQUFLLEVBQUVDLHNCQUFzQixDQUFDO0VBQ3pEOztFQUVBO0VB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 |
@@ -102,3 +102,3 @@ import { consistentSerialize } from './consistentSerialize.js'; | ||
for (const key in obj) { | ||
if (typeof obj[key] !== 'string' && obj[key] !== undefined) obj[key] = `${obj[key]}`; | ||
if (['number', 'boolean'].includes(typeof obj[key])) obj[key] = `${obj[key]}`; | ||
} | ||
@@ -215,2 +215,2 @@ return consistentSerialize(obj); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25zaXN0ZW50U2VyaWFsaXplIiwiVmFsdWVzIiwiQXJyYXkiLCJBcnJheVNjaGVtYSIsInB1c2hNZXJnZSIsImV4aXN0aW5nIiwiaW5jb21pbmciLCJ1bnNoaWZ0TWVyZ2UiLCJ2YWx1ZXNNZXJnZSIsImNyZWF0ZUFycmF5IiwidmFsdWUiLCJjcmVhdGVWYWx1ZSIsIkNvbGxlY3Rpb25TY2hlbWEiLCJhZGRXaXRoIiwibWVyZ2UiLCJjcmVhdGVDb2xsZWN0aW9uRmlsdGVyIiwiQ3JlYXRlQWRkZXIiLCJhcmdzIiwiY29sbGVjdGlvbktleSIsIk9iamVjdCIsImVudHJpZXMiLCJldmVyeSIsImtleSIsIl9hcmdzJCIsIm5vbkZpbHRlckFyZ3VtZW50S2V5cyIsInN0YXJ0c1dpdGgiLCJjb25zdHJ1Y3RvciIsInNjaGVtYSIsIm9wdGlvbnMiLCJpc0FycmF5IiwiYXJnc0tleSIsInBhcmFtcyIsIm5lc3RLZXkiLCJrZXlGcm9tU2NoZW1hIiwiUmVnRXhwIiwidGVzdCIsImluY2x1ZGVzIiwiYmluZCIsImNyZWF0ZUlmVmFsaWQiLCJwdXNoIiwidW5zaGlmdCIsImFzc2lnbiIsImNhY2hlV2l0aCIsInRvU3RyaW5nIiwidG9KU09OIiwicGsiLCJwYXJlbnQiLCJvYmoiLCJ1bmRlZmluZWQiLCJub3JtYWxpemUiLCJpbnB1dCIsInZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwibm9ybWFsaXplZFZhbHVlIiwiaWQiLCJzaG91bGRSZW9yZGVyIiwiZXhpc3RpbmdNZXRhIiwiaW5jb21pbmdNZXRhIiwiZmV0Y2hlZEF0IiwibWVyZ2VXaXRoU3RvcmUiLCJtZXJnZU1ldGFXaXRoU3RvcmUiLCJxdWVyeUtleSIsImdldEluZGV4IiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiY29sbGVjdGlvbiIsInByb3BlcnRpZXMiLCJub3JtYWxpemVDcmVhdGUiLCJxdWVyeUtleUNyZWF0ZSIsImNyZWF0ZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNyZWF0aW5nIiwiZmlsdGVyQ29sbGVjdGlvbnMiLCJlbnRpdGllcyIsImtleXMiLCJmb3JFYWNoIiwiY29sbGVjdGlvblBrIiwiSlNPTiIsInBhcnNlIiwic2NoZW1hS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvQ29sbGVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zaXN0ZW50U2VyaWFsaXplIH0gZnJvbSAnLi9jb25zaXN0ZW50U2VyaWFsaXplLmpzJztcbmltcG9ydCB7IENoZWNrTG9vcCwgR2V0RW50aXR5LCBQb2x5bW9ycGhpY0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZXMsIEFycmF5IGFzIEFycmF5U2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRGVmYXVsdEFyZ3MsIEVudGl0eUludGVyZmFjZSB9IGZyb20gJy4uL3NjaGVtYVR5cGVzLmpzJztcblxuY29uc3QgcHVzaE1lcmdlID0gKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpID0+IHtcbiAgcmV0dXJuIFsuLi5leGlzdGluZywgLi4uaW5jb21pbmddO1xufTtcbmNvbnN0IHVuc2hpZnRNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiBbLi4uaW5jb21pbmcsIC4uLmV4aXN0aW5nXTtcbn07XG5jb25zdCB2YWx1ZXNNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiB7IC4uLmV4aXN0aW5nLCAuLi5pbmNvbWluZyB9O1xufTtcbmNvbnN0IGNyZWF0ZUFycmF5ID0gKHZhbHVlOiBhbnkpID0+IFsuLi52YWx1ZV07XG5jb25zdCBjcmVhdGVWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiAoeyAuLi52YWx1ZSB9KTtcblxuLyoqXG4gKiBFbnRpdGllcyBidXQgZm9yIEFycmF5cyBpbnN0ZWFkIG9mIGNsYXNzZXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblNjaGVtYTxcbiAgUyBleHRlbmRzIFBvbHltb3JwaGljSW50ZXJmYWNlID0gYW55LFxuICBBcmdzIGV4dGVuZHMgYW55W10gPSBEZWZhdWx0QXJncyxcbiAgUGFyZW50ID0gYW55LFxuPiB7XG4gIHByb3RlY3RlZCBkZWNsYXJlIG5lc3RLZXk6IChwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgcHJvdGVjdGVkIGRlY2xhcmUgYXJnc0tleT86ICguLi5hcmdzOiBhbnkpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgZGVjbGFyZSByZWFkb25seSBzY2hlbWE6IFM7XG5cbiAgZGVjbGFyZSByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBkZWNsYXJlIHB1c2g6IFMgZXh0ZW5kcyBBcnJheVNjaGVtYTxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgdW5zaGlmdDogUyBleHRlbmRzIEFycmF5U2NoZW1hPGFueT4gP1xuICAgIENvbGxlY3Rpb25TY2hlbWE8UywgQXJncywgUGFyZW50PlxuICA6IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGFzc2lnbjogUyBleHRlbmRzIFZhbHVlczxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGFkZFdpdGg8UCBleHRlbmRzIGFueVtdID0gQXJncz4oXG4gICAgbWVyZ2U6IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiBhbnksXG4gICAgY3JlYXRlQ29sbGVjdGlvbkZpbHRlcj86IChcbiAgICAgIC4uLmFyZ3M6IFBcbiAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuLFxuICApOiBDb2xsZWN0aW9uU2NoZW1hPFMsIFA+IHtcbiAgICByZXR1cm4gQ3JlYXRlQWRkZXIodGhpcywgbWVyZ2UsIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIpO1xuICB9XG5cbiAgLy8gdGhpcyBhZGRzIHRvIGFueSBsaXN0ICppbiBzdG9yZSogdGhhdCBoYXMgc2FtZSBtZW1iZXJzIGFzIHRoZSB1cmxQYXJhbXNcbiAgLy8gc28gZmV0Y2goY3JlYXRlLCB7IHVzZXJJZDogJ2JvYicsIGNvbXBsZXRlZDogdHJ1ZSB9LCBkYXRhKVxuICAvLyB3b3VsZCBwb3NzaWJseSBhZGQgdG8ge30sIHt1c2VySWQ6ICdib2InfSwge2NvbXBsZXRlZDogdHJ1ZX0sIHt1c2VySWQ6ICdib2InLCBjb21wbGV0ZWQ6IHRydWUgfSAtIGJ1dCBvbmx5IHRob3NlIGFscmVhZHkgaW4gdGhlIHN0b3JlXG4gIC8vIGl0IGlnbm9yZXMga2V5cyB0aGF0IHN0YXJ0IHdpdGggc29ydCBhcyB0aG9zZSBhcmUgcHJlc3VtZWQgdG8gbm90IGZpbHRlciByZXN1bHRzXG4gIHByb3RlY3RlZCBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICByZXR1cm4gKGNvbGxlY3Rpb25LZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+XG4gICAgICBPYmplY3QuZW50cmllcyhjb2xsZWN0aW9uS2V5KS5ldmVyeShcbiAgICAgICAgKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICB0aGlzLm5vbkZpbHRlckFyZ3VtZW50S2V5cyhrZXkpIHx8XG4gICAgICAgICAgLy8gc3RyaW5ncyBhcmUgY2Fub25pY2FsIGZvcm0uIFNlZSBwaygpIGFib3ZlIGZvciB2YWx1ZSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgIGAke2FyZ3NbMF1ba2V5XX1gID09PSB2YWx1ZSB8fFxuICAgICAgICAgIGAke2FyZ3NbMV0/LltrZXldfWAgPT09IHZhbHVlLFxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub25GaWx0ZXJBcmd1bWVudEtleXMoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoJ29yZGVyJyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY2hlbWE6IFMsIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uczxBcmdzLCBQYXJlbnQ+KSB7XG4gICAgdGhpcy5zY2hlbWEgPVxuICAgICAgQXJyYXkuaXNBcnJheShzY2hlbWEpID8gKG5ldyBBcnJheVNjaGVtYShzY2hlbWFbMF0pIGFzIGFueSkgOiBzY2hlbWE7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ25lc3RLZXknIGluIG9wdGlvbnMpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55KS5uZXN0S2V5ID0gb3B0aW9ucy5uZXN0S2V5O1xuICAgICAgfSBlbHNlIGlmICgnYXJnc0tleScgaW4gb3B0aW9ucykge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBvcHRpb25zLmFyZ3NLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtleSA9IGtleUZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgIGlmICgob3B0aW9ucyBhcyBhbnkpPy5ub25GaWx0ZXJBcmd1bWVudEtleXMpIHtcbiAgICAgIGNvbnN0IHsgbm9uRmlsdGVyQXJndW1lbnRLZXlzIH0gPSBvcHRpb25zIGFzIHtcbiAgICAgICAgbm9uRmlsdGVyQXJndW1lbnRLZXlzOiAoKGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IHN0cmluZ1tdIHwgUmVnRXhwO1xuICAgICAgfTtcbiAgICAgIGlmICh0eXBlb2Ygbm9uRmlsdGVyQXJndW1lbnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0gbm9uRmlsdGVyQXJndW1lbnRLZXlzO1xuICAgICAgfSBlbHNlIGlmIChub25GaWx0ZXJBcmd1bWVudEtleXMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgdGhpcy5ub25GaWx0ZXJBcmd1bWVudEtleXMgPSBrZXkgPT4gbm9uRmlsdGVyQXJndW1lbnRLZXlzLnRlc3Qoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0ga2V5ID0+IG5vbkZpbHRlckFyZ3VtZW50S2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKG9wdGlvbnMgYXMgYW55KT8uY3JlYXRlQ29sbGVjdGlvbkZpbHRlcilcbiAgICAgIC8vIFRPRE8oYnJlYWtpbmcpOiByZW5hbWUgdG8gZmlsdGVyQ29sbGVjdGlvbnNcbiAgICAgIHRoaXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciA9IChcbiAgICAgICAgb3B0aW9ucyBhcyBhbnkgYXMge1xuICAgICAgICAgIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI6IChcbiAgICAgICAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICAgICAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuO1xuICAgICAgICB9XG4gICAgICApLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIuYmluZCh0aGlzKSBhcyBhbnk7XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+PkNSRUFUSU9OPDw8PDw8PDw8PDw8PDxcbiAgICBpZiAodGhpcy5zY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlQXJyYXk7XG4gICAgICB0aGlzLnB1c2ggPSBDcmVhdGVBZGRlcih0aGlzLCBwdXNoTWVyZ2UpO1xuICAgICAgdGhpcy51bnNoaWZ0ID0gQ3JlYXRlQWRkZXIodGhpcywgdW5zaGlmdE1lcmdlKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFZhbHVlcykge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlVmFsdWU7XG4gICAgICB0aGlzLmFzc2lnbiA9IENyZWF0ZUFkZGVyKHRoaXMsIHZhbHVlc01lcmdlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FjaGVXaXRoKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLnNjaGVtYTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmtleTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEuc2NoZW1hLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICBwayh2YWx1ZTogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IGFueVtdKSB7XG4gICAgY29uc3Qgb2JqID1cbiAgICAgIHRoaXMuYXJnc0tleSA/IHRoaXMuYXJnc0tleSguLi5hcmdzKSA6IHRoaXMubmVzdEtleShwYXJlbnQsIGtleSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9ialtrZXldICE9PSAnc3RyaW5nJyAmJiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBvYmpba2V5XSA9IGAke29ialtrZXldfWA7XG4gICAgfVxuICAgIHJldHVybiBjb25zaXN0ZW50U2VyaWFsaXplKG9iaik7XG4gIH1cblxuICAvLyA+Pj4+Pj4+Pj4+Pj4+Pk5PUk1BTElaRTw8PDw8PDw8PDw8PDw8XG5cbiAgbm9ybWFsaXplKFxuICAgIGlucHV0OiBhbnksXG4gICAgcGFyZW50OiBQYXJlbnQsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgYXJnczogYW55W10sXG4gICAgdmlzaXQ6ICguLi5hcmdzOiBhbnkpID0+IGFueSxcbiAgICBhZGRFbnRpdHk6ICguLi5hcmdzOiBhbnkpID0+IGFueSxcbiAgICBnZXRFbnRpdHk6IGFueSxcbiAgICBjaGVja0xvb3A6IGFueSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLnNjaGVtYS5ub3JtYWxpemUoXG4gICAgICBpbnB1dCxcbiAgICAgIHBhcmVudCxcbiAgICAgIGtleSxcbiAgICAgIGFyZ3MsXG4gICAgICB2aXNpdCxcbiAgICAgIGFkZEVudGl0eSxcbiAgICAgIGdldEVudGl0eSxcbiAgICAgIGNoZWNrTG9vcCxcbiAgICApO1xuICAgIGNvbnN0IGlkID0gdGhpcy5wayhub3JtYWxpemVkVmFsdWUsIHBhcmVudCwga2V5LCBhcmdzKTtcblxuICAgIGFkZEVudGl0eSh0aGlzLCBub3JtYWxpemVkVmFsdWUsIGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvLyBhbHdheXMgcmVwbGFjZVxuICBtZXJnZShleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSB7XG4gICAgcmV0dXJuIGluY29taW5nO1xuICB9XG5cbiAgc2hvdWxkUmVvcmRlcihcbiAgICBleGlzdGluZ01ldGE6IHsgZGF0ZTogbnVtYmVyOyBmZXRjaGVkQXQ6IG51bWJlciB9LFxuICAgIGluY29taW5nTWV0YTogeyBkYXRlOiBudW1iZXI7IGZldGNoZWRBdDogbnVtYmVyIH0sXG4gICAgZXhpc3Rpbmc6IGFueSxcbiAgICBpbmNvbWluZzogYW55LFxuICApIHtcbiAgICByZXR1cm4gaW5jb21pbmdNZXRhLmZldGNoZWRBdCA8IGV4aXN0aW5nTWV0YS5mZXRjaGVkQXQ7XG4gIH1cblxuICBtZXJnZVdpdGhTdG9yZShcbiAgICBleGlzdGluZ01ldGE6IHtcbiAgICAgIGRhdGU6IG51bWJlcjtcbiAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgIH0sXG4gICAgaW5jb21pbmdNZXRhOiB7IGRhdGU6IG51bWJlcjsgZmV0Y2hlZEF0OiBudW1iZXIgfSxcbiAgICBleGlzdGluZzogYW55LFxuICAgIGluY29taW5nOiBhbnksXG4gICkge1xuICAgIHJldHVybiB0aGlzLnNob3VsZFJlb3JkZXIoZXhpc3RpbmdNZXRhLCBpbmNvbWluZ01ldGEsIGV4aXN0aW5nLCBpbmNvbWluZykgP1xuICAgICAgICB0aGlzLm1lcmdlKGluY29taW5nLCBleGlzdGluZylcbiAgICAgIDogdGhpcy5tZXJnZShleGlzdGluZywgaW5jb21pbmcpO1xuICB9XG5cbiAgbWVyZ2VNZXRhV2l0aFN0b3JlKFxuICAgIGV4aXN0aW5nTWV0YToge1xuICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICBkYXRlOiBudW1iZXI7XG4gICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICB9LFxuICAgIGluY29taW5nTWV0YTogeyBmZXRjaGVkQXQ6IG51bWJlcjsgZGF0ZTogbnVtYmVyOyBleHBpcmVzQXQ6IG51bWJlciB9LFxuICAgIGV4aXN0aW5nOiBhbnksXG4gICAgaW5jb21pbmc6IGFueSxcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVvcmRlcihleGlzdGluZ01ldGEsIGluY29taW5nTWV0YSwgZXhpc3RpbmcsIGluY29taW5nKSA/XG4gICAgICAgIGV4aXN0aW5nTWV0YVxuICAgICAgOiBpbmNvbWluZ01ldGE7XG4gIH1cblxuICAvLyA+Pj4+Pj4+Pj4+Pj4+PkRFTk9STUFMSVpFPDw8PDw8PDw8PDw8PDxcblxuICBxdWVyeUtleShcbiAgICBhcmdzOiBBcmdzLFxuICAgIHF1ZXJ5S2V5OiB1bmtub3duLFxuICAgIGdldEVudGl0eTogR2V0RW50aXR5LFxuICAgIGdldEluZGV4OiB1bmtub3duLFxuICApOiBhbnkge1xuICAgIGlmICh0aGlzLmFyZ3NLZXkpIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5wayh1bmRlZmluZWQsIHVuZGVmaW5lZCwgJycsIGFyZ3MpO1xuICAgICAgLy8gZW5zdXJlIHRoaXMgYWN0dWFsbHkgaGFzIGVudGl0eSBvciB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHVzZSBpdCBpbiBvdXIgcXVlcnlcbiAgICAgIGlmIChnZXRFbnRpdHkodGhpcy5rZXksIGlkKSkgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGRlY2xhcmUgY3JlYXRlSWZWYWxpZDogKHZhbHVlOiBhbnkpID0+IGFueSB8IHVuZGVmaW5lZDtcblxuICBkZW5vcm1hbGl6ZShcbiAgICBpbnB1dDogYW55LFxuICAgIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICAgIHVudmlzaXQ6IChzY2hlbWE6IGFueSwgaW5wdXQ6IGFueSkgPT4gYW55LFxuICApOiBSZXR1cm5UeXBlPFNbJ2Rlbm9ybWFsaXplJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuZGVub3JtYWxpemUoaW5wdXQsIGFyZ3MsIHVudmlzaXQpIGFzIGFueTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3B0aW9uczxcbiAgQXJncyBleHRlbmRzIGFueVtdID0gRGVmYXVsdEFyZ3MsXG4gIFBhcmVudCA9IGFueSxcbj4gPSAoXG4gIHwge1xuICAgICAgLyoqIERlZmluZXMgbG9va3VwcyBmb3IgQ29sbGVjdGlvbnMgbmVzdGVkIGluIG90aGVyIHNjaGVtYXMuXG4gICAgICAgKlxuICAgICAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvQ29sbGVjdGlvbiNuZXN0S2V5XG4gICAgICAgKi9cbiAgICAgIG5lc3RLZXk/OiAocGFyZW50OiBQYXJlbnQsIGtleTogc3RyaW5nKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH1cbiAgfCB7XG4gICAgICAvKiogRGVmaW5lcyBsb29rdXBzIHRvcC1sZXZlbCBDb2xsZWN0aW9ucyB1c2luZyAuLi5hcmdzLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb24jYXJnc0tleVxuICAgICAgICovXG4gICAgICBhcmdzS2V5PzogKC4uLmFyZ3M6IEFyZ3MpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuKSAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgLyoqIFNldHMgYSBkZWZhdWx0IGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgZm9yIGFkZFdpdGgoKSwgcHVzaCwgdW5zaGlmdCwgYW5kIGFzc2lnbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvQ29sbGVjdGlvbiNjcmVhdGVjb2xsZWN0aW9uZmlsdGVyXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyPzogKFxuICAgICAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICAgICAgKSA9PiAoY29sbGVjdGlvbktleTogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4gYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgLyoqIFRlc3QgdG8gZGV0ZXJtaW5lIHdoaWNoIGFyZyBrZXlzIHNob3VsZCAqKm5vdCoqIGJlIHVzZWQgZm9yIGZpbHRlcmluZyByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9Db2xsZWN0aW9uI25vbmZpbHRlcmFyZ3VtZW50a2V5c1xuICAgICAgICAgKi9cbiAgICAgICAgbm9uRmlsdGVyQXJndW1lbnRLZXlzPzogKChrZXk6IHN0cmluZykgPT4gYm9vbGVhbikgfCBzdHJpbmdbXSB8IFJlZ0V4cDtcbiAgICAgIH1cbiAgKTtcblxuZnVuY3Rpb24gQ3JlYXRlQWRkZXI8QyBleHRlbmRzIENvbGxlY3Rpb25TY2hlbWE8YW55LCBhbnk+LCBQIGV4dGVuZHMgYW55W10+KFxuICBjb2xsZWN0aW9uOiBDLFxuICBtZXJnZTogKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpID0+IGFueVtdLFxuICBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyPzogKFxuICAgIC4uLmFyZ3M6IFBcbiAgKSA9PiAoY29sbGVjdGlvbktleTogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4gYm9vbGVhbixcbikge1xuICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlc2NyaXB0b3JNYXAgPSB7XG4gICAgbWVyZ2U6IHsgdmFsdWU6IG1lcmdlIH0sXG4gICAgbm9ybWFsaXplOiB7IHZhbHVlOiBub3JtYWxpemVDcmVhdGUgfSxcbiAgICBxdWVyeUtleTogeyB2YWx1ZTogcXVlcnlLZXlDcmVhdGUgfSxcbiAgfTtcbiAgaWYgKGNvbGxlY3Rpb24uc2NoZW1hIGluc3RhbmNlb2YgQXJyYXlTY2hlbWEpIHtcbiAgICBwcm9wZXJ0aWVzLmNyZWF0ZUlmVmFsaWQgPSB7IHZhbHVlOiBjcmVhdGVJZlZhbGlkIH07XG4gICAgcHJvcGVydGllcy5kZW5vcm1hbGl6ZSA9IHsgdmFsdWU6IGRlbm9ybWFsaXplIH07XG4gIH1cbiAgaWYgKGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIpIHtcbiAgICBwcm9wZXJ0aWVzLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgPSB7IHZhbHVlOiBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyIH07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoY29sbGVjdGlvbiwgcHJvcGVydGllcyk7XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5S2V5Q3JlYXRlKCkge31cblxuZnVuY3Rpb24gbm9ybWFsaXplQ3JlYXRlKFxuICB0aGlzOiBDb2xsZWN0aW9uU2NoZW1hPGFueSwgYW55PixcbiAgaW5wdXQ6IGFueSxcbiAgcGFyZW50OiBhbnksXG4gIGtleTogc3RyaW5nLFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdmlzaXQ6ICgoLi4uYXJnczogYW55KSA9PiBhbnkpICYgeyBjcmVhdGluZz86IGJvb2xlYW4gfSxcbiAgYWRkRW50aXR5OiAoc2NoZW1hOiBhbnksIHByb2Nlc3NlZEVudGl0eTogYW55LCBpZDogc3RyaW5nKSA9PiB2b2lkLFxuICBnZXRFbnRpdHk6IEdldEVudGl0eSxcbiAgY2hlY2tMb29wOiBDaGVja0xvb3AsXG4pOiBhbnkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIG1lYW5zICd0aGlzIGlzIGEgY3JlYXRpb24gZW5kcG9pbnQnIC0gc28gcmVhbCBQS3MgYXJlIG5vdCByZXF1aXJlZFxuICAgIC8vIHRoaXMgaXMgdXNlZCBieSBFbnRpdHkubm9ybWFsaXplKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYWxsb3cgZW1wdHkgcGtzXG4gICAgLy8gdmlzaXQgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIG9uIGVhY2ggbm9ybWFsaXplIGNhbGwgc28gdGhpcyB3aWxsIHNhZmVseSBiZSByZXNldFxuICAgIHZpc2l0LmNyZWF0aW5nID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLnNjaGVtYS5ub3JtYWxpemUoXG4gICAgISh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIEFycmF5U2NoZW1hKSB8fCBBcnJheS5pc0FycmF5KGlucHV0KSA/XG4gICAgICBpbnB1dFxuICAgIDogW2lucHV0XSxcbiAgICBwYXJlbnQsXG4gICAga2V5LFxuICAgIGFyZ3MsXG4gICAgdmlzaXQsXG4gICAgYWRkRW50aXR5LFxuICAgIGdldEVudGl0eSxcbiAgICBjaGVja0xvb3AsXG4gICk7XG4gIC8vIHBhcmVudCBpcyBhcmdzIHdoZW4gbm90IG5lc3RlZFxuICBjb25zdCBmaWx0ZXJDb2xsZWN0aW9ucyA9ICh0aGlzLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgYXMgYW55KSguLi5hcmdzKTtcbiAgLy8gYWRkIHRvIGFueSBjb2xsZWN0aW9ucyB0aGF0IG1hdGNoIHRoaXNcbiAgY29uc3QgZW50aXRpZXMgPSBnZXRFbnRpdHkodGhpcy5rZXkpO1xuICBpZiAoZW50aXRpZXMpXG4gICAgT2JqZWN0LmtleXMoZW50aXRpZXMpLmZvckVhY2goY29sbGVjdGlvblBrID0+IHtcbiAgICAgIGlmICghZmlsdGVyQ29sbGVjdGlvbnMoSlNPTi5wYXJzZShjb2xsZWN0aW9uUGspKSkgcmV0dXJuO1xuICAgICAgYWRkRW50aXR5KHRoaXMsIG5vcm1hbGl6ZWRWYWx1ZSwgY29sbGVjdGlvblBrKTtcbiAgICB9KTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZSBhcyBhbnk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlmVmFsaWQodmFsdWU6IG9iamVjdCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB7IC4uLnZhbHVlIH07XG59XG5cbi8vIG9ubHkgZm9yIGFycmF5c1xuZnVuY3Rpb24gZGVub3JtYWxpemUoXG4gIHRoaXM6IENvbGxlY3Rpb25TY2hlbWE8YW55LCBhbnk+LFxuICBpbnB1dDogYW55LFxuICBhcmdzOiByZWFkb25seSBhbnlbXSxcbiAgdW52aXNpdDogKHNjaGVtYTogYW55LCBpbnB1dDogYW55KSA9PiBhbnksXG4pOiBhbnkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbnB1dCkgP1xuICAgICAgKHRoaXMuc2NoZW1hLmRlbm9ybWFsaXplKGlucHV0LCBhcmdzLCB1bnZpc2l0KSBhcyBhbnkpXG4gICAgOiAodGhpcy5zY2hlbWEuZGVub3JtYWxpemUoW2lucHV0XSwgYXJncywgdW52aXNpdClbMF0gYXMgYW55KTtcbn1cbi8qKlxuICogV2UgY2FsbCBzY2hlbWEuZGVub3JtYWxpemUgYW5kIHNjaGVtYS5ub3JtYWxpemUgZGlyZWN0bHlcbiAqIGluc3RlYWQgb2YgdmlzaXQvdW52aXNpdCBhcyB3ZSBhcmUgbm90IG9wZXJhdGluZyBvbiBuZXcgZGF0YVxuICogc28gdGhlIGFkZGl0aW9uYWwgY2hlY2tzIGluIHRob3NlIG1ldGhvZHMgYXJlIHJlZHVuZGFudFxuICovXG5cbmZ1bmN0aW9uIGtleUZyb21TY2hlbWEoc2NoZW1hOiBQb2x5bW9ycGhpY0ludGVyZmFjZSkge1xuICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXJyYXlTY2hlbWEpIHtcbiAgICAvLyB0aGlzIGFzc3VtZXMgdGhlIGRlZmluaXRpb24gb2YgQXJyYXkvVmFsdWVzIGlzIEVudGl0eVxuICAgIHJldHVybiBgWyR7c2NoZW1hLnNjaGVtYUtleSgpfV1gO1xuICB9IGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFZhbHVlcykge1xuICAgIHJldHVybiBgeyR7c2NoZW1hLnNjaGVtYUtleSgpfX1gO1xuICB9XG4gIHJldHVybiBgKCR7c2NoZW1hLnNjaGVtYUtleSgpfSlgO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxtQkFBbUIsUUFBUSwwQkFBMEI7QUFFOUQsU0FBU0MsTUFBTSxFQUFFQyxLQUFLLElBQUlDLFdBQVcsUUFBUSxjQUFjO0FBRzNELE1BQU1DLFNBQVMsR0FBR0EsQ0FBQ0MsUUFBYSxFQUFFQyxRQUFhLEtBQUs7RUFDbEQsT0FBTyxDQUFDLEdBQUdELFFBQVEsRUFBRSxHQUFHQyxRQUFRLENBQUM7QUFDbkMsQ0FBQztBQUNELE1BQU1DLFlBQVksR0FBR0EsQ0FBQ0YsUUFBYSxFQUFFQyxRQUFhLEtBQUs7RUFDckQsT0FBTyxDQUFDLEdBQUdBLFFBQVEsRUFBRSxHQUFHRCxRQUFRLENBQUM7QUFDbkMsQ0FBQztBQUNELE1BQU1HLFdBQVcsR0FBR0EsQ0FBQ0gsUUFBYSxFQUFFQyxRQUFhLEtBQUs7RUFDcEQsT0FBTztJQUFFLEdBQUdELFFBQVE7SUFBRSxHQUFHQztFQUFTLENBQUM7QUFDckMsQ0FBQztBQUNELE1BQU1HLFdBQVcsR0FBSUMsS0FBVSxJQUFLLENBQUMsR0FBR0EsS0FBSyxDQUFDO0FBQzlDLE1BQU1DLFdBQVcsR0FBSUQsS0FBVSxLQUFNO0VBQUUsR0FBR0E7QUFBTSxDQUFDLENBQUM7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNRSxnQkFBZ0IsQ0FJbkM7RUFtQkFDLE9BQU9BLENBQ0xDLEtBQTRDLEVBQzVDQyxzQkFFdUQsRUFDL0I7SUFDeEIsT0FBT0MsV0FBVyxDQUFDLElBQUksRUFBRUYsS0FBSyxFQUFFQyxzQkFBc0IsQ0FBQztFQUN6RDs7RUFFQTtFQUNB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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25zaXN0ZW50U2VyaWFsaXplIiwiVmFsdWVzIiwiQXJyYXkiLCJBcnJheVNjaGVtYSIsInB1c2hNZXJnZSIsImV4aXN0aW5nIiwiaW5jb21pbmciLCJ1bnNoaWZ0TWVyZ2UiLCJ2YWx1ZXNNZXJnZSIsImNyZWF0ZUFycmF5IiwidmFsdWUiLCJjcmVhdGVWYWx1ZSIsIkNvbGxlY3Rpb25TY2hlbWEiLCJhZGRXaXRoIiwibWVyZ2UiLCJjcmVhdGVDb2xsZWN0aW9uRmlsdGVyIiwiQ3JlYXRlQWRkZXIiLCJhcmdzIiwiY29sbGVjdGlvbktleSIsIk9iamVjdCIsImVudHJpZXMiLCJldmVyeSIsImtleSIsIl9hcmdzJCIsIm5vbkZpbHRlckFyZ3VtZW50S2V5cyIsInN0YXJ0c1dpdGgiLCJjb25zdHJ1Y3RvciIsInNjaGVtYSIsIm9wdGlvbnMiLCJpc0FycmF5IiwiYXJnc0tleSIsInBhcmFtcyIsIm5lc3RLZXkiLCJrZXlGcm9tU2NoZW1hIiwiUmVnRXhwIiwidGVzdCIsImluY2x1ZGVzIiwiYmluZCIsImNyZWF0ZUlmVmFsaWQiLCJwdXNoIiwidW5zaGlmdCIsImFzc2lnbiIsImNhY2hlV2l0aCIsInRvU3RyaW5nIiwidG9KU09OIiwicGsiLCJwYXJlbnQiLCJvYmoiLCJub3JtYWxpemUiLCJpbnB1dCIsInZpc2l0IiwiYWRkRW50aXR5IiwiZ2V0RW50aXR5IiwiY2hlY2tMb29wIiwibm9ybWFsaXplZFZhbHVlIiwiaWQiLCJzaG91bGRSZW9yZGVyIiwiZXhpc3RpbmdNZXRhIiwiaW5jb21pbmdNZXRhIiwiZmV0Y2hlZEF0IiwibWVyZ2VXaXRoU3RvcmUiLCJtZXJnZU1ldGFXaXRoU3RvcmUiLCJxdWVyeUtleSIsImdldEluZGV4IiwidW5kZWZpbmVkIiwiZGVub3JtYWxpemUiLCJ1bnZpc2l0IiwiY29sbGVjdGlvbiIsInByb3BlcnRpZXMiLCJub3JtYWxpemVDcmVhdGUiLCJxdWVyeUtleUNyZWF0ZSIsImNyZWF0ZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNyZWF0aW5nIiwiZmlsdGVyQ29sbGVjdGlvbnMiLCJlbnRpdGllcyIsImtleXMiLCJmb3JFYWNoIiwiY29sbGVjdGlvblBrIiwiSlNPTiIsInBhcnNlIiwic2NoZW1hS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvQ29sbGVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zaXN0ZW50U2VyaWFsaXplIH0gZnJvbSAnLi9jb25zaXN0ZW50U2VyaWFsaXplLmpzJztcbmltcG9ydCB7IENoZWNrTG9vcCwgR2V0RW50aXR5LCBQb2x5bW9ycGhpY0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZXMsIEFycmF5IGFzIEFycmF5U2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRGVmYXVsdEFyZ3MsIEVudGl0eUludGVyZmFjZSB9IGZyb20gJy4uL3NjaGVtYVR5cGVzLmpzJztcblxuY29uc3QgcHVzaE1lcmdlID0gKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpID0+IHtcbiAgcmV0dXJuIFsuLi5leGlzdGluZywgLi4uaW5jb21pbmddO1xufTtcbmNvbnN0IHVuc2hpZnRNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiBbLi4uaW5jb21pbmcsIC4uLmV4aXN0aW5nXTtcbn07XG5jb25zdCB2YWx1ZXNNZXJnZSA9IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiB7XG4gIHJldHVybiB7IC4uLmV4aXN0aW5nLCAuLi5pbmNvbWluZyB9O1xufTtcbmNvbnN0IGNyZWF0ZUFycmF5ID0gKHZhbHVlOiBhbnkpID0+IFsuLi52YWx1ZV07XG5jb25zdCBjcmVhdGVWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiAoeyAuLi52YWx1ZSB9KTtcblxuLyoqXG4gKiBFbnRpdGllcyBidXQgZm9yIEFycmF5cyBpbnN0ZWFkIG9mIGNsYXNzZXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblNjaGVtYTxcbiAgUyBleHRlbmRzIFBvbHltb3JwaGljSW50ZXJmYWNlID0gYW55LFxuICBBcmdzIGV4dGVuZHMgYW55W10gPSBEZWZhdWx0QXJncyxcbiAgUGFyZW50ID0gYW55LFxuPiB7XG4gIHByb3RlY3RlZCBkZWNsYXJlIG5lc3RLZXk6IChwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgcHJvdGVjdGVkIGRlY2xhcmUgYXJnc0tleT86ICguLi5hcmdzOiBhbnkpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgZGVjbGFyZSByZWFkb25seSBzY2hlbWE6IFM7XG5cbiAgZGVjbGFyZSByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBkZWNsYXJlIHB1c2g6IFMgZXh0ZW5kcyBBcnJheVNjaGVtYTxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgdW5zaGlmdDogUyBleHRlbmRzIEFycmF5U2NoZW1hPGFueT4gP1xuICAgIENvbGxlY3Rpb25TY2hlbWE8UywgQXJncywgUGFyZW50PlxuICA6IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGFzc2lnbjogUyBleHRlbmRzIFZhbHVlczxhbnk+ID8gQ29sbGVjdGlvblNjaGVtYTxTLCBBcmdzLCBQYXJlbnQ+XG4gIDogdW5kZWZpbmVkO1xuXG4gIGFkZFdpdGg8UCBleHRlbmRzIGFueVtdID0gQXJncz4oXG4gICAgbWVyZ2U6IChleGlzdGluZzogYW55LCBpbmNvbWluZzogYW55KSA9PiBhbnksXG4gICAgY3JlYXRlQ29sbGVjdGlvbkZpbHRlcj86IChcbiAgICAgIC4uLmFyZ3M6IFBcbiAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuLFxuICApOiBDb2xsZWN0aW9uU2NoZW1hPFMsIFA+IHtcbiAgICByZXR1cm4gQ3JlYXRlQWRkZXIodGhpcywgbWVyZ2UsIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIpO1xuICB9XG5cbiAgLy8gdGhpcyBhZGRzIHRvIGFueSBsaXN0ICppbiBzdG9yZSogdGhhdCBoYXMgc2FtZSBtZW1iZXJzIGFzIHRoZSB1cmxQYXJhbXNcbiAgLy8gc28gZmV0Y2goY3JlYXRlLCB7IHVzZXJJZDogJ2JvYicsIGNvbXBsZXRlZDogdHJ1ZSB9LCBkYXRhKVxuICAvLyB3b3VsZCBwb3NzaWJseSBhZGQgdG8ge30sIHt1c2VySWQ6ICdib2InfSwge2NvbXBsZXRlZDogdHJ1ZX0sIHt1c2VySWQ6ICdib2InLCBjb21wbGV0ZWQ6IHRydWUgfSAtIGJ1dCBvbmx5IHRob3NlIGFscmVhZHkgaW4gdGhlIHN0b3JlXG4gIC8vIGl0IGlnbm9yZXMga2V5cyB0aGF0IHN0YXJ0IHdpdGggc29ydCBhcyB0aG9zZSBhcmUgcHJlc3VtZWQgdG8gbm90IGZpbHRlciByZXN1bHRzXG4gIHByb3RlY3RlZCBjcmVhdGVDb2xsZWN0aW9uRmlsdGVyKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICByZXR1cm4gKGNvbGxlY3Rpb25LZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+XG4gICAgICBPYmplY3QuZW50cmllcyhjb2xsZWN0aW9uS2V5KS5ldmVyeShcbiAgICAgICAgKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgICB0aGlzLm5vbkZpbHRlckFyZ3VtZW50S2V5cyhrZXkpIHx8XG4gICAgICAgICAgLy8gc3RyaW5ncyBhcmUgY2Fub25pY2FsIGZvcm0uIFNlZSBwaygpIGFib3ZlIGZvciB2YWx1ZSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgIGAke2FyZ3NbMF1ba2V5XX1gID09PSB2YWx1ZSB8fFxuICAgICAgICAgIGAke2FyZ3NbMV0/LltrZXldfWAgPT09IHZhbHVlLFxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub25GaWx0ZXJBcmd1bWVudEtleXMoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoJ29yZGVyJyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY2hlbWE6IFMsIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uczxBcmdzLCBQYXJlbnQ+KSB7XG4gICAgdGhpcy5zY2hlbWEgPVxuICAgICAgQXJyYXkuaXNBcnJheShzY2hlbWEpID8gKG5ldyBBcnJheVNjaGVtYShzY2hlbWFbMF0pIGFzIGFueSkgOiBzY2hlbWE7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ25lc3RLZXknIGluIG9wdGlvbnMpIHtcbiAgICAgICAgKHRoaXMgYXMgYW55KS5uZXN0S2V5ID0gb3B0aW9ucy5uZXN0S2V5O1xuICAgICAgfSBlbHNlIGlmICgnYXJnc0tleScgaW4gb3B0aW9ucykge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBvcHRpb25zLmFyZ3NLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFyZ3NLZXkgPSBwYXJhbXMgPT4gKHsgLi4ucGFyYW1zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtleSA9IGtleUZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgIGlmICgob3B0aW9ucyBhcyBhbnkpPy5ub25GaWx0ZXJBcmd1bWVudEtleXMpIHtcbiAgICAgIGNvbnN0IHsgbm9uRmlsdGVyQXJndW1lbnRLZXlzIH0gPSBvcHRpb25zIGFzIHtcbiAgICAgICAgbm9uRmlsdGVyQXJndW1lbnRLZXlzOiAoKGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IHN0cmluZ1tdIHwgUmVnRXhwO1xuICAgICAgfTtcbiAgICAgIGlmICh0eXBlb2Ygbm9uRmlsdGVyQXJndW1lbnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0gbm9uRmlsdGVyQXJndW1lbnRLZXlzO1xuICAgICAgfSBlbHNlIGlmIChub25GaWx0ZXJBcmd1bWVudEtleXMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgdGhpcy5ub25GaWx0ZXJBcmd1bWVudEtleXMgPSBrZXkgPT4gbm9uRmlsdGVyQXJndW1lbnRLZXlzLnRlc3Qoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm9uRmlsdGVyQXJndW1lbnRLZXlzID0ga2V5ID0+IG5vbkZpbHRlckFyZ3VtZW50S2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKG9wdGlvbnMgYXMgYW55KT8uY3JlYXRlQ29sbGVjdGlvbkZpbHRlcilcbiAgICAgIC8vIFRPRE8oYnJlYWtpbmcpOiByZW5hbWUgdG8gZmlsdGVyQ29sbGVjdGlvbnNcbiAgICAgIHRoaXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciA9IChcbiAgICAgICAgb3B0aW9ucyBhcyBhbnkgYXMge1xuICAgICAgICAgIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI6IChcbiAgICAgICAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICAgICAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuO1xuICAgICAgICB9XG4gICAgICApLmNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIuYmluZCh0aGlzKSBhcyBhbnk7XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+PkNSRUFUSU9OPDw8PDw8PDw8PDw8PDxcbiAgICBpZiAodGhpcy5zY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlQXJyYXk7XG4gICAgICB0aGlzLnB1c2ggPSBDcmVhdGVBZGRlcih0aGlzLCBwdXNoTWVyZ2UpO1xuICAgICAgdGhpcy51bnNoaWZ0ID0gQ3JlYXRlQWRkZXIodGhpcywgdW5zaGlmdE1lcmdlKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFZhbHVlcykge1xuICAgICAgdGhpcy5jcmVhdGVJZlZhbGlkID0gY3JlYXRlVmFsdWU7XG4gICAgICB0aGlzLmFzc2lnbiA9IENyZWF0ZUFkZGVyKHRoaXMsIHZhbHVlc01lcmdlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FjaGVXaXRoKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLnNjaGVtYTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmtleTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEuc2NoZW1hLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICBwayh2YWx1ZTogYW55LCBwYXJlbnQ6IGFueSwga2V5OiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IGFueVtdKSB7XG4gICAgY29uc3Qgb2JqID1cbiAgICAgIHRoaXMuYXJnc0tleSA/IHRoaXMuYXJnc0tleSguLi5hcmdzKSA6IHRoaXMubmVzdEtleShwYXJlbnQsIGtleSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoWydudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGVvZiBvYmpba2V5XSkpXG4gICAgICAgIG9ialtrZXldID0gYCR7b2JqW2tleV19YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnNpc3RlbnRTZXJpYWxpemUob2JqKTtcbiAgfVxuXG4gIC8vID4+Pj4+Pj4+Pj4+Pj4+Tk9STUFMSVpFPDw8PDw8PDw8PDw8PDxcblxuICBub3JtYWxpemUoXG4gICAgaW5wdXQ6IGFueSxcbiAgICBwYXJlbnQ6IFBhcmVudCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBhcmdzOiBhbnlbXSxcbiAgICB2aXNpdDogKC4uLmFyZ3M6IGFueSkgPT4gYW55LFxuICAgIGFkZEVudGl0eTogKC4uLmFyZ3M6IGFueSkgPT4gYW55LFxuICAgIGdldEVudGl0eTogYW55LFxuICAgIGNoZWNrTG9vcDogYW55LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuc2NoZW1hLm5vcm1hbGl6ZShcbiAgICAgIGlucHV0LFxuICAgICAgcGFyZW50LFxuICAgICAga2V5LFxuICAgICAgYXJncyxcbiAgICAgIHZpc2l0LFxuICAgICAgYWRkRW50aXR5LFxuICAgICAgZ2V0RW50aXR5LFxuICAgICAgY2hlY2tMb29wLFxuICAgICk7XG4gICAgY29uc3QgaWQgPSB0aGlzLnBrKG5vcm1hbGl6ZWRWYWx1ZSwgcGFyZW50LCBrZXksIGFyZ3MpO1xuXG4gICAgYWRkRW50aXR5KHRoaXMsIG5vcm1hbGl6ZWRWYWx1ZSwgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8vIGFsd2F5cyByZXBsYWNlXG4gIG1lcmdlKGV4aXN0aW5nOiBhbnksIGluY29taW5nOiBhbnkpIHtcbiAgICByZXR1cm4gaW5jb21pbmc7XG4gIH1cblxuICBzaG91bGRSZW9yZGVyKFxuICAgIGV4aXN0aW5nTWV0YTogeyBkYXRlOiBudW1iZXI7IGZldGNoZWRBdDogbnVtYmVyIH0sXG4gICAgaW5jb21pbmdNZXRhOiB7IGRhdGU6IG51bWJlcjsgZmV0Y2hlZEF0OiBudW1iZXIgfSxcbiAgICBleGlzdGluZzogYW55LFxuICAgIGluY29taW5nOiBhbnksXG4gICkge1xuICAgIHJldHVybiBpbmNvbWluZ01ldGEuZmV0Y2hlZEF0IDwgZXhpc3RpbmdNZXRhLmZldGNoZWRBdDtcbiAgfVxuXG4gIG1lcmdlV2l0aFN0b3JlKFxuICAgIGV4aXN0aW5nTWV0YToge1xuICAgICAgZGF0ZTogbnVtYmVyO1xuICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgfSxcbiAgICBpbmNvbWluZ01ldGE6IHsgZGF0ZTogbnVtYmVyOyBmZXRjaGVkQXQ6IG51bWJlciB9LFxuICAgIGV4aXN0aW5nOiBhbnksXG4gICAgaW5jb21pbmc6IGFueSxcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVvcmRlcihleGlzdGluZ01ldGEsIGluY29taW5nTWV0YSwgZXhpc3RpbmcsIGluY29taW5nKSA/XG4gICAgICAgIHRoaXMubWVyZ2UoaW5jb21pbmcsIGV4aXN0aW5nKVxuICAgICAgOiB0aGlzLm1lcmdlKGV4aXN0aW5nLCBpbmNvbWluZyk7XG4gIH1cblxuICBtZXJnZU1ldGFXaXRoU3RvcmUoXG4gICAgZXhpc3RpbmdNZXRhOiB7XG4gICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgIGRhdGU6IG51bWJlcjtcbiAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIH0sXG4gICAgaW5jb21pbmdNZXRhOiB7IGZldGNoZWRBdDogbnVtYmVyOyBkYXRlOiBudW1iZXI7IGV4cGlyZXNBdDogbnVtYmVyIH0sXG4gICAgZXhpc3Rpbmc6IGFueSxcbiAgICBpbmNvbWluZzogYW55LFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5zaG91bGRSZW9yZGVyKGV4aXN0aW5nTWV0YSwgaW5jb21pbmdNZXRhLCBleGlzdGluZywgaW5jb21pbmcpID9cbiAgICAgICAgZXhpc3RpbmdNZXRhXG4gICAgICA6IGluY29taW5nTWV0YTtcbiAgfVxuXG4gIC8vID4+Pj4+Pj4+Pj4+Pj4+REVOT1JNQUxJWkU8PDw8PDw8PDw8PDw8PFxuXG4gIHF1ZXJ5S2V5KFxuICAgIGFyZ3M6IEFyZ3MsXG4gICAgcXVlcnlLZXk6IHVua25vd24sXG4gICAgZ2V0RW50aXR5OiBHZXRFbnRpdHksXG4gICAgZ2V0SW5kZXg6IHVua25vd24sXG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuYXJnc0tleSkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLnBrKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnJywgYXJncyk7XG4gICAgICAvLyBlbnN1cmUgdGhpcyBhY3R1YWxseSBoYXMgZW50aXR5IG9yIHdlIHNob3VsZG4ndCB0cnkgdG8gdXNlIGl0IGluIG91ciBxdWVyeVxuICAgICAgaWYgKGdldEVudGl0eSh0aGlzLmtleSwgaWQpKSByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgZGVjbGFyZSBjcmVhdGVJZlZhbGlkOiAodmFsdWU6IGFueSkgPT4gYW55IHwgdW5kZWZpbmVkO1xuXG4gIGRlbm9ybWFsaXplKFxuICAgIGlucHV0OiBhbnksXG4gICAgYXJnczogcmVhZG9ubHkgYW55W10sXG4gICAgdW52aXNpdDogKHNjaGVtYTogYW55LCBpbnB1dDogYW55KSA9PiBhbnksXG4gICk6IFJldHVyblR5cGU8U1snZGVub3JtYWxpemUnXT4ge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5kZW5vcm1hbGl6ZShpbnB1dCwgYXJncywgdW52aXNpdCkgYXMgYW55O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25PcHRpb25zPFxuICBBcmdzIGV4dGVuZHMgYW55W10gPSBEZWZhdWx0QXJncyxcbiAgUGFyZW50ID0gYW55LFxuPiA9IChcbiAgfCB7XG4gICAgICAvKiogRGVmaW5lcyBsb29rdXBzIGZvciBDb2xsZWN0aW9ucyBuZXN0ZWQgaW4gb3RoZXIgc2NoZW1hcy5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9Db2xsZWN0aW9uI25lc3RLZXlcbiAgICAgICAqL1xuICAgICAgbmVzdEtleT86IChwYXJlbnQ6IFBhcmVudCwga2V5OiBzdHJpbmcpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuICB8IHtcbiAgICAgIC8qKiBEZWZpbmVzIGxvb2t1cHMgdG9wLWxldmVsIENvbGxlY3Rpb25zIHVzaW5nIC4uLmFyZ3MuXG4gICAgICAgKlxuICAgICAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvQ29sbGVjdGlvbiNhcmdzS2V5XG4gICAgICAgKi9cbiAgICAgIGFyZ3NLZXk/OiAoLi4uYXJnczogQXJncykgPT4gUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4pICZcbiAgKFxuICAgIHwge1xuICAgICAgICAvKiogU2V0cyBhIGRlZmF1bHQgY3JlYXRlQ29sbGVjdGlvbkZpbHRlciBmb3IgYWRkV2l0aCgpLCBwdXNoLCB1bnNoaWZ0LCBhbmQgYXNzaWduLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9Db2xsZWN0aW9uI2NyZWF0ZWNvbGxlY3Rpb25maWx0ZXJcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI/OiAoXG4gICAgICAgICAgLi4uYXJnczogQXJnc1xuICAgICAgICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICAvKiogVGVzdCB0byBkZXRlcm1pbmUgd2hpY2ggYXJnIGtleXMgc2hvdWxkICoqbm90KiogYmUgdXNlZCBmb3IgZmlsdGVyaW5nIHJlc3VsdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL0NvbGxlY3Rpb24jbm9uZmlsdGVyYXJndW1lbnRrZXlzXG4gICAgICAgICAqL1xuICAgICAgICBub25GaWx0ZXJBcmd1bWVudEtleXM/OiAoKGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IHN0cmluZ1tdIHwgUmVnRXhwO1xuICAgICAgfVxuICApO1xuXG5mdW5jdGlvbiBDcmVhdGVBZGRlcjxDIGV4dGVuZHMgQ29sbGVjdGlvblNjaGVtYTxhbnksIGFueT4sIFAgZXh0ZW5kcyBhbnlbXT4oXG4gIGNvbGxlY3Rpb246IEMsXG4gIG1lcmdlOiAoZXhpc3Rpbmc6IGFueSwgaW5jb21pbmc6IGFueSkgPT4gYW55W10sXG4gIGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXI/OiAoXG4gICAgLi4uYXJnczogUFxuICApID0+IChjb2xsZWN0aW9uS2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBib29sZWFuLFxuKSB7XG4gIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVzY3JpcHRvck1hcCA9IHtcbiAgICBtZXJnZTogeyB2YWx1ZTogbWVyZ2UgfSxcbiAgICBub3JtYWxpemU6IHsgdmFsdWU6IG5vcm1hbGl6ZUNyZWF0ZSB9LFxuICAgIHF1ZXJ5S2V5OiB7IHZhbHVlOiBxdWVyeUtleUNyZWF0ZSB9LFxuICB9O1xuICBpZiAoY29sbGVjdGlvbi5zY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgIHByb3BlcnRpZXMuY3JlYXRlSWZWYWxpZCA9IHsgdmFsdWU6IGNyZWF0ZUlmVmFsaWQgfTtcbiAgICBwcm9wZXJ0aWVzLmRlbm9ybWFsaXplID0geyB2YWx1ZTogZGVub3JtYWxpemUgfTtcbiAgfVxuICBpZiAoY3JlYXRlQ29sbGVjdGlvbkZpbHRlcikge1xuICAgIHByb3BlcnRpZXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciA9IHsgdmFsdWU6IGNyZWF0ZUNvbGxlY3Rpb25GaWx0ZXIgfTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShjb2xsZWN0aW9uLCBwcm9wZXJ0aWVzKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlLZXlDcmVhdGUoKSB7fVxuXG5mdW5jdGlvbiBub3JtYWxpemVDcmVhdGUoXG4gIHRoaXM6IENvbGxlY3Rpb25TY2hlbWE8YW55LCBhbnk+LFxuICBpbnB1dDogYW55LFxuICBwYXJlbnQ6IGFueSxcbiAga2V5OiBzdHJpbmcsXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB2aXNpdDogKCguLi5hcmdzOiBhbnkpID0+IGFueSkgJiB7IGNyZWF0aW5nPzogYm9vbGVhbiB9LFxuICBhZGRFbnRpdHk6IChzY2hlbWE6IGFueSwgcHJvY2Vzc2VkRW50aXR5OiBhbnksIGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gIGdldEVudGl0eTogR2V0RW50aXR5LFxuICBjaGVja0xvb3A6IENoZWNrTG9vcCxcbik6IGFueSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gbWVhbnMgJ3RoaXMgaXMgYSBjcmVhdGlvbiBlbmRwb2ludCcgLSBzbyByZWFsIFBLcyBhcmUgbm90IHJlcXVpcmVkXG4gICAgLy8gdGhpcyBpcyB1c2VkIGJ5IEVudGl0eS5ub3JtYWxpemUoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhbGxvdyBlbXB0eSBwa3NcbiAgICAvLyB2aXNpdCBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQgb24gZWFjaCBub3JtYWxpemUgY2FsbCBzbyB0aGlzIHdpbGwgc2FmZWx5IGJlIHJlc2V0XG4gICAgdmlzaXQuY3JlYXRpbmcgPSB0cnVlO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuc2NoZW1hLm5vcm1hbGl6ZShcbiAgICAhKHRoaXMuc2NoZW1hIGluc3RhbmNlb2YgQXJyYXlTY2hlbWEpIHx8IEFycmF5LmlzQXJyYXkoaW5wdXQpID9cbiAgICAgIGlucHV0XG4gICAgOiBbaW5wdXRdLFxuICAgIHBhcmVudCxcbiAgICBrZXksXG4gICAgYXJncyxcbiAgICB2aXNpdCxcbiAgICBhZGRFbnRpdHksXG4gICAgZ2V0RW50aXR5LFxuICAgIGNoZWNrTG9vcCxcbiAgKTtcbiAgLy8gcGFyZW50IGlzIGFyZ3Mgd2hlbiBub3QgbmVzdGVkXG4gIGNvbnN0IGZpbHRlckNvbGxlY3Rpb25zID0gKHRoaXMuY3JlYXRlQ29sbGVjdGlvbkZpbHRlciBhcyBhbnkpKC4uLmFyZ3MpO1xuICAvLyBhZGQgdG8gYW55IGNvbGxlY3Rpb25zIHRoYXQgbWF0Y2ggdGhpc1xuICBjb25zdCBlbnRpdGllcyA9IGdldEVudGl0eSh0aGlzLmtleSk7XG4gIGlmIChlbnRpdGllcylcbiAgICBPYmplY3Qua2V5cyhlbnRpdGllcykuZm9yRWFjaChjb2xsZWN0aW9uUGsgPT4ge1xuICAgICAgaWYgKCFmaWx0ZXJDb2xsZWN0aW9ucyhKU09OLnBhcnNlKGNvbGxlY3Rpb25QaykpKSByZXR1cm47XG4gICAgICBhZGRFbnRpdHkodGhpcywgbm9ybWFsaXplZFZhbHVlLCBjb2xsZWN0aW9uUGspO1xuICAgIH0pO1xuICByZXR1cm4gbm9ybWFsaXplZFZhbHVlIGFzIGFueTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSWZWYWxpZCh2YWx1ZTogb2JqZWN0KTogYW55IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gWy4uLnZhbHVlXSA6IHsgLi4udmFsdWUgfTtcbn1cblxuLy8gb25seSBmb3IgYXJyYXlzXG5mdW5jdGlvbiBkZW5vcm1hbGl6ZShcbiAgdGhpczogQ29sbGVjdGlvblNjaGVtYTxhbnksIGFueT4sXG4gIGlucHV0OiBhbnksXG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdLFxuICB1bnZpc2l0OiAoc2NoZW1hOiBhbnksIGlucHV0OiBhbnkpID0+IGFueSxcbik6IGFueSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGlucHV0KSA/XG4gICAgICAodGhpcy5zY2hlbWEuZGVub3JtYWxpemUoaW5wdXQsIGFyZ3MsIHVudmlzaXQpIGFzIGFueSlcbiAgICA6ICh0aGlzLnNjaGVtYS5kZW5vcm1hbGl6ZShbaW5wdXRdLCBhcmdzLCB1bnZpc2l0KVswXSBhcyBhbnkpO1xufVxuLyoqXG4gKiBXZSBjYWxsIHNjaGVtYS5kZW5vcm1hbGl6ZSBhbmQgc2NoZW1hLm5vcm1hbGl6ZSBkaXJlY3RseVxuICogaW5zdGVhZCBvZiB2aXNpdC91bnZpc2l0IGFzIHdlIGFyZSBub3Qgb3BlcmF0aW5nIG9uIG5ldyBkYXRhXG4gKiBzbyB0aGUgYWRkaXRpb25hbCBjaGVja3MgaW4gdGhvc2UgbWV0aG9kcyBhcmUgcmVkdW5kYW50XG4gKi9cblxuZnVuY3Rpb24ga2V5RnJvbVNjaGVtYShzY2hlbWE6IFBvbHltb3JwaGljSW50ZXJmYWNlKSB7XG4gIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBcnJheVNjaGVtYSkge1xuICAgIC8vIHRoaXMgYXNzdW1lcyB0aGUgZGVmaW5pdGlvbiBvZiBBcnJheS9WYWx1ZXMgaXMgRW50aXR5XG4gICAgcmV0dXJuIGBbJHtzY2hlbWEuc2NoZW1hS2V5KCl9XWA7XG4gIH0gZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVmFsdWVzKSB7XG4gICAgcmV0dXJuIGB7JHtzY2hlbWEuc2NoZW1hS2V5KCl9fWA7XG4gIH1cbiAgcmV0dXJuIGAoJHtzY2hlbWEuc2NoZW1hS2V5KCl9KWA7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG1CQUFtQixRQUFRLDBCQUEwQjtBQUU5RCxTQUFTQyxNQUFNLEVBQUVDLEtBQUssSUFBSUMsV0FBVyxRQUFRLGNBQWM7QUFHM0QsTUFBTUMsU0FBUyxHQUFHQSxDQUFDQyxRQUFhLEVBQUVDLFFBQWEsS0FBSztFQUNsRCxPQUFPLENBQUMsR0FBR0QsUUFBUSxFQUFFLEdBQUdDLFFBQVEsQ0FBQztBQUNuQyxDQUFDO0FBQ0QsTUFBTUMsWUFBWSxHQUFHQSxDQUFDRixRQUFhLEVBQUVDLFFBQWEsS0FBSztFQUNyRCxPQUFPLENBQUMsR0FBR0EsUUFBUSxFQUFFLEdBQUdELFFBQVEsQ0FBQztBQUNuQyxDQUFDO0FBQ0QsTUFBTUcsV0FBVyxHQUFHQSxDQUFDSCxRQUFhLEVBQUVDLFFBQWEsS0FBSztFQUNwRCxPQUFPO0lBQUUsR0FBR0QsUUFBUTtJQUFFLEdBQUdDO0VBQVMsQ0FBQztBQUNyQyxDQUFDO0FBQ0QsTUFBTUcsV0FBVyxHQUFJQyxLQUFVLElBQUssQ0FBQyxHQUFHQSxLQUFLLENBQUM7QUFDOUMsTUFBTUMsV0FBVyxHQUFJRCxLQUFVLEtBQU07RUFBRSxHQUFHQTtBQUFNLENBQUMsQ0FBQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU1FLGdCQUFnQixDQUluQztFQW1CQUMsT0FBT0EsQ0FDTEMsS0FBNEMsRUFDNUNDLHNCQUV1RCxFQUMvQjtJQUN4QixPQUFPQyxXQUFXLENBQUMsSUFBSSxFQUFFRixLQUFLLEVBQUVDLHNCQUFzQixDQUFDO0VBQ3pEOztFQUVBO0VBQ0E7RUFDQTtF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 |
{ | ||
"name": "@data-client/endpoint", | ||
"version": "0.14.16", | ||
"version": "0.14.17", | ||
"description": "Declarative Network Interface Definitions", | ||
@@ -5,0 +5,0 @@ "homepage": "https://dataclient.io/docs/guides/custom-protocol", |
// eslint-env jest | ||
import { initialState, State } from '@data-client/core'; | ||
import { initialState } from '@data-client/core'; | ||
import { normalize, denormalize, MemoCache } from '@data-client/normalizr'; | ||
import { IDEntity } from '__tests__/new'; | ||
import { ArticleResource, IDEntity } from '__tests__/new'; | ||
import { Record } from 'immutable'; | ||
@@ -15,3 +15,3 @@ | ||
dateSpy = jest | ||
// eslint-disable-next-line no-undef | ||
.spyOn(global.Date, 'now') | ||
@@ -674,2 +674,21 @@ .mockImplementation(() => new Date('2019-05-14T11:01:58.135Z').valueOf()); | ||
}); | ||
it('pk should serialize differently with nested args', () => { | ||
const filtersA = { | ||
search: { | ||
type: 'Coupon', | ||
}, | ||
}; | ||
const filtersB = { | ||
search: { | ||
type: 'Cashback', | ||
}, | ||
}; | ||
expect( | ||
ArticleResource.getList.schema.pk([], undefined, '', [filtersA]), | ||
).not.toEqual( | ||
ArticleResource.getList.schema.pk([], undefined, '', [filtersB]), | ||
); | ||
}); | ||
}); |
@@ -139,3 +139,3 @@ import { consistentSerialize } from './consistentSerialize.js'; | ||
for (const key in obj) { | ||
if (typeof obj[key] !== 'string' && obj[key] !== undefined) | ||
if (['number', 'boolean'].includes(typeof obj[key])) | ||
obj[key] = `${obj[key]}`; | ||
@@ -142,0 +142,0 @@ } |
1253430
18891