sonamu 0.13.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/api/decorators.d.ts +2 -3
  2. package/dist/api/decorators.d.ts.map +1 -1
  3. package/dist/api/decorators.js +1 -1
  4. package/dist/api/sonamu.d.ts.map +1 -1
  5. package/dist/api/sonamu.js +5 -5
  6. package/dist/database/base-model.d.ts.map +1 -1
  7. package/dist/database/base-model.js +8 -3
  8. package/dist/database/puri.d.ts +8 -3
  9. package/dist/database/puri.d.ts.map +1 -1
  10. package/dist/database/puri.js +120 -15
  11. package/dist/database/puri.types.d.ts +5 -2
  12. package/dist/database/puri.types.d.ts.map +1 -1
  13. package/dist/database/puri.types.js +1 -1
  14. package/dist/storage/buffered-file.d.ts +3 -3
  15. package/dist/storage/buffered-file.d.ts.map +1 -1
  16. package/dist/storage/buffered-file.js +2 -2
  17. package/dist/storage/index.d.ts +1 -1
  18. package/dist/storage/index.d.ts.map +1 -1
  19. package/dist/storage/index.js +1 -1
  20. package/dist/storage/storage-manager.d.ts +3 -4
  21. package/dist/storage/storage-manager.d.ts.map +1 -1
  22. package/dist/storage/storage-manager.js +2 -2
  23. package/dist/storage/types.d.ts +3 -2
  24. package/dist/storage/types.d.ts.map +1 -1
  25. package/dist/storage/uploaded-file.d.ts +3 -3
  26. package/dist/storage/uploaded-file.d.ts.map +1 -1
  27. package/dist/storage/uploaded-file.js +1 -1
  28. package/package.json +1 -1
  29. package/src/api/__tests__/sonamu.storage.test.ts +145 -0
  30. package/src/api/decorators.ts +2 -3
  31. package/src/api/sonamu.ts +6 -6
  32. package/src/database/__tests__/puri-hydration.test.ts +226 -0
  33. package/src/database/base-model.ts +7 -3
  34. package/src/database/puri.ts +204 -15
  35. package/src/database/puri.types.test-d.ts +29 -0
  36. package/src/database/puri.types.ts +10 -2
  37. package/src/storage/__tests__/storage-manager.test.ts +64 -0
  38. package/src/storage/buffered-file.ts +3 -3
  39. package/src/storage/index.ts +1 -1
  40. package/src/storage/storage-manager.ts +4 -5
  41. package/src/storage/storage.test-d.ts +47 -0
  42. package/src/storage/types.ts +3 -2
  43. package/src/storage/uploaded-file.ts +4 -4
@@ -64,11 +64,14 @@ export type LeftJoinMarkerFor<TTables, Path extends string> = IsNullableColumn<T
64
64
  type IsNullableJoinedTable<TTables, TableKey> = TableKey extends keyof TTables ? TTables[TableKey] extends LeftJoinedMarker ? true : false : false;
65
65
  type JoinPath<Prefix extends string, Key extends string> = Prefix extends "" ? Key : `${Prefix}__${Key}`;
66
66
  export type ParseSelectObject<TTables extends object, TSelect extends SelectObject<TTables>> = ParseSelectObjectWithPath<TTables, TSelect, "">;
67
+ type IsNullableSelectGroup<TTables, TSelect, Path extends string> = IsNullableJoinedTable<TTables, Path> extends true ? true : TSelect extends {
68
+ id: `${infer Alias}.${string}`;
69
+ } ? IsNullableJoinedTable<TTables, Alias> : false;
67
70
  type ParseSelectObjectWithPath<TTables extends object, TSelect extends SelectObject<TTables>, Prefix extends string> = Expand<{
68
- [K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ? IsNullableJoinedTable<TTables, JoinPath<Prefix, K & string>> extends true ? Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> | null : Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> : never : ExtractColumnType<TTables, TSelect[K] & string>;
71
+ [K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ? IsNullableSelectGroup<TTables, TSelect[K], JoinPath<Prefix, K & string>> extends true ? Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> | null : Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> : never : ExtractColumnType<TTables, TSelect[K] & string>;
69
72
  }>;
70
73
  type ParseSelectObjectInner<TTables extends object, TSelect extends SelectObject<TTables>, Prefix extends string> = Expand<{
71
- [K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ? IsNullableJoinedTable<TTables, JoinPath<Prefix, K & string>> extends true ? Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> | null : Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> : never : ExtractColumnTypeRaw<TTables, TSelect[K] & string>;
74
+ [K in keyof TSelect]: TSelect[K] extends SqlExpression<SqlExpressionType, boolean> ? ParseSqlExpression<TSelect[K]> : IsNestedObject<TSelect[K]> extends true ? TSelect[K] extends NestedSelectObject<TTables> ? IsNullableSelectGroup<TTables, TSelect[K], JoinPath<Prefix, K & string>> extends true ? Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> | null : Expand<ParseSelectObjectInner<TTables, TSelect[K], JoinPath<Prefix, K & string>>> : never : ExtractColumnTypeRaw<TTables, TSelect[K] & string>;
72
75
  }>;
73
76
  export type ExtractColumnType<TTables extends object, Path extends string> = Path extends `${infer TAlias}.${infer TColumn}` ? TAlias extends keyof TTables ? TColumn extends keyof TTables[TAlias] ? TTables[TAlias] extends LeftJoinedMarker ? TTables[TAlias][TColumn] | null : TTables[TAlias][TColumn] : never : never : IsSingleKey<TTables> extends true ? Path extends keyof TTables[keyof TTables] ? TTables[keyof TTables][Path] : never : never;
74
77
  type ExtractColumnTypeRaw<TTables extends object, Path extends string> = Path extends `${infer TAlias}.${infer TColumn}` ? TAlias extends keyof TTables ? TColumn extends keyof TTables[TAlias] ? TTables[TAlias][TColumn] : never : never : IsSingleKey<TTables> extends true ? Path extends keyof TTables[keyof TTables] ? TTables[keyof TTables][Path] : never : never;
@@ -1 +1 @@
1
- {"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,4 @@ var init_puri_types = __esmMin((() => {
11
11
  init_puri_types();
12
12
  export { FUZZY_OPERATORS, init_puri_types };
13
13
 
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcHVyaS50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBveGxpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovIC8vIFB1cmkudHlwZXMudHPripQg64uk7JaR7ZWcIO2DgOyeheydhCDsgqzsmqntlZjqs6Ag7J6I7Iq164uI64ukLlxuXG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFiYXNlRm9yZWlnbktleXMsIHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHVyaSB9IGZyb20gXCIuL3B1cmlcIjtcbmltcG9ydCB7IHR5cGUgUHVyaVN1YnNldEZuIH0gZnJvbSBcIi4vcHVyaS1zdWJzZXQudHlwZXNcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOuCtOu2gCDtg4DsnoUg7YKkICjrqZTtg4DrjbDsnbTthLApXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudHlwZSBGdWxsdGV4dEtleSA9IFwiX19mdWxsdGV4dF9fXCI7XG50eXBlIFZpcnR1YWxLZXkgPSBcIl9fdmlydHVhbF9fXCI7XG50eXBlIExlZnRKb2luZWRLZXkgPSBcIl9fbGVmdEpvaW5lZF9fXCI7XG50eXBlIEhhc0RlZmF1bHQgPSBcIl9faGFzRGVmYXVsdF9fXCI7XG50eXBlIEdlbmVyYXRlZEtleSA9IFwiX19nZW5lcmF0ZWRfX1wiO1xudHlwZSBWZWN0b3JLZXkgPSBcIl9fdmVjdG9yX19cIjtcbnR5cGUgSnNvbktleSA9IFwiX19qc29uX19cIjtcbnR5cGUgVmlydHVhbFF1ZXJ5S2V5ID0gXCJfX3ZpcnR1YWxfcXVlcnlfX1wiO1xudHlwZSBTcWxFeHByZXNzaW9uVHlwZSA9IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiB8IFwidHN2ZWN0b3JcIjtcblxudHlwZSBJbnRlcm5hbFR5cGVLZXlzID1cbiAgfCBGdWxsdGV4dEtleVxuICB8IFZpcnR1YWxLZXlcbiAgfCBMZWZ0Sm9pbmVkS2V5XG4gIHwgSGFzRGVmYXVsdFxuICB8IEdlbmVyYXRlZEtleVxuICB8IFZlY3RvcktleVxuICB8IEpzb25LZXlcbiAgfCBWaXJ0dWFsUXVlcnlLZXk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyDtg4DsnoUg7Jyg7Yu466as7YuwXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBfX3ZlY3Rvcl9fIOuplO2DgOuNsOydtO2EsOyXkOyEnCDrsqHthLAg7Lus65+8IOy2lOy2nFxudHlwZSBWZWN0b3JDb2x1bW5LZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmVjdG9yS2V5XTogcmVhZG9ubHkgKGluZmVyIFYpW10gfVxuICA/IFYgJiBzdHJpbmdcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke1ZlY3RvckNvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVmVjdG9yQ29sdW1uS2V5czxUVGFibGVzW2tleW9mIFRUYWJsZXNdPiA6IG5ldmVyKTtcblxuLy8gX19qc29uX18g66mU7YOA642w7J207YSw7JeQ7IScIEpTT04g7Lus65+8IOy2lOy2nFxudHlwZSBKc29uQ29sdW1uS2V5czxUPiA9IFQgZXh0ZW5kcyB7IFtLIGluIEpzb25LZXldOiByZWFkb25seSAoaW5mZXIgSilbXSB9ID8gSiAmIHN0cmluZyA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBKc29uQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0pzb25Db2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IEpzb25Db2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IDogbmV2ZXIpO1xuXG50eXBlIEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPFQ+ID0gVCBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFbGVtZW50KVtdXG4gID8gSnNvblN1cGVyc2V0TmVzdGVkVmFsdWU8RWxlbWVudD5bXVxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBKc29uU3VwZXJzZXROZXN0ZWRWYWx1ZTxUW0tdPiB9XG4gICAgOiBUO1xuXG5leHBvcnQgdHlwZSBKc29uU3VwZXJzZXRWYWx1ZTxUPiA9IEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPE5vbk51bGxhYmxlPFQ+PjtcblxuLy8g7YWM7J2067iU66qFIO2DgOyehVxuZXhwb3J0IHR5cGUgVGFibGVOYW1lPFRTY2hlbWE+ID0ga2V5b2YgVFNjaGVtYSAmIHN0cmluZztcblxuLy8g7YWM7J2067iU7J2YIGlkKFBLKSDtg4DsnoXsnYQg7LaU7LacXG5leHBvcnQgdHlwZSBJZFR5cGU8VFNjaGVtYSwgVFRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4gPSBUU2NoZW1hW1RUYWJsZV0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgPyBJXG4gIDogbnVtYmVyO1xuXG4vLyB2aXJ0dWFsIOy7rOufvCDtg4DsnoUg7LaU7LacXG50eXBlIFZpcnR1YWxLZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmlydHVhbEtleV06IHJlYWRvbmx5IChpbmZlciBWKVtdIH0gPyBWICYgc3RyaW5nIDogbmV2ZXI7XG5cbi8vIHZpcnR1YWwg7Lus65+8IOygnOqxsFxudHlwZSBTdHJpcFZpcnR1YWw8VD4gPSBPbWl0PFQsIFZpcnR1YWxLZXlzPFQ+PjtcblxuLy8gTEVGVCBKT0lOIOuniOy7pCAtIG51bGxhYmxlIEZL66GcIOyhsOyduOuQnCDthYzsnbTruJRcbi8vIOydtCDrp4jsu6TripQgbnVsbGFibGUgRksgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxuLy8gam9pbiArIEZLIG51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBudWxsYWJsZSAtPiDrtpnsnYwhXG5leHBvcnQgdHlwZSBMZWZ0Sm9pbmVkTWFya2VyID0geyBbSyBpbiBMZWZ0Sm9pbmVkS2V5XTogdHJ1ZSB9O1xuXG4vLyDrqZTtg4DrjbDsnbTthLAg7ZWE65OcIOygnOyZuO2VnCDsi6TsoJwg7JeU7Yuw7YuwIOy7rOufvFxuZXhwb3J0IHR5cGUgQ29sdW1uS2V5czxUPiA9IEV4Y2x1ZGU8a2V5b2YgU3RyaXBWaXJ0dWFsPFQ+LCBJbnRlcm5hbFR5cGVLZXlzPiAmIHN0cmluZztcblxuLy8gdmlydHVhbCDsu6zrn7wg7KCc6rGwIO2bhCBfX2Z1bGx0ZXh0X18g7Jyg7KeAXG5leHBvcnQgdHlwZSBQdXJpVGFibGU8VD4gPSBPbWl0PFN0cmlwVmlydHVhbDxUPiwgVmlydHVhbEtleT47XG5cbi8vIOuCtOu2gCDtg4DsnoUg7YKkIOygnOyZuCAo7Iuk7KCcIOy7rOufvOunjCDrgqjquYApXG5leHBvcnQgdHlwZSBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiA9IE9taXQ8VCwgSW50ZXJuYWxUeXBlS2V5cz47XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOy7rOufvCDqsr3roZxcbmV4cG9ydCB0eXBlIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSAoXG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IENvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gLy8g64uo7J28IO2FjOydtOu4lOydtOuptCDsu6zrn7zrqoXrp4zrj4Qg7ZeI7JqpXG4gICAgICA6IG5ldmVyKVxuKSAmXG4gIHN0cmluZztcblxuLy8g7Iir7J6QIO2DgOyehSDsu6zrn7zrp4wg7LaU7Lac7ZWY64qUIOycoO2LuOumrO2LsCDtg4DsnoVcbnR5cGUgTnVtZXJpY0NvbHVtbktleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50IHwgbnVsbCB8IHVuZGVmaW5lZCA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF0gJlxuICBzdHJpbmc7XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsiKvsnpAg7YOA7J6FIOy7rOufvOunjCDstpTstpxcbmV4cG9ydCB0eXBlIE51bWVyaWNDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgfCB7XG4gICAgICBbVEFsaWFzIGluIGtleW9mIFRUYWJsZXNdOiBgJHtUQWxpYXMgJiBzdHJpbmd9LiR7TnVtZXJpY0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IE51bWVyaWNDb2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IC8vIOuLqOydvCDthYzsnbTruJTsnbTrqbQg7Lus65+866qF66eM64+EIO2XiOyaqVxuICAgICAgOiBuZXZlcik7XG5cbi8vIEdyb3VwIEJ5LCBPcmRlciBCeSwgSGF2aW5nIOuTseyXkOyEnCDshKDtg50g6rCA64ql7ZWcIOy7rOufvFxuZXhwb3J0IHR5cGUgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0LCBUUmVzdWx0ID0gYW55PiA9XG4gIHwgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPlxuICB8IGAke2tleW9mIFRSZXN1bHQgJiBzdHJpbmd9YDtcblxuLy8gU2VsZWN0IOqwkiDtg4DsnoUg7ZmV7J6lICjri6jsnbwg7Lus65+8IOuYkOuKlCBTUUwg7ZGc7ZiE7IudKVxuZXhwb3J0IHR5cGUgU2VsZWN0VmFsdWU8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPVxuICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5cbiAgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiwgYm9vbGVhbj47XG5cbi8vIOykkeyyqSBTZWxlY3Qg6rCd7LK0IO2DgOyehSAo7J6s6reA7KCBKVxuLy8g7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuZXhwb3J0IHR5cGUgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5OiBzdHJpbmddOiBTZWxlY3RWYWx1ZTxUVGFibGVzPiB8IE5lc3RlZFNlbGVjdE9iamVjdDxUVGFibGVzPjtcbn07XG5cbi8vIFNlbGVjdCDqsJ3ssrQg7YOA7J6FIChmbGF0IOuYkOuKlCDspJHssqkg7ZeI7JqpKVxuZXhwb3J0IHR5cGUgU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0gTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXM+O1xuXG4vLyDqsJLsnbQg7KSR7LKpIOqwneyytOyduOyngCDtjJDrs4TtlZjripQg7Zes7Y28IO2DgOyehVxudHlwZSBJc05lc3RlZE9iamVjdDxUPiA9IFQgZXh0ZW5kcyBzdHJpbmdcbiAgPyBmYWxzZVxuICA6IFQgZXh0ZW5kcyBTcWxFeHByZXNzaW9uPFNxbEV4cHJlc3Npb25UeXBlLCBib29sZWFuPlxuICAgID8gZmFsc2VcbiAgICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcblxuLy8g7Lus65+87J20IG51bGxhYmxl7J247KeAIO2ZleyduCAo7Iqk7YKk66eI7JeQ7IScIOyngeygkSDstpTstpwpXG4vLyDsmIg6IElzTnVsbGFibGVDb2x1bW48VFRhYmxlcywgXCJlbXBsb3llZXMuZGVwYXJ0bWVudF9pZFwiPiDihpIgZGVwYXJ0bWVudF9pZOqwgCBudW1iZXIgfCBudWxs7J2066m0IHRydWVcbmV4cG9ydCB0eXBlIElzTnVsbGFibGVDb2x1bW48XG4gIFRUYWJsZXMsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IG51bGwgZXh0ZW5kcyBUVGFibGVzW1RBbGlhc11bVENvbHVtbl1cbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2VcbiAgICA6IGZhbHNlXG4gIDogZmFsc2U7XG5cbi8vIEZLIG51bGxhYmxlIOyXrOu2gOyXkCDrlLDrpbgg66eI7LukIO2DgOyehSDqsrDsoJVcbi8vIG51bGxhYmxlIEZL66GcIGxlZnRKb2luIOKGkiBMZWZ0Sm9pbmVkTWFya2VyICjqsJ3ssrQg7J6Q7LK06rCAIG51bGzsnbwg7IiYIOyeiOydjClcbi8vIG5vbi1udWxsIEZL66GcIGxlZnRKb2luIOKGkiDrp4jsu6Qg7JeG7J2MICjrtoDrqqjqsIAg7J6I7Jy866m0IOyekOyLneuPhCDrsJjrk5zsi5wg7J6I7J2MKVxuZXhwb3J0IHR5cGUgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgUGF0aCBleHRlbmRzIHN0cmluZz4gPVxuICBJc051bGxhYmxlQ29sdW1uPFRUYWJsZXMsIFBhdGg+IGV4dGVuZHMgdHJ1ZSA/IExlZnRKb2luZWRNYXJrZXIgOiB7fTtcblxuLy8g7KO87Ja07KeEIO2FjOydtOu4lOydtCBGSyBudWxsYWJsZeuhnCBsZWZ0Sm9pbiDrkJwg7YWM7J2067iU7J247KeAIO2ZleyduO2VqeuLiOuLpC5cbi8vIOyCrOyLpCBMZWZ0Sm9pbk1hcmtlcuqwgCDrtpnsl4jripTsp4Ag7ZmV7J247ZWY64qU6rKMIOuLpOyeheuLiOuLpC5cbi8vIOydtCDrp4jsu6TripQgRksgbnVsbGFibGUgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxudHlwZSBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgVGFibGVLZXk+ID0gVGFibGVLZXkgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gID8gVFRhYmxlc1tUYWJsZUtleV0gZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgPyB0cnVlIC8vIExlZnRKb2luZWRNYXJrZXLqsIAg7J6I7Jy866m0IG51bGxhYmxlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG4vLyDqsr3roZwg7KGw7ZWpIO2XrO2NvCAocHJlZml46rCAIOyXhuycvOuptCBrZXnrp4wsIOyeiOycvOuptCBwcmVmaXhfX2tleSlcbnR5cGUgSm9pblBhdGg8UHJlZml4IGV4dGVuZHMgc3RyaW5nLCBLZXkgZXh0ZW5kcyBzdHJpbmc+ID0gUHJlZml4IGV4dGVuZHMgXCJcIlxuICA/IEtleVxuICA6IGAke1ByZWZpeH1fXyR7S2V5fWA7XG5cbi8vIFNlbGVjdCDqsrDqs7wg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDsuZzqtazsnoXri4jri6QuXG4vLyDsnbQg7YOA7J6F7J2AIFB1cmnsnZggc2VsZWN0LCBhcHBlbmRTZWxlY3Tsl5DshJwgVFJlc3VsdOuhnCDsgqzsmqnrkKnri4jri6QuXG4vL1xuLy8gU2NoZW1h66W8IOydveyWtOyEnCBGS+ydmCBudWxsYWJpbGl0eeyXkCDrlLDrnbwgam9pbuuQnCDqsJ3ssrTsnZgg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDquLDriqXsnbQg7J6I7Iq164uI64ukLlxuLy8g7J206rKMIOustOyKqCDshozrpqzrg5A/IEZL6rCAIG51bGxhYmxl7J24642wIGxlZnRKb2lu65CY7JeI64uk66m0LCDtlbTri7kg6rCd7LK064qUIG51bGxhYmxlIO2VtOyVvCDtlajsnYQg7YOA7J6FIOy2lOuhoOycvOuhnCDrsJjsmIHtlbTspIDri6TripQg6rKD7J6F64uI64ukLlxuLy8g67CY66m0IEZL6rCAIG5vbi1udWxsYWJsZeydtOqxsOuCmCDqt7jrg6Ugam9pbuycvOuhnCDsnbTslrTsoYzri6TrqbQg7ZW064u5IOqwneyytOuKlCBub24tbnVsbGFibGXtlaAg6rKB64uI64ukLlxuLy8g66y866GgIOqwneyytCDrgrTrtoDsnZggbnVsbGFiaWxpdHnripQg65iQIOuzhOqwnOuhnCDstpTroaDrkKnri4jri6QuXG4vL1xuLy8g7JWE656Y7JeQ64+EIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGjrpbwg67mE66Gv7ZW0IEV4dHJhY3RDb2x1bW5UeXBlLCBFeHRyYWN0Q29sdW1uVHlwZVJhdyDrk7HsnZgg7YOA7J6F7J20IOyeiOyKteuLiOuLpC5cbi8vIOydtOuTpOydmCDsl63tlaDsnYAg64uk7J2M6rO8IOqwmeyKteuLiOuLpDpcbi8vIC0gUGFyc2UqOiDqsJ3ssrQg66CI67Ko7JeQ7IScIOykkeyyqSDqtazsobDrpbwg7Iic7ZqM7ZWY66mwIOqwneyytOyXkCB8IG51bGzsnYQg67aZ7J287KeAIOqysOygle2VqeuLiOuLpC5cbi8vIC0gRXh0cmFjdCo6IO2VhOuTnCDroIjrsqjsl5DshJwgXCJ0YWJsZS5jb2x1bW5cIiDqsr3roZzroZzrtoDthLAg7Iuk7KCcIO2DgOyeheydhCDstpTstpztlanri4jri6QuXG4vL1xuLy8g7JiI7IucOlxuLy8gLnNlbGVjdCh7XG4vLyAgIGlkOiBcInVzZXJzLmlkXCIsICAgICAgICAgICAvLyDihpAgRXh0cmFjdENvbHVtblR5cGXsnZgg6rKw6rO864qUIG51bWJlcuyeheuLiOuLpC5cbi8vICAgZGVwYXJ0bWVudDogeyAgICAgICAgICAgICAvLyDihpAgUGFyc2VTZWxlY3RPYmplY3RJbm5lcuyXkCDsnZjtlbQgbnVsbGFibGUg6rCd7LK066GcIOy2lOuhoOuQqeuLiOuLpC5cbi8vICAgICBpZDogXCJkZXBhcnRtZW50LmlkXCIsICAgIC8vIOKGkCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ydmCDqsrDqs7zripQgbnVtYmVy7J6F64uI64ukLlxuLy8gICAgIG5hbWU6IFwiZGVwYXJ0bWVudC5uYW1lXCIgLy8g4oaQIEV4dHJhY3RDb2x1bW5UeXBlUmF37J2YIOqysOqzvOuKlCBzdHJpbmfsnoXri4jri6QuXG4vLyAgIH1cbi8vIH0pXG5leHBvcnQgdHlwZSBQYXJzZVNlbGVjdE9iamVjdDxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbj4gPSBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRoPFRUYWJsZXMsIFRTZWxlY3QsIFwiXCI+O1xuXG4vLyDqsr3roZzrpbwg7LaU7KCB7ZWY66m07IScIFNlbGVjdCDqsrDqs7wg7YOA7J6F7J2EIOy2lOuhoO2VqeuLiOuLpC5cbnR5cGUgUGFyc2VTZWxlY3RPYmplY3RXaXRoUGF0aDxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxTcWxFeHByZXNzaW9uVHlwZSwgYm9vbGVhbj5cbiAgICA/IFBhcnNlU3FsRXhwcmVzc2lvbjxUU2VsZWN0W0tdPlxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlIC8vIOyjvOyWtOynhCDthYzsnbTruJTsnbQgRksgbnVsbGFibGXsl5AgbGVmdEpvaW7rkJjsl4jripTsp4Ag7Jes67aA7JeQIOuUsOudvCBzZWxlY3Qg6rKw6rO8IOqwneyytOydmCDtg4DsnoXsnbQg64us65287KeR64uI64ukLlxuICAgICAgICAgID8gRXhwYW5kPFBhcnNlU2VsZWN0T2JqZWN0SW5uZXI8VFRhYmxlcywgVFNlbGVjdFtLXSwgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4+IHwgbnVsbCAvLyDrp4zslb0g7ZW064u57ZWc64uk66m0IO2VtOuLuSDqsJ3ssrQg7J6Q7LK064qUIG51bGxhYmxlIO2VmOupsCxcbiAgICAgICAgICA6IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiAvLyDqt7jroIfsp4Ag7JWK64uk66m0IG5vbi1udWxsYWJsZSDtlanri4jri6QuXG4gICAgICAgIDogbmV2ZXJcbiAgICAgIDogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVFNlbGVjdFtLXSAmIHN0cmluZz47XG59PjtcblxuLy8g7KSR7LKpIOqwneyytCDrgrTrtoDsmqkgLSBsZWZ0Sm9pbiBudWxsYWJsZeydhCDqsJ3ssrQg66CI67Ko7JeQ7IScIOydtOuvuCDsspjrpqztlojsnLzrr4DroZwg7ZWE65Oc64qUIOybkOuzuCDtg4DsnoXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuLy8gUGFyc2VTZWxlY3RPYmplY3RXaXRoUGF0aOyZgCDqsbDsnZgg64+Z7J287ZWY64KYLCDrp4jsp4Drp4nsl5AgRXh0cmFjdENvbHVtblR5cGUg64yA7IugIEV4dHJhY3RDb2x1bW5UeXBlUmF366W8IOyCrOyaqe2VmOyXrFxuLy8g7ZWE65OcIOugiOuyqOyXkOyEnCDspJHrs7XsnLzroZwgfCBudWxs7J20IOy2lOqwgOuQmOuKlCDqsoPsnYQg67Cp7KeA7ZWp64uI64ukLlxudHlwZSBQYXJzZVNlbGVjdE9iamVjdElubmVyPFxuICBUVGFibGVzIGV4dGVuZHMgb2JqZWN0LFxuICBUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+LFxuICBQcmVmaXggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gRXhwYW5kPHtcbiAgW0sgaW4ga2V5b2YgVFNlbGVjdF06IFRTZWxlY3RbS10gZXh0ZW5kcyBTcWxFeHByZXNzaW9uPFNxbEV4cHJlc3Npb25UeXBlLCBib29sZWFuPlxuICAgID8gUGFyc2VTcWxFeHByZXNzaW9uPFRTZWxlY3RbS10+XG4gICAgOiBJc05lc3RlZE9iamVjdDxUU2VsZWN0W0tdPiBleHRlbmRzIHRydWVcbiAgICAgID8gVFNlbGVjdFtLXSBleHRlbmRzIE5lc3RlZFNlbGVjdE9iamVjdDxUVGFibGVzPlxuICAgICAgICA/IElzTnVsbGFibGVKb2luZWRUYWJsZTxUVGFibGVzLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+PiBleHRlbmRzIHRydWVcbiAgICAgICAgICA/IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiB8IG51bGxcbiAgICAgICAgICA6IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PlxuICAgICAgICA6IG5ldmVyXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlUmF3PFRUYWJsZXMsIFRTZWxlY3RbS10gJiBzdHJpbmc+OyAvLyBsZWZ0Sm9pbiBudWxsYWJsZSDrrLTsi5xcbn0+O1xuXG4vLyDsu6zrn7wg6rK966Gc7JeQ7IScIO2DgOyeheydhCDstpTstpztlanri4jri6QuIExlZnRKb2luZWRNYXJrZXLqsIAg7J6I7Jy866m0IHwgbnVsbOydhCDstpTqsIDtlanri4jri6QuXG4vLyDstZzsg4HsnIQgc2VsZWN0IO2VhOuTnOyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG5leHBvcnQgdHlwZSBFeHRyYWN0Q29sdW1uVHlwZTxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgUGF0aCBleHRlbmRzIHN0cmluZyxcbj4gPSBQYXRoIGV4dGVuZHMgYCR7aW5mZXIgVEFsaWFzfS4ke2luZmVyIFRDb2x1bW59YFxuICA/IFRBbGlhcyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUVGFibGVzW1RBbGlhc11cbiAgICAgID8gVFRhYmxlc1tUQWxpYXNdIGV4dGVuZHMgTGVmdEpvaW5lZE1hcmtlclxuICAgICAgICA/IFRUYWJsZXNbVEFsaWFzXVtUQ29sdW1uXSB8IG51bGwgLy8gTEVGVCBKT0lOIChudWxsYWJsZSBGSykg4oaSIG51bGxhYmxlXG4gICAgICAgIDogVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIC8vIElOTkVSIEpPSU4g65iQ64qUIG5vbi1udWxsIEZLIGxlZnRKb2luIOKGkiBub24tbnVsbGFibGVcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyXG4gIDogSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgPyBQYXRoIGV4dGVuZHMga2V5b2YgVFRhYmxlc1trZXlvZiBUVGFibGVzXVxuICAgICAgPyBUVGFibGVzW2tleW9mIFRUYWJsZXNdW1BhdGhdXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcblxuLy8g7Lus65+8IOqyveuhnOyXkOyEnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLiBsZWZ0Sm9pbiDsl6zrtoDsmYAg6rSA6rOE7JeG7J20IOybkOuzuCDtg4DsnoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuLy8g7KSR7LKpIOqwneyytCDrgrTrtoAg7ZWE65Oc7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC4gKOqwneyytCDroIjrsqjsl5DshJwg7J2066+4IHwgbnVsbCDsspjrpqzqsIAg7JmE66OM65CY7JeI7Jy866+A66GcKVxudHlwZSBFeHRyYWN0Q29sdW1uVHlwZVJhdzxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgUGF0aCBleHRlbmRzIHN0cmluZyxcbj4gPSBQYXRoIGV4dGVuZHMgYCR7aW5mZXIgVEFsaWFzfS4ke2luZmVyIFRDb2x1bW59YFxuICA/IFRBbGlhcyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUVGFibGVzW1RBbGlhc11cbiAgICAgID8gVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIC8vIGxlZnRKb2luIOyXrOu2gOyZgCDqtIDqs4Tsl4bsnbQg7JuQ67O4IO2DgOyehVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXJcbiAgOiBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWVcbiAgICA/IFBhdGggZXh0ZW5kcyBrZXlvZiBUVGFibGVzW2tleW9mIFRUYWJsZXNdXG4gICAgICA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc11bUGF0aF1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vLyBXaGVyZSDsobDqsbQg6rCd7LK0IO2DgOyehVxuLy8g7JiIOiB7IFwidS5pZFwiOiAxLCBcInUuc3RhdHVzXCI6IFwiYWN0aXZlXCIgfVxuZXhwb3J0IHR5cGUgV2hlcmVDb25kaXRpb248VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtrZXkgaW4gQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPl0/OiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBrZXkgJiBzdHJpbmc+O1xufTtcblxuLy8gRnVsbHRleHQgaW5kZXgg7Lus65+8IOy2lOy2nCDtg4DsnoVcbmV4cG9ydCB0eXBlIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogVFRhYmxlc1tUQWxpYXNdIGV4dGVuZHMge1xuICAgIFtLIGluIEZ1bGx0ZXh0S2V5XTogcmVhZG9ubHkgKGluZmVyIENvbClbXTtcbiAgfVxuICAgID8gQ29sIGV4dGVuZHMgc3RyaW5nXG4gICAgICA/IGAke1RBbGlhcyAmIHN0cmluZ30uJHtDb2x9YFxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXI7XG59W2tleW9mIFRUYWJsZXNdO1xuXG4vLyDruYTqtZAg7Jew7IKw7J6QXG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj1cIiB8IFwiPlwiIHwgXCI+PVwiIHwgXCI8XCIgfCBcIjw9XCIgfCBcIjw+XCIgfCBcIiE9XCI7XG4vLyDsobDqsbQg7Jew7IKw7J6QOiDruYTqtZAg7Jew7IKw7J6QICsg7Yyo7YS0IOunpOy5rSDsl7DsgrDsnpBcbmV4cG9ydCB0eXBlIFdoZXJlT3BlcmF0b3IgPSBDb21wYXJpc29uT3BlcmF0b3IgfCBcImxpa2VcIiB8IFwibm90IGxpa2VcIiB8IFwiaWxpa2VcIiB8IFwibm90IGlsaWtlXCI7XG5leHBvcnQgY29uc3QgRlVaWllfT1BFUkFUT1JTID0gW1wiPCVcIiwgXCIlXCIsIFwiPDwlXCJdIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgRnV6enlPcGVyYXRvciA9ICh0eXBlb2YgRlVaWllfT1BFUkFUT1JTKVtudW1iZXJdO1xuXG4vLyBTUUwgRXhwcmVzc2lvbiDtg4DsnoUg7KCV7J2YXG5leHBvcnQgdHlwZSBTcWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBTcWxFeHByZXNzaW9uVHlwZSwgVE51bGxhYmxlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiA9IHtcbiAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIjsgLy8g65iQ64qUIFwiY29tcHV0ZWRfdmFsdWVcIlxuICBfcmV0dXJuOiBUO1xuICBfc3FsOiBzdHJpbmc7XG4gIF9wYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdO1xuICByZWFkb25seSBfbnVsbGFibGU/OiBUTnVsbGFibGU7XG59O1xuXG50eXBlIFBhcnNlU3FsRXhwcmVzc2lvbjxURXhwcmVzc2lvbj4gPVxuICBURXhwcmVzc2lvbiBleHRlbmRzIFNxbEV4cHJlc3Npb248aW5mZXIgVFJldHVybiwgaW5mZXIgVE51bGxhYmxlPlxuICAgID9cbiAgICAgICAgfCAoVFJldHVybiBleHRlbmRzIFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IFRSZXR1cm4gZXh0ZW5kcyBcIm51bWJlclwiXG4gICAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICAgIDogVFJldHVybiBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgICAgICAgICAgICAgPyBib29sZWFuXG4gICAgICAgICAgICAgICAgOiBUUmV0dXJuIGV4dGVuZHMgXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgID8gRGF0ZVxuICAgICAgICAgICAgICAgICAgOiBUUmV0dXJuIGV4dGVuZHMgXCJzdHJpbmdbXVwiXG4gICAgICAgICAgICAgICAgICAgID8gc3RyaW5nW11cbiAgICAgICAgICAgICAgICAgICAgOiBuZXZlcilcbiAgICAgICAgfCAodHJ1ZSBleHRlbmRzIFROdWxsYWJsZSA/IG51bGwgOiBuZXZlcilcbiAgICA6IG5ldmVyO1xuXG4vLyDqsrDqs7wg7YOA7J6FIOqwgOuPheyEseydhCDsnITtlZwg7YOA7J6FIO2ZleyepVxuZXhwb3J0IHR5cGUgRXhwYW5kPFQ+ID0gVCBleHRlbmRzIGFueVtdXG4gID8geyBbSyBpbiBrZXlvZiBUWzBdXTogVFswXVtLXSB9W10gLy8g67Cw7Je07J2066m0IOyyqyDrsojsp7gg7JqU7IaM66W8IEV4cGFuZO2VmOqzoCDrsLDsl7TroZwg6rCQ7IyIXG4gIDogVCBleHRlbmRzIG9iamVjdFxuICAgID8geyBbSyBpbiBrZXlvZiBUXTogVFtLXSB9XG4gICAgOiBUO1xuXG50eXBlIElzU2luZ2xlS2V5PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ga2V5b2YgVFRhYmxlcyBleHRlbmRzIGluZmVyIEtcbiAgPyBLIGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICAgID8ga2V5b2YgVFRhYmxlcyBleHRlbmRzIEsgLy8g7Jet67Cp7ZalIOyytO2BrOuhnCDri6jsnbwg7YKkIO2ZleyduFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVFRhYmxlc1trZXlvZiBUVGFibGVzXSA6IG5ldmVyO1xuXG4vLyBfX2hhc0RlZmF1bHRfX+yXkCDtj6ztlajrkJwg7YKk65Ok7J2EIFB1cmlUYWJsZTxUPuydmCDtgqTroZwg7KCc7ZWcXG50eXBlIEhhc0RlZmF1bHRLZXlzPFQ+ID0gVCBleHRlbmRzIHsgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IChpbmZlciBLKVtdIH1cbiAgPyBFeHRyYWN0PEssIGtleW9mIFB1cmlUYWJsZTxUPj5cbiAgOiBuZXZlcjtcblxuLy8gX19nZW5lcmF0ZWRfX+yXkCDtj6ztlajrkJwg7YKk65OkIChJTlNFUlQg7IucIOygnOyZuO2VtOyVvCDtlagpXG50eXBlIEdlbmVyYXRlZEtleXM8VD4gPSBUIGV4dGVuZHMgeyBfX2dlbmVyYXRlZF9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIF9fdmlydHVhbF9xdWVyeV9f7JeQIO2PrO2VqOuQnCDtgqTrk6QgKElOU0VSVCDsi5wg7KCc7Jm47ZW07JW8IO2VqClcbnR5cGUgVmlydHVhbFF1ZXJ5S2V5czxUPiA9IFQgZXh0ZW5kcyB7IF9fdmlydHVhbF9xdWVyeV9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIEluc2VydCDtg4DsnoU6IOuplO2DgOuNsOydtO2EsCDsoJzqsbAg7ZuELCBfX2hhc0RlZmF1bHRfXyDsu6zrn7zrk6Trp4wgb3B0aW9uYWzroZwg7LKY66asLCBnZW5lcmF0ZWQvdmlydHVhbFF1ZXJ5IOy7rOufvOydgCDsmYTsoITtnogg7KCc7Jm4XG5leHBvcnQgdHlwZSBJbnNlcnREYXRhPFQ+ID0gT21pdDxcbiAgUHVyaVRhYmxlPFQ+LFxuICBJbnRlcm5hbFR5cGVLZXlzIHwgSGFzRGVmYXVsdEtleXM8VD4gfCBHZW5lcmF0ZWRLZXlzPFQ+IHwgVmlydHVhbFF1ZXJ5S2V5czxUPlxuPiAmIHtcbiAgW0sgaW4gSGFzRGVmYXVsdEtleXM8VD5dPzogUHVyaVRhYmxlPFQ+W0tdO1xufTtcblxuLy8gSW5zZXJ0IFJlc3VsdCDtg4DsnoVcbmV4cG9ydCB0eXBlIEluc2VydFJlc3VsdCA9IFBpY2s8UXVlcnlSZXN1bHQsIFwiY29tbWFuZFwiIHwgXCJyb3dDb3VudFwiIHwgXCJyb3dzXCIgfCBcIm9pZFwiPjtcblxuLy8gU3Vic2V0UXVlcnnrpbwg7JyE7ZWcIO2DgOyehSDsnKDti7jrpqzti7BcbmV4cG9ydCB0eXBlIEV4dHJhY3RUVGFibGVzPFQgZXh0ZW5kcyBQdXJpPGFueSwgYW55LCBhbnk+PiA9XG4gIFQgZXh0ZW5kcyBQdXJpPGFueSwgaW5mZXIgVFRhYmxlcywgYW55PiA/IFRUYWJsZXMgOiBuZXZlcjtcbmV4cG9ydCB0eXBlIFVuaW9uRXh0cmFjdGVkVFRhYmxlczxcbiAgU3Vic2V0S2V5IGV4dGVuZHMgc3RyaW5nLFxuICBTdWJzZXRRdWVyaWVzIGV4dGVuZHMgUmVjb3JkPFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSB7XG4gIFtLIGluIFN1YnNldEtleV06IEV4dHJhY3RUVGFibGVzPFJldHVyblR5cGU8U3Vic2V0UXVlcmllc1tLXT4+O1xufVtTdWJzZXRLZXldO1xuXG4vLyBPTiBDT05GTElDVCDrjIDsg4Eg7YOA7J6FXG4vLyAtIOuLqOydvCDsu6zrn7w6IFwiZW1haWxcIlxuLy8gLSDrs7XsiJgg7Lus65+8OiBbXCJ1c2VyX2lkXCIsIFwicHJvZHVjdF9pZFwiXVxuZXhwb3J0IHR5cGUgT25Db25mbGljdFRhcmdldCA9IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4vLyBPTiBDT05GTElDVCDslaHshZgg7YOA7J6FXG4vLyAtIFwibm90aGluZ1wiOiBETyBOT1RISU5HXG4vLyAtIHsgdXBkYXRlOiBbLi4uXSB9OiBETyBVUERBVEVcbmV4cG9ydCB0eXBlIE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPVxuICB8IFwibm90aGluZ1wiXG4gIHwge1xuICAgICAgdXBkYXRlOlxuICAgICAgICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5bXSAvLyDrsLDsl7Qg7ZiV7YOcIC0gW1wibmFtZVwiLCBcImVtYWlsXCJdXG4gICAgICAgIHwgV2hlcmVDb25kaXRpb248VFRhYmxlcz47IC8vIOqwneyytCDtmJXtg5wgLSB7IG5hbWU6IFwiSm9oblwiLCBjb3VudDogUHVyaS5yYXdOdW1iZXIoLi4uKSB9XG4gICAgfTtcblxuLy8gRksg7Lus65+866qFIOy2lOy2nCDsnKDti7jrpqzti7Ag7YOA7J6FIC0gRGF0YWJhc2VGb3JlaWduS2V5cyDtmZzsmqlcbmV4cG9ydCB0eXBlIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+ID1cbiAgVFRhYmxlIGV4dGVuZHMga2V5b2YgRGF0YWJhc2VGb3JlaWduS2V5cyA/IERhdGFiYXNlRm9yZWlnbktleXNbVFRhYmxlXSA6IG5ldmVyO1xuXG4vLyBVbmlvbuydhCBJbnRlcnNlY3Rpb27snLzroZwg67OA7ZmY7ZWY64qUIOycoO2LuOumrO2LsFxudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXG4gID8gSVxuICA6IG5ldmVyO1xuXG4vLyBTZWxlY3RBbGwg7IucIOuqqOuToCDsobDsnbjrkJwg7YWM7J2067iU7J2YIOy7rOufvCDtj6ztlahcbmV4cG9ydCB0eXBlIFNlbGVjdEFsbFJlc3VsdDxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9IFVuaW9uVG9JbnRlcnNlY3Rpb248XG4gIHtcbiAgICBbSyBpbiBrZXlvZiBUVGFibGVzXTogVFRhYmxlc1tLXSBleHRlbmRzIGluZmVyIFRcbiAgICAgID8gVCBleHRlbmRzIExlZnRKb2luZWRNYXJrZXJcbiAgICAgICAgPyBQYXJ0aWFsPE9taXRJbnRlcm5hbFR5cGVLZXlzPFQ+PiAvLyBMRUZUIEpPSU7snYAgbnVsbGFibGUsIOuplO2DgOuNsOydtO2EsCDsoJzqsbBcbiAgICAgICAgOiBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiAvLyBJTk5FUiBKT0lO7J2AIG5vbi1udWxsYWJsZSwg66mU7YOA642w7J207YSwIOygnOqxsFxuICAgICAgOiBuZXZlcjtcbiAgfVtrZXlvZiBUVGFibGVzXVxuPjtcblxuLy8gRlRTIO2DgOyehVxudHlwZSBUc1F1ZXJ5UGFyc2VyID0gXCJ0b190c3F1ZXJ5XCIgfCBcInBsYWludG9fdHNxdWVyeVwiIHwgXCJwaHJhc2V0b190c3F1ZXJ5XCIgfCBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG5leHBvcnQgdHlwZSBUc1F1ZXJ5Q29uZmlnID0gXCJzaW1wbGVcIiB8IFwiZW5nbGlzaFwiO1xuZXhwb3J0IHR5cGUgVHNRdWVyeU9wdGlvbnMgPSB7XG4gIHBhcnNlcj86IFRzUXVlcnlQYXJzZXI7XG4gIGNvbmZpZz86IFRzUXVlcnlDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBUc0hpZ2hsaWdodE9wdGlvbnMgPSB7XG4gIC8qKiDsv7zrpqwg67OA7ZmYIO2VqOyImCAo6riw67O46rCSOiBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCIpICovXG4gIHBhcnNlcj86IFRzUXVlcnlQYXJzZXI7XG4gIC8qKiDthY3siqTtirgg6rKA7IOJIOyEpOyglSAo6riw67O46rCSOiBcInNpbXBsZVwiKSAqL1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xuICAvKiog7LWc64yAIOuLqOyWtCDsiJggKOq4sOuzuOqwkjogMzUpICovXG4gIG1heFdvcmRzPzogbnVtYmVyO1xuICAvKiog7LWc7IaMIOuLqOyWtCDsiJggKOq4sOuzuOqwkjogMTUpICovXG4gIG1pbldvcmRzPzogbnVtYmVyO1xuICAvKiog7Zek65Oc65287J24IOyLnOyekS/rgZ3sl5DshJwg7KCc6rGw7ZWgIOynp+ydgCDri6jslrQg6ri47J20ICjquLDrs7jqsJI6IDMpICovXG4gIHNob3J0V29yZD86IG51bWJlcjtcbiAgLyoqIHRydWXrqbQg7KCE7LK0IOusuOyEnOulvCDtl6Trk5zrnbzsnbjsnLzroZwg7IKs7JqpICjquLDrs7jqsJI6IGZhbHNlKSAqL1xuICBoaWdobGlnaHRBbGw/OiBib29sZWFuO1xuICAvKiog7ZGc7Iuc7ZWgIOy1nOuMgCDthY3siqTtirgg7KGw6rCBIOyImCAo6riw67O46rCSOiAwLCDsobDqsIEg66+47IKs7JqpKSAqL1xuICBtYXhGcmFnbWVudHM/OiBudW1iZXI7XG4gIC8qKiDsv7zrpqwg64uo7Ja0IOyLnOyekSDqtazrtoTsnpAgKOq4sOuzuOqwkjogXCI8Yj5cIikgKi9cbiAgc3RhcnRTZWw/OiBzdHJpbmc7XG4gIC8qKiDsv7zrpqwg64uo7Ja0IOuBnSDqtazrtoTsnpAgKOq4sOuzuOqwkjogXCI8L2I+XCIpICovXG4gIHN0b3BTZWw/OiBzdHJpbmc7XG4gIC8qKiDsobDqsIEg6rWs67aE7J6QICjquLDrs7jqsJI6IFwiIC4uLiBcIikgKi9cbiAgZnJhZ21lbnREZWxpbWl0ZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUc1JhbmtPcHRpb25zID0ge1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xuICAvKiog6rCA7KSR7LmYIOuwsOyXtCBbRCwgQywgQiwgQV0gKOq4sOuzuOqwkjogWzAuMSwgMC4yLCAwLjQsIDEuMF0pICovXG4gIHdlaWdodHM/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIOygleq3nO2ZlCDsmLXshZhcbiAgICogMDog66y47IScIOq4uOydtCDrrLTsi5wgKOq4sOuzuOqwkilcbiAgICogMTogMSArIGxvZyjrrLjshJwg6ri47J20KeuhnCDrgpjriJRcbiAgICogMjog66y47IScIOq4uOydtOuhnCDrgpjriJRcbiAgICogNDog7Y+J6regIOyhsO2ZlCDqsbDrpqzroZwg64KY64iUICh0c19yYW5rX2Nk66eMKVxuICAgKiA4OiDqs6DsnKAg64uo7Ja0IOyImOuhnCDrgpjriJRcbiAgICogMTY6IDEgKyBsb2co6rOg7JygIOuLqOyWtCDsiJgp66GcIOuCmOuIlFxuICAgKiAzMjogcmFuay8ocmFuaysxKSAtPiAwfjEg7IKs7J207J2YIOqwkuycvOuhnCDsiqTsvIDsnbzrp4FcbiAgICpcbiAgICog67mE7Yq466eI7Iqk7YGs66W8IOyCrOyaqe2VmOyXrCDsmLXshZjsnYQg7KGw7ZWp7ZWgIOyImCDsnojsnYxcbiAgICog7JiIOiA4IHwgMzIgLT4g6rOg7JygIOuLqOyWtCDsiJjroZwg64KY64iE6rOgIDB+MSDsiqTsvIDsnbzrp4FcbiAgICovXG4gIG5vcm1hbGl6YXRpb24/OiBudW1iZXI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0NBK1NhLGtCQUFrQjtFQUFDO0VBQU07RUFBSztDQUFLIn0=
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcHVyaS50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBveGxpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovIC8vIFB1cmkudHlwZXMudHPripQg64uk7JaR7ZWcIO2DgOyeheydhCDsgqzsmqntlZjqs6Ag7J6I7Iq164uI64ukLlxuXG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFiYXNlRm9yZWlnbktleXMsIHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHVyaSB9IGZyb20gXCIuL3B1cmlcIjtcbmltcG9ydCB7IHR5cGUgUHVyaVN1YnNldEZuIH0gZnJvbSBcIi4vcHVyaS1zdWJzZXQudHlwZXNcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIOuCtOu2gCDtg4DsnoUg7YKkICjrqZTtg4DrjbDsnbTthLApXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudHlwZSBGdWxsdGV4dEtleSA9IFwiX19mdWxsdGV4dF9fXCI7XG50eXBlIFZpcnR1YWxLZXkgPSBcIl9fdmlydHVhbF9fXCI7XG50eXBlIExlZnRKb2luZWRLZXkgPSBcIl9fbGVmdEpvaW5lZF9fXCI7XG50eXBlIEhhc0RlZmF1bHQgPSBcIl9faGFzRGVmYXVsdF9fXCI7XG50eXBlIEdlbmVyYXRlZEtleSA9IFwiX19nZW5lcmF0ZWRfX1wiO1xudHlwZSBWZWN0b3JLZXkgPSBcIl9fdmVjdG9yX19cIjtcbnR5cGUgSnNvbktleSA9IFwiX19qc29uX19cIjtcbnR5cGUgVmlydHVhbFF1ZXJ5S2V5ID0gXCJfX3ZpcnR1YWxfcXVlcnlfX1wiO1xudHlwZSBTcWxFeHByZXNzaW9uVHlwZSA9IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiB8IFwidHN2ZWN0b3JcIjtcblxudHlwZSBJbnRlcm5hbFR5cGVLZXlzID1cbiAgfCBGdWxsdGV4dEtleVxuICB8IFZpcnR1YWxLZXlcbiAgfCBMZWZ0Sm9pbmVkS2V5XG4gIHwgSGFzRGVmYXVsdFxuICB8IEdlbmVyYXRlZEtleVxuICB8IFZlY3RvcktleVxuICB8IEpzb25LZXlcbiAgfCBWaXJ0dWFsUXVlcnlLZXk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyDtg4DsnoUg7Jyg7Yu466as7YuwXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBfX3ZlY3Rvcl9fIOuplO2DgOuNsOydtO2EsOyXkOyEnCDrsqHthLAg7Lus65+8IOy2lOy2nFxudHlwZSBWZWN0b3JDb2x1bW5LZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmVjdG9yS2V5XTogcmVhZG9ubHkgKGluZmVyIFYpW10gfVxuICA/IFYgJiBzdHJpbmdcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke1ZlY3RvckNvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVmVjdG9yQ29sdW1uS2V5czxUVGFibGVzW2tleW9mIFRUYWJsZXNdPiA6IG5ldmVyKTtcblxuLy8gX19qc29uX18g66mU7YOA642w7J207YSw7JeQ7IScIEpTT04g7Lus65+8IOy2lOy2nFxudHlwZSBKc29uQ29sdW1uS2V5czxUPiA9IFQgZXh0ZW5kcyB7IFtLIGluIEpzb25LZXldOiByZWFkb25seSAoaW5mZXIgSilbXSB9ID8gSiAmIHN0cmluZyA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBKc29uQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0pzb25Db2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IEpzb25Db2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IDogbmV2ZXIpO1xuXG50eXBlIEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPFQ+ID0gVCBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFbGVtZW50KVtdXG4gID8gSnNvblN1cGVyc2V0TmVzdGVkVmFsdWU8RWxlbWVudD5bXVxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBKc29uU3VwZXJzZXROZXN0ZWRWYWx1ZTxUW0tdPiB9XG4gICAgOiBUO1xuXG5leHBvcnQgdHlwZSBKc29uU3VwZXJzZXRWYWx1ZTxUPiA9IEpzb25TdXBlcnNldE5lc3RlZFZhbHVlPE5vbk51bGxhYmxlPFQ+PjtcblxuLy8g7YWM7J2067iU66qFIO2DgOyehVxuZXhwb3J0IHR5cGUgVGFibGVOYW1lPFRTY2hlbWE+ID0ga2V5b2YgVFNjaGVtYSAmIHN0cmluZztcblxuLy8g7YWM7J2067iU7J2YIGlkKFBLKSDtg4DsnoXsnYQg7LaU7LacXG5leHBvcnQgdHlwZSBJZFR5cGU8VFNjaGVtYSwgVFRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4gPSBUU2NoZW1hW1RUYWJsZV0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgPyBJXG4gIDogbnVtYmVyO1xuXG4vLyB2aXJ0dWFsIOy7rOufvCDtg4DsnoUg7LaU7LacXG50eXBlIFZpcnR1YWxLZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmlydHVhbEtleV06IHJlYWRvbmx5IChpbmZlciBWKVtdIH0gPyBWICYgc3RyaW5nIDogbmV2ZXI7XG5cbi8vIHZpcnR1YWwg7Lus65+8IOygnOqxsFxudHlwZSBTdHJpcFZpcnR1YWw8VD4gPSBPbWl0PFQsIFZpcnR1YWxLZXlzPFQ+PjtcblxuLy8gTEVGVCBKT0lOIOuniOy7pCAtIG51bGxhYmxlIEZL66GcIOyhsOyduOuQnCDthYzsnbTruJRcbi8vIOydtCDrp4jsu6TripQgbnVsbGFibGUgRksgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxuLy8gam9pbiArIEZLIG51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBub24tbnVsbGFibGUgLT4g7JWIIOu2meydjFxuLy8gbGVmdEpvaW4gKyBGSyBudWxsYWJsZSAtPiDrtpnsnYwhXG5leHBvcnQgdHlwZSBMZWZ0Sm9pbmVkTWFya2VyID0geyBbSyBpbiBMZWZ0Sm9pbmVkS2V5XTogdHJ1ZSB9O1xuXG4vLyDrqZTtg4DrjbDsnbTthLAg7ZWE65OcIOygnOyZuO2VnCDsi6TsoJwg7JeU7Yuw7YuwIOy7rOufvFxuZXhwb3J0IHR5cGUgQ29sdW1uS2V5czxUPiA9IEV4Y2x1ZGU8a2V5b2YgU3RyaXBWaXJ0dWFsPFQ+LCBJbnRlcm5hbFR5cGVLZXlzPiAmIHN0cmluZztcblxuLy8gdmlydHVhbCDsu6zrn7wg7KCc6rGwIO2bhCBfX2Z1bGx0ZXh0X18g7Jyg7KeAXG5leHBvcnQgdHlwZSBQdXJpVGFibGU8VD4gPSBPbWl0PFN0cmlwVmlydHVhbDxUPiwgVmlydHVhbEtleT47XG5cbi8vIOuCtOu2gCDtg4DsnoUg7YKkIOygnOyZuCAo7Iuk7KCcIOy7rOufvOunjCDrgqjquYApXG5leHBvcnQgdHlwZSBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiA9IE9taXQ8VCwgSW50ZXJuYWxUeXBlS2V5cz47XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOy7rOufvCDqsr3roZxcbmV4cG9ydCB0eXBlIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSAoXG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IENvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gLy8g64uo7J28IO2FjOydtOu4lOydtOuptCDsu6zrn7zrqoXrp4zrj4Qg7ZeI7JqpXG4gICAgICA6IG5ldmVyKVxuKSAmXG4gIHN0cmluZztcblxuLy8g7Iir7J6QIO2DgOyehSDsu6zrn7zrp4wg7LaU7Lac7ZWY64qUIOycoO2LuOumrO2LsCDtg4DsnoVcbnR5cGUgTnVtZXJpY0NvbHVtbktleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50IHwgbnVsbCB8IHVuZGVmaW5lZCA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF0gJlxuICBzdHJpbmc7XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsiKvsnpAg7YOA7J6FIOy7rOufvOunjCDstpTstpxcbmV4cG9ydCB0eXBlIE51bWVyaWNDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgfCB7XG4gICAgICBbVEFsaWFzIGluIGtleW9mIFRUYWJsZXNdOiBgJHtUQWxpYXMgJiBzdHJpbmd9LiR7TnVtZXJpY0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IE51bWVyaWNDb2x1bW5LZXlzPFRUYWJsZXNba2V5b2YgVFRhYmxlc10+IC8vIOuLqOydvCDthYzsnbTruJTsnbTrqbQg7Lus65+866qF66eM64+EIO2XiOyaqVxuICAgICAgOiBuZXZlcik7XG5cbi8vIEdyb3VwIEJ5LCBPcmRlciBCeSwgSGF2aW5nIOuTseyXkOyEnCDshKDtg50g6rCA64ql7ZWcIOy7rOufvFxuZXhwb3J0IHR5cGUgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgb2JqZWN0LCBUUmVzdWx0ID0gYW55PiA9XG4gIHwgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPlxuICB8IGAke2tleW9mIFRSZXN1bHQgJiBzdHJpbmd9YDtcblxuLy8gU2VsZWN0IOqwkiDtg4DsnoUg7ZmV7J6lICjri6jsnbwg7Lus65+8IOuYkOuKlCBTUUwg7ZGc7ZiE7IudKVxuZXhwb3J0IHR5cGUgU2VsZWN0VmFsdWU8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPVxuICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5cbiAgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIiwgYm9vbGVhbj47XG5cbi8vIOykkeyyqSBTZWxlY3Qg6rCd7LK0IO2DgOyehSAo7J6s6reA7KCBKVxuLy8g7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuZXhwb3J0IHR5cGUgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5OiBzdHJpbmddOiBTZWxlY3RWYWx1ZTxUVGFibGVzPiB8IE5lc3RlZFNlbGVjdE9iamVjdDxUVGFibGVzPjtcbn07XG5cbi8vIFNlbGVjdCDqsJ3ssrQg7YOA7J6FIChmbGF0IOuYkOuKlCDspJHssqkg7ZeI7JqpKVxuZXhwb3J0IHR5cGUgU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0gTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXM+O1xuXG4vLyDqsJLsnbQg7KSR7LKpIOqwneyytOyduOyngCDtjJDrs4TtlZjripQg7Zes7Y28IO2DgOyehVxudHlwZSBJc05lc3RlZE9iamVjdDxUPiA9IFQgZXh0ZW5kcyBzdHJpbmdcbiAgPyBmYWxzZVxuICA6IFQgZXh0ZW5kcyBTcWxFeHByZXNzaW9uPFNxbEV4cHJlc3Npb25UeXBlLCBib29sZWFuPlxuICAgID8gZmFsc2VcbiAgICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcblxuLy8g7Lus65+87J20IG51bGxhYmxl7J247KeAIO2ZleyduCAo7Iqk7YKk66eI7JeQ7IScIOyngeygkSDstpTstpwpXG4vLyDsmIg6IElzTnVsbGFibGVDb2x1bW48VFRhYmxlcywgXCJlbXBsb3llZXMuZGVwYXJ0bWVudF9pZFwiPiDihpIgZGVwYXJ0bWVudF9pZOqwgCBudW1iZXIgfCBudWxs7J2066m0IHRydWVcbmV4cG9ydCB0eXBlIElzTnVsbGFibGVDb2x1bW48XG4gIFRUYWJsZXMsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IG51bGwgZXh0ZW5kcyBUVGFibGVzW1RBbGlhc11bVENvbHVtbl1cbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2VcbiAgICA6IGZhbHNlXG4gIDogZmFsc2U7XG5cbi8vIEZLIG51bGxhYmxlIOyXrOu2gOyXkCDrlLDrpbgg66eI7LukIO2DgOyehSDqsrDsoJVcbi8vIG51bGxhYmxlIEZL66GcIGxlZnRKb2luIOKGkiBMZWZ0Sm9pbmVkTWFya2VyICjqsJ3ssrQg7J6Q7LK06rCAIG51bGzsnbwg7IiYIOyeiOydjClcbi8vIG5vbi1udWxsIEZL66GcIGxlZnRKb2luIOKGkiDrp4jsu6Qg7JeG7J2MICjrtoDrqqjqsIAg7J6I7Jy866m0IOyekOyLneuPhCDrsJjrk5zsi5wg7J6I7J2MKVxuZXhwb3J0IHR5cGUgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgUGF0aCBleHRlbmRzIHN0cmluZz4gPVxuICBJc051bGxhYmxlQ29sdW1uPFRUYWJsZXMsIFBhdGg+IGV4dGVuZHMgdHJ1ZSA/IExlZnRKb2luZWRNYXJrZXIgOiB7fTtcblxuLy8g7KO87Ja07KeEIO2FjOydtOu4lOydtCBGSyBudWxsYWJsZeuhnCBsZWZ0Sm9pbiDrkJwg7YWM7J2067iU7J247KeAIO2ZleyduO2VqeuLiOuLpC5cbi8vIOyCrOyLpCBMZWZ0Sm9pbk1hcmtlcuqwgCDrtpnsl4jripTsp4Ag7ZmV7J247ZWY64qU6rKMIOuLpOyeheuLiOuLpC5cbi8vIOydtCDrp4jsu6TripQgRksgbnVsbGFibGUgKyBsZWZ0Sm9pbiDsobDtlansl5DshJzrp4wg67aZ7Iq164uI64ukLlxudHlwZSBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgVGFibGVLZXk+ID0gVGFibGVLZXkgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gID8gVFRhYmxlc1tUYWJsZUtleV0gZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgPyB0cnVlIC8vIExlZnRKb2luZWRNYXJrZXLqsIAg7J6I7Jy866m0IG51bGxhYmxlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG4vLyDqsr3roZwg7KGw7ZWpIO2XrO2NvCAocHJlZml46rCAIOyXhuycvOuptCBrZXnrp4wsIOyeiOycvOuptCBwcmVmaXhfX2tleSlcbnR5cGUgSm9pblBhdGg8UHJlZml4IGV4dGVuZHMgc3RyaW5nLCBLZXkgZXh0ZW5kcyBzdHJpbmc+ID0gUHJlZml4IGV4dGVuZHMgXCJcIlxuICA/IEtleVxuICA6IGAke1ByZWZpeH1fXyR7S2V5fWA7XG5cbi8vIFNlbGVjdCDqsrDqs7wg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDsuZzqtazsnoXri4jri6QuXG4vLyDsnbQg7YOA7J6F7J2AIFB1cmnsnZggc2VsZWN0LCBhcHBlbmRTZWxlY3Tsl5DshJwgVFJlc3VsdOuhnCDsgqzsmqnrkKnri4jri6QuXG4vL1xuLy8gU2NoZW1h66W8IOydveyWtOyEnCBGS+ydmCBudWxsYWJpbGl0eeyXkCDrlLDrnbwgam9pbuuQnCDqsJ3ssrTsnZgg7YOA7J6F7J2EIOy2lOuhoO2VtOyjvOuKlCDquLDriqXsnbQg7J6I7Iq164uI64ukLlxuLy8g7J206rKMIOustOyKqCDshozrpqzrg5A/IEZL6rCAIG51bGxhYmxl7J24642wIGxlZnRKb2lu65CY7JeI64uk66m0LCDtlbTri7kg6rCd7LK064qUIG51bGxhYmxlIO2VtOyVvCDtlajsnYQg7YOA7J6FIOy2lOuhoOycvOuhnCDrsJjsmIHtlbTspIDri6TripQg6rKD7J6F64uI64ukLlxuLy8g67CY66m0IEZL6rCAIG5vbi1udWxsYWJsZeydtOqxsOuCmCDqt7jrg6Ugam9pbuycvOuhnCDsnbTslrTsoYzri6TrqbQg7ZW064u5IOqwneyytOuKlCBub24tbnVsbGFibGXtlaAg6rKB64uI64ukLlxuLy8g66y866GgIOqwneyytCDrgrTrtoDsnZggbnVsbGFiaWxpdHnripQg65iQIOuzhOqwnOuhnCDstpTroaDrkKnri4jri6QuXG4vL1xuLy8g7JWE656Y7JeQ64+EIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGjrpbwg67mE66Gv7ZW0IEV4dHJhY3RDb2x1bW5UeXBlLCBFeHRyYWN0Q29sdW1uVHlwZVJhdyDrk7HsnZgg7YOA7J6F7J20IOyeiOyKteuLiOuLpC5cbi8vIOydtOuTpOydmCDsl63tlaDsnYAg64uk7J2M6rO8IOqwmeyKteuLiOuLpDpcbi8vIC0gUGFyc2UqOiDqsJ3ssrQg66CI67Ko7JeQ7IScIOykkeyyqSDqtazsobDrpbwg7Iic7ZqM7ZWY66mwIOqwneyytOyXkCB8IG51bGzsnYQg67aZ7J287KeAIOqysOygle2VqeuLiOuLpC5cbi8vIC0gRXh0cmFjdCo6IO2VhOuTnCDroIjrsqjsl5DshJwgXCJ0YWJsZS5jb2x1bW5cIiDqsr3roZzroZzrtoDthLAg7Iuk7KCcIO2DgOyeheydhCDstpTstpztlanri4jri6QuXG4vL1xuLy8g7JiI7IucOlxuLy8gLnNlbGVjdCh7XG4vLyAgIGlkOiBcInVzZXJzLmlkXCIsICAgICAgICAgICAvLyDihpAgRXh0cmFjdENvbHVtblR5cGXsnZgg6rKw6rO864qUIG51bWJlcuyeheuLiOuLpC5cbi8vICAgZGVwYXJ0bWVudDogeyAgICAgICAgICAgICAvLyDihpAgUGFyc2VTZWxlY3RPYmplY3RJbm5lcuyXkCDsnZjtlbQgbnVsbGFibGUg6rCd7LK066GcIOy2lOuhoOuQqeuLiOuLpC5cbi8vICAgICBpZDogXCJkZXBhcnRtZW50LmlkXCIsICAgIC8vIOKGkCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ydmCDqsrDqs7zripQgbnVtYmVy7J6F64uI64ukLlxuLy8gICAgIG5hbWU6IFwiZGVwYXJ0bWVudC5uYW1lXCIgLy8g4oaQIEV4dHJhY3RDb2x1bW5UeXBlUmF37J2YIOqysOqzvOuKlCBzdHJpbmfsnoXri4jri6QuXG4vLyAgIH1cbi8vIH0pXG5leHBvcnQgdHlwZSBQYXJzZVNlbGVjdE9iamVjdDxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbj4gPSBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRoPFRUYWJsZXMsIFRTZWxlY3QsIFwiXCI+O1xuXG4vLyDrs4Tsua3snbQg64uk66W4IOq0gOqzhCDqt7jro7nrj4Qg66qF7Iuc7ZWcIGlk7J2YIG51bGxhYmxlIEpPSU4g7JuQ67O47J2EIOuUsOumheuLiOuLpC5cbnR5cGUgSXNOdWxsYWJsZVNlbGVjdEdyb3VwPFRUYWJsZXMsIFRTZWxlY3QsIFBhdGggZXh0ZW5kcyBzdHJpbmc+ID1cbiAgSXNOdWxsYWJsZUpvaW5lZFRhYmxlPFRUYWJsZXMsIFBhdGg+IGV4dGVuZHMgdHJ1ZVxuICAgID8gdHJ1ZVxuICAgIDogVFNlbGVjdCBleHRlbmRzIHsgaWQ6IGAke2luZmVyIEFsaWFzfS4ke3N0cmluZ31gIH1cbiAgICAgID8gSXNOdWxsYWJsZUpvaW5lZFRhYmxlPFRUYWJsZXMsIEFsaWFzPlxuICAgICAgOiBmYWxzZTtcblxuLy8g6rK966Gc66W8IOy2lOygge2VmOuptOyEnCBTZWxlY3Qg6rKw6rO8IO2DgOyeheydhCDstpTroaDtlanri4jri6QuXG50eXBlIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGg8XG4gIFRUYWJsZXMgZXh0ZW5kcyBvYmplY3QsXG4gIFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4sXG4gIFByZWZpeCBleHRlbmRzIHN0cmluZyxcbj4gPSBFeHBhbmQ8e1xuICBbSyBpbiBrZXlvZiBUU2VsZWN0XTogVFNlbGVjdFtLXSBleHRlbmRzIFNxbEV4cHJlc3Npb248U3FsRXhwcmVzc2lvblR5cGUsIGJvb2xlYW4+XG4gICAgPyBQYXJzZVNxbEV4cHJlc3Npb248VFNlbGVjdFtLXT5cbiAgICA6IElzTmVzdGVkT2JqZWN0PFRTZWxlY3RbS10+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBUU2VsZWN0W0tdIGV4dGVuZHMgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXM+XG4gICAgICAgID8gSXNOdWxsYWJsZVNlbGVjdEdyb3VwPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+IGV4dGVuZHMgdHJ1ZSAvLyDso7zslrTsp4Qg7YWM7J2067iU7J20IEZLIG51bGxhYmxl7JeQIGxlZnRKb2lu65CY7JeI64qU7KeAIOyXrOu2gOyXkCDrlLDrnbwgc2VsZWN0IOqysOqzvCDqsJ3ssrTsnZgg7YOA7J6F7J20IOuLrOudvOynkeuLiOuLpC5cbiAgICAgICAgICA/IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiB8IG51bGwgLy8g66eM7JW9IO2VtOuLue2VnOuLpOuptCDtlbTri7kg6rCd7LK0IOyekOyytOuKlCBudWxsYWJsZSDtlZjrqbAsXG4gICAgICAgICAgOiBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj4gLy8g6re466CH7KeAIOyViuuLpOuptCBub24tbnVsbGFibGUg7ZWp64uI64ukLlxuICAgICAgICA6IG5ldmVyXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRTZWxlY3RbS10gJiBzdHJpbmc+O1xufT47XG5cbi8vIOykkeyyqSDqsJ3ssrQg64K067aA7JqpIC0gbGVmdEpvaW4gbnVsbGFibGXsnYQg6rCd7LK0IOugiOuyqOyXkOyEnCDsnbTrr7gg7LKY66as7ZaI7Jy866+A66GcIO2VhOuTnOuKlCDsm5Drs7gg7YOA7J6F7J2EIOyCrOyaqe2VqeuLiOuLpC5cbi8vIFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGjsmYAg6rGw7J2YIOuPmeydvO2VmOuCmCwg66eI7KeA66eJ7JeQIEV4dHJhY3RDb2x1bW5UeXBlIOuMgOyLoCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ulvCDsgqzsmqntlZjsl6xcbi8vIO2VhOuTnCDroIjrsqjsl5DshJwg7KSR67O17Jy866GcIHwgbnVsbOydtCDstpTqsIDrkJjripQg6rKD7J2EIOuwqeyngO2VqeuLiOuLpC5cbnR5cGUgUGFyc2VTZWxlY3RPYmplY3RJbm5lcjxcbiAgVFRhYmxlcyBleHRlbmRzIG9iamVjdCxcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxTcWxFeHByZXNzaW9uVHlwZSwgYm9vbGVhbj5cbiAgICA/IFBhcnNlU3FsRXhwcmVzc2lvbjxUU2VsZWN0W0tdPlxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlU2VsZWN0R3JvdXA8VFRhYmxlcywgVFNlbGVjdFtLXSwgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj4gfCBudWxsXG4gICAgICAgICAgOiBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj5cbiAgICAgICAgOiBuZXZlclxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZVJhdzxUVGFibGVzLCBUU2VsZWN0W0tdICYgc3RyaW5nPjsgLy8gbGVmdEpvaW4gbnVsbGFibGUg66y07IucXG59PjtcblxuLy8g7Lus65+8IOqyveuhnOyXkOyEnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLiBMZWZ0Sm9pbmVkTWFya2Vy6rCAIOyeiOycvOuptCB8IG51bGzsnYQg7LaU6rCA7ZWp64uI64ukLlxuLy8g7LWc7IOB7JyEIHNlbGVjdCDtlYTrk5zsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuZXhwb3J0IHR5cGUgRXh0cmFjdENvbHVtblR5cGU8XG4gIFRUYWJsZXMgZXh0ZW5kcyBvYmplY3QsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IFRUYWJsZXNbVEFsaWFzXSBleHRlbmRzIExlZnRKb2luZWRNYXJrZXJcbiAgICAgICAgPyBUVGFibGVzW1RBbGlhc11bVENvbHVtbl0gfCBudWxsIC8vIExFRlQgSk9JTiAobnVsbGFibGUgRkspIOKGkiBudWxsYWJsZVxuICAgICAgICA6IFRUYWJsZXNbVEFsaWFzXVtUQ29sdW1uXSAvLyBJTk5FUiBKT0lOIOuYkOuKlCBub24tbnVsbCBGSyBsZWZ0Sm9pbiDihpIgbm9uLW51bGxhYmxlXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlclxuICA6IElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZVxuICAgID8gUGF0aCBleHRlbmRzIGtleW9mIFRUYWJsZXNba2V5b2YgVFRhYmxlc11cbiAgICAgID8gVFRhYmxlc1trZXlvZiBUVGFibGVzXVtQYXRoXVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXI7XG5cbi8vIOy7rOufvCDqsr3roZzsl5DshJwg7YOA7J6F7J2EIOy2lOy2nO2VqeuLiOuLpC4gbGVmdEpvaW4g7Jes67aA7JmAIOq0gOqzhOyXhuydtCDsm5Drs7gg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbi8vIOykkeyyqSDqsJ3ssrQg64K067aAIO2VhOuTnOyXkOyEnCDsgqzsmqnrkKnri4jri6QuICjqsJ3ssrQg66CI67Ko7JeQ7IScIOydtOuvuCB8IG51bGwg7LKY66as6rCAIOyZhOujjOuQmOyXiOycvOuvgOuhnClcbnR5cGUgRXh0cmFjdENvbHVtblR5cGVSYXc8XG4gIFRUYWJsZXMgZXh0ZW5kcyBvYmplY3QsXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUGF0aCBleHRlbmRzIGAke2luZmVyIFRBbGlhc30uJHtpbmZlciBUQ29sdW1ufWBcbiAgPyBUQWxpYXMgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFRhYmxlc1tUQWxpYXNdXG4gICAgICA/IFRUYWJsZXNbVEFsaWFzXVtUQ29sdW1uXSAvLyBsZWZ0Sm9pbiDsl6zrtoDsmYAg6rSA6rOE7JeG7J20IOybkOuzuCDtg4DsnoVcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyXG4gIDogSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgPyBQYXRoIGV4dGVuZHMga2V5b2YgVFRhYmxlc1trZXlvZiBUVGFibGVzXVxuICAgICAgPyBUVGFibGVzW2tleW9mIFRUYWJsZXNdW1BhdGhdXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcblxuLy8gV2hlcmUg7KGw6rG0IOqwneyytCDtg4DsnoVcbi8vIOyYiDogeyBcInUuaWRcIjogMSwgXCJ1LnN0YXR1c1wiOiBcImFjdGl2ZVwiIH1cbmV4cG9ydCB0eXBlIFdoZXJlQ29uZGl0aW9uPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5IGluIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5dPzogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywga2V5ICYgc3RyaW5nPjtcbn07XG5cbi8vIEZ1bGx0ZXh0IGluZGV4IOy7rOufvCDstpTstpwg7YOA7J6FXG5leHBvcnQgdHlwZSBGdWxsdGV4dENvbHVtbnM8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtUQWxpYXMgaW4ga2V5b2YgVFRhYmxlc106IFRUYWJsZXNbVEFsaWFzXSBleHRlbmRzIHtcbiAgICBbSyBpbiBGdWxsdGV4dEtleV06IHJlYWRvbmx5IChpbmZlciBDb2wpW107XG4gIH1cbiAgICA/IENvbCBleHRlbmRzIHN0cmluZ1xuICAgICAgPyBgJHtUQWxpYXMgJiBzdHJpbmd9LiR7Q29sfWBcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xufVtrZXlvZiBUVGFibGVzXTtcblxuLy8g67mE6rWQIOyXsOyCsOyekFxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yID0gXCI9XCIgfCBcIj5cIiB8IFwiPj1cIiB8IFwiPFwiIHwgXCI8PVwiIHwgXCI8PlwiIHwgXCIhPVwiO1xuLy8g7KGw6rG0IOyXsOyCsOyekDog67mE6rWQIOyXsOyCsOyekCArIO2MqO2EtCDrp6Tsua0g7Jew7IKw7J6QXG5leHBvcnQgdHlwZSBXaGVyZU9wZXJhdG9yID0gQ29tcGFyaXNvbk9wZXJhdG9yIHwgXCJsaWtlXCIgfCBcIm5vdCBsaWtlXCIgfCBcImlsaWtlXCIgfCBcIm5vdCBpbGlrZVwiO1xuZXhwb3J0IGNvbnN0IEZVWlpZX09QRVJBVE9SUyA9IFtcIjwlXCIsIFwiJVwiLCBcIjw8JVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEZ1enp5T3BlcmF0b3IgPSAodHlwZW9mIEZVWlpZX09QRVJBVE9SUylbbnVtYmVyXTtcblxuLy8gU1FMIEV4cHJlc3Npb24g7YOA7J6FIOygleydmFxuZXhwb3J0IHR5cGUgU3FsRXhwcmVzc2lvbjxUIGV4dGVuZHMgU3FsRXhwcmVzc2lvblR5cGUsIFROdWxsYWJsZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSB7XG4gIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCI7IC8vIOuYkOuKlCBcImNvbXB1dGVkX3ZhbHVlXCJcbiAgX3JldHVybjogVDtcbiAgX3NxbDogc3RyaW5nO1xuICBfcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXTtcbiAgcmVhZG9ubHkgX251bGxhYmxlPzogVE51bGxhYmxlO1xufTtcblxudHlwZSBQYXJzZVNxbEV4cHJlc3Npb248VEV4cHJlc3Npb24+ID1cbiAgVEV4cHJlc3Npb24gZXh0ZW5kcyBTcWxFeHByZXNzaW9uPGluZmVyIFRSZXR1cm4sIGluZmVyIFROdWxsYWJsZT5cbiAgICA/XG4gICAgICAgIHwgKFRSZXR1cm4gZXh0ZW5kcyBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBUUmV0dXJuIGV4dGVuZHMgXCJudW1iZXJcIlxuICAgICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgICA6IFRSZXR1cm4gZXh0ZW5kcyBcImJvb2xlYW5cIlxuICAgICAgICAgICAgICAgID8gYm9vbGVhblxuICAgICAgICAgICAgICAgIDogVFJldHVybiBleHRlbmRzIFwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICA/IERhdGVcbiAgICAgICAgICAgICAgICAgIDogVFJldHVybiBleHRlbmRzIFwic3RyaW5nW11cIlxuICAgICAgICAgICAgICAgICAgICA/IHN0cmluZ1tdXG4gICAgICAgICAgICAgICAgICAgIDogbmV2ZXIpXG4gICAgICAgIHwgKHRydWUgZXh0ZW5kcyBUTnVsbGFibGUgPyBudWxsIDogbmV2ZXIpXG4gICAgOiBuZXZlcjtcblxuLy8g6rKw6rO8IO2DgOyehSDqsIDrj4XshLHsnYQg7JyE7ZWcIO2DgOyehSDtmZXsnqVcbmV4cG9ydCB0eXBlIEV4cGFuZDxUPiA9IFQgZXh0ZW5kcyBhbnlbXVxuICA/IHsgW0sgaW4ga2V5b2YgVFswXV06IFRbMF1bS10gfVtdIC8vIOuwsOyXtOydtOuptCDssqsg67KI7Ke4IOyalOyGjOulvCBFeHBhbmTtlZjqs6Ag67Cw7Je066GcIOqwkOyMiFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfVxuICAgIDogVDtcblxudHlwZSBJc1NpbmdsZUtleTxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9IGtleW9mIFRUYWJsZXMgZXh0ZW5kcyBpbmZlciBLXG4gID8gSyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IGtleW9mIFRUYWJsZXMgZXh0ZW5kcyBLIC8vIOyXreuwqe2WpSDssrTtgazroZwg64uo7J28IO2CpCDtmZXsnbhcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZVxuICAgIDogZmFsc2VcbiAgOiBmYWxzZTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzIGV4dGVuZHMgb2JqZWN0PiA9XG4gIElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc10gOiBuZXZlcjtcblxuLy8gX19oYXNEZWZhdWx0X1/sl5Ag7Y+s7ZWo65CcIO2CpOuTpOydhCBQdXJpVGFibGU8VD7snZgg7YKk66GcIOygnO2VnFxudHlwZSBIYXNEZWZhdWx0S2V5czxUPiA9IFQgZXh0ZW5kcyB7IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIF9fZ2VuZXJhdGVkX1/sl5Ag7Y+s7ZWo65CcIO2CpOuTpCAoSU5TRVJUIOyLnCDsoJzsmbjtlbTslbwg7ZWoKVxudHlwZSBHZW5lcmF0ZWRLZXlzPFQ+ID0gVCBleHRlbmRzIHsgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgKGluZmVyIEspW10gfVxuICA/IEV4dHJhY3Q8Sywga2V5b2YgUHVyaVRhYmxlPFQ+PlxuICA6IG5ldmVyO1xuXG4vLyBfX3ZpcnR1YWxfcXVlcnlfX+yXkCDtj6ztlajrkJwg7YKk65OkIChJTlNFUlQg7IucIOygnOyZuO2VtOyVvCDtlagpXG50eXBlIFZpcnR1YWxRdWVyeUtleXM8VD4gPSBUIGV4dGVuZHMgeyBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgKGluZmVyIEspW10gfVxuICA/IEV4dHJhY3Q8Sywga2V5b2YgUHVyaVRhYmxlPFQ+PlxuICA6IG5ldmVyO1xuXG4vLyBJbnNlcnQg7YOA7J6FOiDrqZTtg4DrjbDsnbTthLAg7KCc6rGwIO2bhCwgX19oYXNEZWZhdWx0X18g7Lus65+865Ok66eMIG9wdGlvbmFs66GcIOyymOumrCwgZ2VuZXJhdGVkL3ZpcnR1YWxRdWVyeSDsu6zrn7zsnYAg7JmE7KCE7Z6IIOygnOyZuFxuZXhwb3J0IHR5cGUgSW5zZXJ0RGF0YTxUPiA9IE9taXQ8XG4gIFB1cmlUYWJsZTxUPixcbiAgSW50ZXJuYWxUeXBlS2V5cyB8IEhhc0RlZmF1bHRLZXlzPFQ+IHwgR2VuZXJhdGVkS2V5czxUPiB8IFZpcnR1YWxRdWVyeUtleXM8VD5cbj4gJiB7XG4gIFtLIGluIEhhc0RlZmF1bHRLZXlzPFQ+XT86IFB1cmlUYWJsZTxUPltLXTtcbn07XG5cbi8vIEluc2VydCBSZXN1bHQg7YOA7J6FXG5leHBvcnQgdHlwZSBJbnNlcnRSZXN1bHQgPSBQaWNrPFF1ZXJ5UmVzdWx0LCBcImNvbW1hbmRcIiB8IFwicm93Q291bnRcIiB8IFwicm93c1wiIHwgXCJvaWRcIj47XG5cbi8vIFN1YnNldFF1ZXJ566W8IOychO2VnCDtg4DsnoUg7Jyg7Yu466as7YuwXG5leHBvcnQgdHlwZSBFeHRyYWN0VFRhYmxlczxUIGV4dGVuZHMgUHVyaTxhbnksIGFueSwgYW55Pj4gPVxuICBUIGV4dGVuZHMgUHVyaTxhbnksIGluZmVyIFRUYWJsZXMsIGFueT4gPyBUVGFibGVzIDogbmV2ZXI7XG5leHBvcnQgdHlwZSBVbmlvbkV4dHJhY3RlZFRUYWJsZXM8XG4gIFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxTdWJzZXRLZXksIFB1cmlTdWJzZXRGbj4sXG4+ID0ge1xuICBbSyBpbiBTdWJzZXRLZXldOiBFeHRyYWN0VFRhYmxlczxSZXR1cm5UeXBlPFN1YnNldFF1ZXJpZXNbS10+Pjtcbn1bU3Vic2V0S2V5XTtcblxuLy8gT04gQ09ORkxJQ1Qg64yA7IOBIO2DgOyehVxuLy8gLSDri6jsnbwg7Lus65+8OiBcImVtYWlsXCJcbi8vIC0g67O17IiYIOy7rOufvDogW1widXNlcl9pZFwiLCBcInByb2R1Y3RfaWRcIl1cbmV4cG9ydCB0eXBlIE9uQ29uZmxpY3RUYXJnZXQgPSBzdHJpbmcgfCBzdHJpbmdbXTtcblxuLy8gT04gQ09ORkxJQ1Qg7JWh7IWYIO2DgOyehVxuLy8gLSBcIm5vdGhpbmdcIjogRE8gTk9USElOR1xuLy8gLSB7IHVwZGF0ZTogWy4uLl0gfTogRE8gVVBEQVRFXG5leHBvcnQgdHlwZSBPbkNvbmZsaWN0QWN0aW9uPFRUYWJsZXMgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgfCBcIm5vdGhpbmdcIlxuICB8IHtcbiAgICAgIHVwZGF0ZTpcbiAgICAgICAgfCBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+W10gLy8g67Cw7Je0IO2Yle2DnCAtIFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgICB8IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+OyAvLyDqsJ3ssrQg7ZiV7YOcIC0geyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IFB1cmkucmF3TnVtYmVyKC4uLikgfVxuICAgIH07XG5cbi8vIEZLIOy7rOufvOuqhSDstpTstpwg7Jyg7Yu466as7YuwIO2DgOyehSAtIERhdGFiYXNlRm9yZWlnbktleXMg7Zmc7JqpXG5leHBvcnQgdHlwZSBGb3JlaWduS2V5Q29sdW1uczxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PiA9XG4gIFRUYWJsZSBleHRlbmRzIGtleW9mIERhdGFiYXNlRm9yZWlnbktleXMgPyBEYXRhYmFzZUZvcmVpZ25LZXlzW1RUYWJsZV0gOiBuZXZlcjtcblxuLy8gVW5pb27snYQgSW50ZXJzZWN0aW9u7Jy866GcIOuzgO2ZmO2VmOuKlCDsnKDti7jrpqzti7BcbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoazogaW5mZXIgSSkgPT4gdm9pZFxuICA/IElcbiAgOiBuZXZlcjtcblxuLy8gU2VsZWN0QWxsIOyLnCDrqqjrk6Ag7KGw7J2465CcIO2FjOydtOu4lOydmCDsu6zrn7wg7Y+s7ZWoXG5leHBvcnQgdHlwZSBTZWxlY3RBbGxSZXN1bHQ8VFRhYmxlcyBleHRlbmRzIG9iamVjdD4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFxuICB7XG4gICAgW0sgaW4ga2V5b2YgVFRhYmxlc106IFRUYWJsZXNbS10gZXh0ZW5kcyBpbmZlciBUXG4gICAgICA/IFQgZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgICAgID8gUGFydGlhbDxPbWl0SW50ZXJuYWxUeXBlS2V5czxUPj4gLy8gTEVGVCBKT0lO7J2AIG51bGxhYmxlLCDrqZTtg4DrjbDsnbTthLAg7KCc6rGwXG4gICAgICAgIDogT21pdEludGVybmFsVHlwZUtleXM8VD4gLy8gSU5ORVIgSk9JTuydgCBub24tbnVsbGFibGUsIOuplO2DgOuNsOydtO2EsCDsoJzqsbBcbiAgICAgIDogbmV2ZXI7XG4gIH1ba2V5b2YgVFRhYmxlc11cbj47XG5cbi8vIEZUUyDtg4DsnoVcbnR5cGUgVHNRdWVyeVBhcnNlciA9IFwidG9fdHNxdWVyeVwiIHwgXCJwbGFpbnRvX3RzcXVlcnlcIiB8IFwicGhyYXNldG9fdHNxdWVyeVwiIHwgXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiO1xuZXhwb3J0IHR5cGUgVHNRdWVyeUNvbmZpZyA9IFwic2ltcGxlXCIgfCBcImVuZ2xpc2hcIjtcbmV4cG9ydCB0eXBlIFRzUXVlcnlPcHRpb25zID0ge1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgVHNIaWdobGlnaHRPcHRpb25zID0ge1xuICAvKiog7L+866asIOuzgO2ZmCDtlajsiJggKOq4sOuzuOqwkjogXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiKSAqL1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICAvKiog7YWN7Iqk7Yq4IOqygOyDiSDshKTsoJUgKOq4sOuzuOqwkjogXCJzaW1wbGVcIikgKi9cbiAgY29uZmlnPzogVHNRdWVyeUNvbmZpZztcbiAgLyoqIOy1nOuMgCDri6jslrQg7IiYICjquLDrs7jqsJI6IDM1KSAqL1xuICBtYXhXb3Jkcz86IG51bWJlcjtcbiAgLyoqIOy1nOyGjCDri6jslrQg7IiYICjquLDrs7jqsJI6IDE1KSAqL1xuICBtaW5Xb3Jkcz86IG51bWJlcjtcbiAgLyoqIO2XpOuTnOudvOyduCDsi5zsnpEv64Gd7JeQ7IScIOygnOqxsO2VoCDsp6fsnYAg64uo7Ja0IOq4uOydtCAo6riw67O46rCSOiAzKSAqL1xuICBzaG9ydFdvcmQ/OiBudW1iZXI7XG4gIC8qKiB0cnVl66m0IOyghOyytCDrrLjshJzrpbwg7Zek65Oc65287J247Jy866GcIOyCrOyaqSAo6riw67O46rCSOiBmYWxzZSkgKi9cbiAgaGlnaGxpZ2h0QWxsPzogYm9vbGVhbjtcbiAgLyoqIO2RnOyLnO2VoCDstZzrjIAg7YWN7Iqk7Yq4IOyhsOqwgSDsiJggKOq4sOuzuOqwkjogMCwg7KGw6rCBIOuvuOyCrOyaqSkgKi9cbiAgbWF4RnJhZ21lbnRzPzogbnVtYmVyO1xuICAvKiog7L+866asIOuLqOyWtCDsi5zsnpEg6rWs67aE7J6QICjquLDrs7jqsJI6IFwiPGI+XCIpICovXG4gIHN0YXJ0U2VsPzogc3RyaW5nO1xuICAvKiog7L+866asIOuLqOyWtCDrgZ0g6rWs67aE7J6QICjquLDrs7jqsJI6IFwiPC9iPlwiKSAqL1xuICBzdG9wU2VsPzogc3RyaW5nO1xuICAvKiog7KGw6rCBIOq1rOu2hOyekCAo6riw67O46rCSOiBcIiAuLi4gXCIpICovXG4gIGZyYWdtZW50RGVsaW1pdGVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVHNSYW5rT3B0aW9ucyA9IHtcbiAgcGFyc2VyPzogVHNRdWVyeVBhcnNlcjtcbiAgY29uZmlnPzogVHNRdWVyeUNvbmZpZztcbiAgLyoqIOqwgOykkey5mCDrsLDsl7QgW0QsIEMsIEIsIEFdICjquLDrs7jqsJI6IFswLjEsIDAuMiwgMC40LCAxLjBdKSAqL1xuICB3ZWlnaHRzPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiDsoJXqt5ztmZQg7Ji17IWYXG4gICAqIDA6IOusuOyEnCDquLjsnbQg66y07IucICjquLDrs7jqsJIpXG4gICAqIDE6IDEgKyBsb2co66y47IScIOq4uOydtCnroZwg64KY64iUXG4gICAqIDI6IOusuOyEnCDquLjsnbTroZwg64KY64iUXG4gICAqIDQ6IO2Pieq3oCDsobDtmZQg6rGw66as66GcIOuCmOuIlCAodHNfcmFua19jZOunjClcbiAgICogODog6rOg7JygIOuLqOyWtCDsiJjroZwg64KY64iUXG4gICAqIDE2OiAxICsgbG9nKOqzoOycoCDri6jslrQg7IiYKeuhnCDrgpjriJRcbiAgICogMzI6IHJhbmsvKHJhbmsrMSkgLT4gMH4xIOyCrOydtOydmCDqsJLsnLzroZwg7Iqk7LyA7J2866eBXG4gICAqXG4gICAqIOu5hO2KuOuniOyKpO2BrOulvCDsgqzsmqntlZjsl6wg7Ji17IWY7J2EIOyhsO2Vqe2VoCDsiJgg7J6I7J2MXG4gICAqIOyYiDogOCB8IDMyIC0+IOqzoOycoCDri6jslrQg7IiY66GcIOuCmOuIhOqzoCAwfjEg7Iqk7LyA7J2866eBXG4gICAqL1xuICBub3JtYWxpemF0aW9uPzogbnVtYmVyO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztDQXVUYSxrQkFBa0I7RUFBQztFQUFNO0VBQUs7Q0FBSyJ9
@@ -1,6 +1,6 @@
1
1
  import { type MultipartFile } from "@fastify/multipart";
2
2
  import { BaseFile } from "./base-file";
3
- import { type DriverKey } from "./drivers";
3
+ import { type DiskName } from "./types";
4
4
  /**
5
5
  * Buffer 모드로 업로드된 파일
6
6
  * 메모리에 로드된 상태로, md5 계산이나 이미지 처리 등 유연한 작업이 가능합니다.
@@ -15,11 +15,11 @@ export declare class BufferedFile extends BaseFile {
15
15
  md5(): Promise<string>;
16
16
  /**
17
17
  * 파일을 디스크에 저장
18
- * @param diskName 디스크 이름 ("fs" 또는 "s3")
18
+ * @param diskName 설정에 등록한 디스크 이름
19
19
  * @param key 저장 경로 (예: 'uploads/avatar.png')
20
20
  * @returns 저장된 파일의 URL
21
21
  */
22
- saveToDisk(diskName: DriverKey, key: string): Promise<string>;
22
+ saveToDisk(diskName: DiskName, key: string): Promise<string>;
23
23
  /** 원본 MultipartFile 접근 */
24
24
  get raw(): MultipartFile;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"buffered-file.d.ts","sourceRoot":"","sources":["../../src/storage/buffered-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAS;IAE5B,YAAY,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAQ9C;IAED,gBAAgB;IAChB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,gBAAgB;IACV,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAE3B;IAED;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAclE;IAED,0BAA0B;IAC1B,IAAI,GAAG,IAAI,aAAa,CAEvB;CACF"}
1
+ {"version":3,"file":"buffered-file.d.ts","sourceRoot":"","sources":["../../src/storage/buffered-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAS;IAE5B,YAAY,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAQ9C;IAED,gBAAgB;IAChB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,gBAAgB;IACV,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAE3B;IAED;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcjE;IAED,0BAA0B;IAC1B,IAAI,GAAG,IAAI,aAAa,CAEvB;CACF"}
@@ -27,7 +27,7 @@ var init_buffered_file = __esmMin((() => {
27
27
  }
28
28
  /**
29
29
  * 파일을 디스크에 저장
30
- * @param diskName 디스크 이름 ("fs" 또는 "s3")
30
+ * @param diskName 설정에 등록한 디스크 이름
31
31
  * @param key 저장 경로 (예: 'uploads/avatar.png')
32
32
  * @returns 저장된 파일의 URL
33
33
  */
@@ -48,4 +48,4 @@ var init_buffered_file = __esmMin((() => {
48
48
  init_buffered_file();
49
49
  export { BufferedFile, init_buffered_file };
50
50
 
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyZWQtZmlsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9idWZmZXJlZC1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgTXVsdGlwYXJ0RmlsZSB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcblxuaW1wb3J0IHsgQmFzZUZpbGUgfSBmcm9tIFwiLi9iYXNlLWZpbGVcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4vZHJpdmVyc1wiO1xuXG4vKipcbiAqIEJ1ZmZlciDrqqjrk5zroZwg7JeF66Gc65Oc65CcIO2MjOydvFxuICog66mU66qo66as7JeQIOuhnOuTnOuQnCDsg4Htg5zroZwsIG1kNSDqs4TsgrDsnbTrgpgg7J2066+47KeAIOyymOumrCDrk7Eg7Jyg7Jew7ZWcIOyekeyXheydtCDqsIDriqXtlanri4jri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWZmZXJlZEZpbGUgZXh0ZW5kcyBCYXNlRmlsZSB7XG4gIHByaXZhdGUgZmlsZVZhbHVlOiBNdWx0aXBhcnRGaWxlO1xuICBwcml2YXRlIGJ1ZmZlclZhbHVlOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3IoZmlsZTogTXVsdGlwYXJ0RmlsZSwgYnVmZmVyOiBCdWZmZXIpIHtcbiAgICBzdXBlcih7XG4gICAgICBmaWxlbmFtZTogZmlsZS5maWxlbmFtZSxcbiAgICAgIG1pbWV0eXBlOiBmaWxlLm1pbWV0eXBlLFxuICAgICAgc2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmZpbGVWYWx1ZSA9IGZpbGU7XG4gICAgdGhpcy5idWZmZXJWYWx1ZSA9IGJ1ZmZlcjtcbiAgfVxuXG4gIC8qKiDtjIzsnbwgQnVmZmVyICovXG4gIGdldCBidWZmZXIoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJWYWx1ZTtcbiAgfVxuXG4gIC8qKiBNRDUg7ZW07IucIOqzhOyCsCAqL1xuICBhc3luYyBtZDUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUodGhpcy5idWZmZXJWYWx1ZSkuZGlnZXN0KFwiaGV4XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2MjOydvOydhCDrlJTsiqTtgazsl5Ag7KCA7J6lXG4gICAqIEBwYXJhbSBkaXNrTmFtZSDrlJTsiqTtgawg7J2066aEIChcImZzXCIg65iQ64qUIFwiczNcIilcbiAgICogQHBhcmFtIGtleSDsoIDsnqUg6rK966GcICjsmIg6ICd1cGxvYWRzL2F2YXRhci5wbmcnKVxuICAgKiBAcmV0dXJucyDsoIDsnqXrkJwg7YyM7J287J2YIFVSTFxuICAgKi9cbiAgYXN5bmMgc2F2ZVRvRGlzayhkaXNrTmFtZTogRHJpdmVyS2V5LCBrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8g7Iic7ZmYIOydmOyhtOyEsSDrsKnsp4Drpbwg7JyE7ZW0IOuPmeyggSBpbXBvcnRcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vYXBpL3NvbmFtdVwiKTtcbiAgICBjb25zdCBkaXNrID0gU29uYW11LnN0b3JhZ2UudXNlKGRpc2tOYW1lKTtcblxuICAgIGF3YWl0IGRpc2sucHV0KGtleSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXJWYWx1ZSksIHtcbiAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLm1pbWV0eXBlLFxuICAgIH0pO1xuXG4gICAgdGhpc1tcIl91cmxcIl0gPSBhd2FpdCBkaXNrLmdldFVybChrZXkpO1xuICAgIHRoaXNbXCJfc2lnbmVkVXJsXCJdID0gYXdhaXQgZGlzay5nZXRTaWduZWRVcmwoa2V5KTtcblxuICAgIC8vIHNpZ25lZCB1cmzsnYAg66eM66OMIOyLnOqwhOydtCDsnojquLAg65WM66y47JeQLCB1bnNpZ25lZCB1cmzsnYQg67CY7ZmY7ZWp64uI64ukLlxuICAgIHJldHVybiB0aGlzW1wiX3VybFwiXTtcbiAgfVxuXG4gIC8qKiDsm5Drs7ggTXVsdGlwYXJ0RmlsZSDsoJHqt7wgKi9cbiAgZ2V0IHJhdygpOiBNdWx0aXBhcnRGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5maWxlVmFsdWU7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0NBSXNDLGVBQUE7Q0FPekIsZUFBYixjQUFrQyxTQUFTO0VBQ3pDO0VBQ0E7RUFFQSxZQUFZLE1BQXFCLFFBQWdCO0dBQy9DLE1BQU07SUFDSixVQUFVLEtBQUs7SUFDZixVQUFVLEtBQUs7SUFDZixNQUFNLE9BQU87R0FDZixDQUFDO0dBQ0QsS0FBSyxZQUFZO0dBQ2pCLEtBQUssY0FBYztFQUNyQjs7RUFHQSxJQUFJLFNBQWlCO0dBQ25CLE9BQU8sS0FBSztFQUNkOztFQUdBLE1BQU0sTUFBdUI7R0FDM0IsT0FBTyxXQUFXLEtBQUssQ0FBQyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxPQUFPLEtBQUs7RUFDaEU7Ozs7Ozs7RUFRQSxNQUFNLFdBQVcsVUFBcUIsS0FBOEI7R0FFbEUsTUFBTSxFQUFFLFdBQVcsTUFBTSxPQUFPO0dBQ2hDLE1BQU0sT0FBTyxPQUFPLFFBQVEsSUFBSSxRQUFRO0dBRXhDLE1BQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxXQUFXLEtBQUssV0FBVyxHQUFHLEVBQ3BELGFBQWEsS0FBSyxTQUNwQixDQUFDO0dBRUQsS0FBSyxVQUFVLE1BQU0sS0FBSyxPQUFPLEdBQUc7R0FDcEMsS0FBSyxnQkFBZ0IsTUFBTSxLQUFLLGFBQWEsR0FBRztHQUdoRCxPQUFPLEtBQUs7RUFDZDs7RUFHQSxJQUFJLE1BQXFCO0dBQ3ZCLE9BQU8sS0FBSztFQUNkO0NBQ0YifQ==
51
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyZWQtZmlsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9idWZmZXJlZC1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgTXVsdGlwYXJ0RmlsZSB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcblxuaW1wb3J0IHsgQmFzZUZpbGUgfSBmcm9tIFwiLi9iYXNlLWZpbGVcIjtcbmltcG9ydCB7IHR5cGUgRGlza05hbWUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEJ1ZmZlciDrqqjrk5zroZwg7JeF66Gc65Oc65CcIO2MjOydvFxuICog66mU66qo66as7JeQIOuhnOuTnOuQnCDsg4Htg5zroZwsIG1kNSDqs4TsgrDsnbTrgpgg7J2066+47KeAIOyymOumrCDrk7Eg7Jyg7Jew7ZWcIOyekeyXheydtCDqsIDriqXtlanri4jri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWZmZXJlZEZpbGUgZXh0ZW5kcyBCYXNlRmlsZSB7XG4gIHByaXZhdGUgZmlsZVZhbHVlOiBNdWx0aXBhcnRGaWxlO1xuICBwcml2YXRlIGJ1ZmZlclZhbHVlOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3IoZmlsZTogTXVsdGlwYXJ0RmlsZSwgYnVmZmVyOiBCdWZmZXIpIHtcbiAgICBzdXBlcih7XG4gICAgICBmaWxlbmFtZTogZmlsZS5maWxlbmFtZSxcbiAgICAgIG1pbWV0eXBlOiBmaWxlLm1pbWV0eXBlLFxuICAgICAgc2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmZpbGVWYWx1ZSA9IGZpbGU7XG4gICAgdGhpcy5idWZmZXJWYWx1ZSA9IGJ1ZmZlcjtcbiAgfVxuXG4gIC8qKiDtjIzsnbwgQnVmZmVyICovXG4gIGdldCBidWZmZXIoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJWYWx1ZTtcbiAgfVxuXG4gIC8qKiBNRDUg7ZW07IucIOqzhOyCsCAqL1xuICBhc3luYyBtZDUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUodGhpcy5idWZmZXJWYWx1ZSkuZGlnZXN0KFwiaGV4XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2MjOydvOydhCDrlJTsiqTtgazsl5Ag7KCA7J6lXG4gICAqIEBwYXJhbSBkaXNrTmFtZSDshKTsoJXsl5Ag65Ox66Gd7ZWcIOuUlOyKpO2BrCDsnbTrpoRcbiAgICogQHBhcmFtIGtleSDsoIDsnqUg6rK966GcICjsmIg6ICd1cGxvYWRzL2F2YXRhci5wbmcnKVxuICAgKiBAcmV0dXJucyDsoIDsnqXrkJwg7YyM7J287J2YIFVSTFxuICAgKi9cbiAgYXN5bmMgc2F2ZVRvRGlzayhkaXNrTmFtZTogRGlza05hbWUsIGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyDsiJztmZgg7J2Y7KG07ISxIOuwqeyngOulvCDsnITtlbQg64+Z7KCBIGltcG9ydFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9hcGkvc29uYW11XCIpO1xuICAgIGNvbnN0IGRpc2sgPSBTb25hbXUuc3RvcmFnZS51c2UoZGlza05hbWUpO1xuXG4gICAgYXdhaXQgZGlzay5wdXQoa2V5LCBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlclZhbHVlKSwge1xuICAgICAgY29udGVudFR5cGU6IHRoaXMubWltZXR5cGUsXG4gICAgfSk7XG5cbiAgICB0aGlzW1wiX3VybFwiXSA9IGF3YWl0IGRpc2suZ2V0VXJsKGtleSk7XG4gICAgdGhpc1tcIl9zaWduZWRVcmxcIl0gPSBhd2FpdCBkaXNrLmdldFNpZ25lZFVybChrZXkpO1xuXG4gICAgLy8gc2lnbmVkIHVybOydgCDrp4zro4wg7Iuc6rCE7J20IOyeiOq4sCDrlYzrrLjsl5AsIHVuc2lnbmVkIHVybOydhCDrsJjtmZjtlanri4jri6QuXG4gICAgcmV0dXJuIHRoaXNbXCJfdXJsXCJdO1xuICB9XG5cbiAgLyoqIOybkOuzuCBNdWx0aXBhcnRGaWxlIOygkeq3vCAqL1xuICBnZXQgcmF3KCk6IE11bHRpcGFydEZpbGUge1xuICAgIHJldHVybiB0aGlzLmZpbGVWYWx1ZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FJc0MsZUFBQTtDQU96QixlQUFiLGNBQWtDLFNBQVM7RUFDekM7RUFDQTtFQUVBLFlBQVksTUFBcUIsUUFBZ0I7R0FDL0MsTUFBTTtJQUNKLFVBQVUsS0FBSztJQUNmLFVBQVUsS0FBSztJQUNmLE1BQU0sT0FBTztHQUNmLENBQUM7R0FDRCxLQUFLLFlBQVk7R0FDakIsS0FBSyxjQUFjO0VBQ3JCOztFQUdBLElBQUksU0FBaUI7R0FDbkIsT0FBTyxLQUFLO0VBQ2Q7O0VBR0EsTUFBTSxNQUF1QjtHQUMzQixPQUFPLFdBQVcsS0FBSyxDQUFDLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxDQUFDLE9BQU8sS0FBSztFQUNoRTs7Ozs7OztFQVFBLE1BQU0sV0FBVyxVQUFvQixLQUE4QjtHQUVqRSxNQUFNLEVBQUUsV0FBVyxNQUFNLE9BQU87R0FDaEMsTUFBTSxPQUFPLE9BQU8sUUFBUSxJQUFJLFFBQVE7R0FFeEMsTUFBTSxLQUFLLElBQUksS0FBSyxJQUFJLFdBQVcsS0FBSyxXQUFXLEdBQUcsRUFDcEQsYUFBYSxLQUFLLFNBQ3BCLENBQUM7R0FFRCxLQUFLLFVBQVUsTUFBTSxLQUFLLE9BQU8sR0FBRztHQUNwQyxLQUFLLGdCQUFnQixNQUFNLEtBQUssYUFBYSxHQUFHO0dBR2hELE9BQU8sS0FBSztFQUNkOztFQUdBLElBQUksTUFBcUI7R0FDdkIsT0FBTyxLQUFLO0VBQ2Q7Q0FDRiJ9
@@ -2,6 +2,6 @@ export { BaseFile } from "./base-file";
2
2
  export { BufferedFile } from "./buffered-file";
3
3
  export { type DriverKey, drivers } from "./drivers";
4
4
  export { StorageManager } from "./storage-manager";
5
- export type { KeyGenerator, StorageConfig } from "./types";
5
+ export type { DiskName, KeyGenerator, StorageConfig } from "./types";
6
6
  export { UploadedFile as StreamedFile } from "./uploaded-file";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -10,4 +10,4 @@ init_storage_manager();
10
10
  init_uploaded_file();
11
11
  export { BaseFile, BufferedFile, StorageManager, UploadedFile as StreamedFile, drivers };
12
12
 
13
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RvcmFnZSDshJzruIzrqqjrk4ggZXhwb3J0c1xuZXhwb3J0IHsgQmFzZUZpbGUgfSBmcm9tIFwiLi9iYXNlLWZpbGVcIjtcbmV4cG9ydCB7IEJ1ZmZlcmVkRmlsZSB9IGZyb20gXCIuL2J1ZmZlcmVkLWZpbGVcIjtcbmV4cG9ydCB7IHR5cGUgRHJpdmVyS2V5LCBkcml2ZXJzIH0gZnJvbSBcIi4vZHJpdmVyc1wiO1xuZXhwb3J0IHsgU3RvcmFnZU1hbmFnZXIgfSBmcm9tIFwiLi9zdG9yYWdlLW1hbmFnZXJcIjtcbmV4cG9ydCB0eXBlIHsgS2V5R2VuZXJhdG9yLCBTdG9yYWdlQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IFVwbG9hZGVkRmlsZSBhcyBTdHJlYW1lZEZpbGUgfSBmcm9tIFwiLi91cGxvYWRlZC1maWxlXCI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNzQyxlQUFBO0FBQ1EsbUJBQUE7QUFFSSxxQkFBQTtBQUVZLG1CQUFBIn0=
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RvcmFnZSDshJzruIzrqqjrk4ggZXhwb3J0c1xuZXhwb3J0IHsgQmFzZUZpbGUgfSBmcm9tIFwiLi9iYXNlLWZpbGVcIjtcbmV4cG9ydCB7IEJ1ZmZlcmVkRmlsZSB9IGZyb20gXCIuL2J1ZmZlcmVkLWZpbGVcIjtcbmV4cG9ydCB7IHR5cGUgRHJpdmVyS2V5LCBkcml2ZXJzIH0gZnJvbSBcIi4vZHJpdmVyc1wiO1xuZXhwb3J0IHsgU3RvcmFnZU1hbmFnZXIgfSBmcm9tIFwiLi9zdG9yYWdlLW1hbmFnZXJcIjtcbmV4cG9ydCB0eXBlIHsgRGlza05hbWUsIEtleUdlbmVyYXRvciwgU3RvcmFnZUNvbmZpZyB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyBVcGxvYWRlZEZpbGUgYXMgU3RyZWFtZWRGaWxlIH0gZnJvbSBcIi4vdXBsb2FkZWQtZmlsZVwiO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDc0MsZUFBQTtBQUNRLG1CQUFBO0FBRUkscUJBQUE7QUFFWSxtQkFBQSJ9
@@ -1,6 +1,5 @@
1
1
  import { Disk } from "flydrive";
2
- import { type DriverKey } from "./drivers";
3
- import { type StorageConfig } from "./types";
2
+ import { type DiskName, type StorageConfig } from "./types";
4
3
  /**
5
4
  * 여러 디스크를 관리하는 매니저
6
5
  */
@@ -10,8 +9,8 @@ export declare class StorageManager {
10
9
  constructor(config: StorageConfig);
11
10
  /**
12
11
  * 디스크 인스턴스 반환 (lazy initialization)
13
- * @param diskName 디스크 이름 (없으면 default)
12
+ * @param diskName 설정에 등록한 디스크 이름
14
13
  */
15
- use(diskName: DriverKey): Disk;
14
+ use(diskName: DiskName): Disk;
16
15
  }
17
16
  //# sourceMappingURL=storage-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../src/storage/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;GAEG;AACH,qBAAa,cAAc;IAGb,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,KAAK,CAAmC;IAEhD,YAAoB,MAAM,EAAE,aAAa,EAAI;IAE7C;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAW7B;CACF"}
1
+ {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../src/storage/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAE5D;;GAEG;AACH,qBAAa,cAAc;IAGb,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,KAAK,CAAkC;IAE/C,YAAoB,MAAM,EAAE,aAAa,EAAI;IAE7C;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAW5B;CACF"}
@@ -13,7 +13,7 @@ var init_storage_manager = __esmMin((() => {
13
13
  }
14
14
  /**
15
15
  * 디스크 인스턴스 반환 (lazy initialization)
16
- * @param diskName 디스크 이름 (없으면 default)
16
+ * @param diskName 설정에 등록한 디스크 이름
17
17
  */
18
18
  use(diskName) {
19
19
  if (!this.disks.has(diskName)) {
@@ -31,4 +31,4 @@ var init_storage_manager = __esmMin((() => {
31
31
  init_storage_manager();
32
32
  export { StorageManager, init_storage_manager };
33
33
 
34
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1tYW5hZ2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL3N0b3JhZ2UtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNrIH0gZnJvbSBcImZseWRyaXZlXCI7XG5cbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4vZHJpdmVyc1wiO1xuaW1wb3J0IHsgdHlwZSBTdG9yYWdlQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiDsl6zrn6wg65SU7Iqk7YGs66W8IOq0gOumrO2VmOuKlCDrp6Tri4jsoIBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JhZ2VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBkaXNrczogTWFwPERyaXZlcktleSwgRGlzaz4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IFN0b3JhZ2VDb25maWcpIHt9XG5cbiAgLyoqXG4gICAqIOuUlOyKpO2BrCDsnbjsiqTthLTsiqQg67CY7ZmYIChsYXp5IGluaXRpYWxpemF0aW9uKVxuICAgKiBAcGFyYW0gZGlza05hbWUg65SU7Iqk7YGsIOydtOumhCAo7JeG7Jy866m0IGRlZmF1bHQpXG4gICAqL1xuICB1c2UoZGlza05hbWU6IERyaXZlcktleSk6IERpc2sge1xuICAgIGlmICghdGhpcy5kaXNrcy5oYXMoZGlza05hbWUpKSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jb25maWcuZHJpdmVyc1tkaXNrTmFtZV07XG4gICAgICBpZiAoIWZhY3RvcnkpIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gT2JqZWN0LmtleXModGhpcy5jb25maWcuZHJpdmVycykuam9pbihcIiwgXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGlzazogXCIke2Rpc2tOYW1lfVwiLiBBdmFpbGFibGU6ICR7YXZhaWxhYmxlfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNrcy5zZXQoZGlza05hbWUsIG5ldyBEaXNrKGZhY3RvcnkoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3NlcnREZWZpbmVkKHRoaXMuZGlza3MuZ2V0KGRpc2tOYW1lKSwgYERpc2sgJHtkaXNrTmFtZX0gbm90IGZvdW5kYCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0NBRThDLFdBQUE7Q0FPakMsaUJBQWIsTUFBNEI7RUFHTjtFQUZwQix3QkFBc0MsSUFBSSxJQUFJO0VBRTlDLFlBQVksUUFBK0I7R0FBdkIsS0FBQSxTQUFBO0VBQXdCOzs7OztFQU01QyxJQUFJLFVBQTJCO0dBQzdCLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxRQUFRLEdBQUc7SUFDN0IsTUFBTSxVQUFVLEtBQUssT0FBTyxRQUFRO0lBQ3BDLElBQUksQ0FBQyxTQUFTO0tBQ1osTUFBTSxZQUFZLE9BQU8sS0FBSyxLQUFLLE9BQU8sT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJO0tBQzVELE1BQU0sSUFBSSxNQUFNLGtCQUFrQixTQUFTLGdCQUFnQixXQUFXO0lBQ3hFO0lBQ0EsS0FBSyxNQUFNLElBQUksVUFBVSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7R0FDOUM7R0FFQSxPQUFPLGNBQWMsS0FBSyxNQUFNLElBQUksUUFBUSxHQUFHLFFBQVEsU0FBUyxXQUFXO0VBQzdFO0NBQ0YifQ==
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1tYW5hZ2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL3N0b3JhZ2UtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNrIH0gZnJvbSBcImZseWRyaXZlXCI7XG5cbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgRGlza05hbWUsIHR5cGUgU3RvcmFnZUNvbmZpZyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICog7Jes65+sIOuUlOyKpO2BrOulvCDqtIDrpqztlZjripQg66ek64uI7KCAXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yYWdlTWFuYWdlciB7XG4gIHByaXZhdGUgZGlza3M6IE1hcDxEaXNrTmFtZSwgRGlzaz4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IFN0b3JhZ2VDb25maWcpIHt9XG5cbiAgLyoqXG4gICAqIOuUlOyKpO2BrCDsnbjsiqTthLTsiqQg67CY7ZmYIChsYXp5IGluaXRpYWxpemF0aW9uKVxuICAgKiBAcGFyYW0gZGlza05hbWUg7ISk7KCV7JeQIOuTseuhne2VnCDrlJTsiqTtgawg7J2066aEXG4gICAqL1xuICB1c2UoZGlza05hbWU6IERpc2tOYW1lKTogRGlzayB7XG4gICAgaWYgKCF0aGlzLmRpc2tzLmhhcyhkaXNrTmFtZSkpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbmZpZy5kcml2ZXJzW2Rpc2tOYW1lXTtcbiAgICAgIGlmICghZmFjdG9yeSkge1xuICAgICAgICBjb25zdCBhdmFpbGFibGUgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5kcml2ZXJzKS5qb2luKFwiLCBcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkaXNrOiBcIiR7ZGlza05hbWV9XCIuIEF2YWlsYWJsZTogJHthdmFpbGFibGV9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpc2tzLnNldChkaXNrTmFtZSwgbmV3IERpc2soZmFjdG9yeSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc2VydERlZmluZWQodGhpcy5kaXNrcy5nZXQoZGlza05hbWUpLCBgRGlzayAke2Rpc2tOYW1lfSBub3QgZm91bmRgKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FFOEMsV0FBQTtDQU1qQyxpQkFBYixNQUE0QjtFQUdOO0VBRnBCLHdCQUFxQyxJQUFJLElBQUk7RUFFN0MsWUFBWSxRQUErQjtHQUF2QixLQUFBLFNBQUE7RUFBd0I7Ozs7O0VBTTVDLElBQUksVUFBMEI7R0FDNUIsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLFFBQVEsR0FBRztJQUM3QixNQUFNLFVBQVUsS0FBSyxPQUFPLFFBQVE7SUFDcEMsSUFBSSxDQUFDLFNBQVM7S0FDWixNQUFNLFlBQVksT0FBTyxLQUFLLEtBQUssT0FBTyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUk7S0FDNUQsTUFBTSxJQUFJLE1BQU0sa0JBQWtCLFNBQVMsZ0JBQWdCLFdBQVc7SUFDeEU7SUFDQSxLQUFLLE1BQU0sSUFBSSxVQUFVLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztHQUM5QztHQUVBLE9BQU8sY0FBYyxLQUFLLE1BQU0sSUFBSSxRQUFRLEdBQUcsUUFBUSxTQUFTLFdBQVc7RUFDN0U7Q0FDRiJ9
@@ -1,5 +1,6 @@
1
1
  import { type DriverContract } from "flydrive/types";
2
- import { type DriverKey } from "./drivers";
2
+ /** storage.drivers에 등록한 디스크 이름. 드라이버 종류(fs·s3)와는 독립적이다. */
3
+ export type DiskName = string;
3
4
  /**
4
5
  * Stream 모드에서 파일 키 생성 함수 타입
5
6
  */
@@ -12,7 +13,7 @@ export type KeyGenerator = (file: {
12
13
  */
13
14
  export type StorageConfig = {
14
15
  /** 디스크별 드라이버 팩토리 */
15
- drivers: Record<DriverKey, () => DriverContract>;
16
+ drivers: Record<DiskName, () => DriverContract>;
16
17
  /** stream 모드의 전역 키 생성 함수 (생략 시 timestamp-random 기본값) */
17
18
  keyGenerator?: KeyGenerator;
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,cAAc,CAAC,CAAC;IACjD,wDAAwD;IACxD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,2DAA2D;AAC3D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC,CAAC;IAChD,wDAAwD;IACxD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { BaseFile } from "./base-file";
2
- import { type DriverKey } from "./drivers";
2
+ import { type DiskName } from "./types";
3
3
  /**
4
4
  * Stream 모드로 업로드된 파일
5
5
  * 이미 저장소에 스트리밍 완료된 상태로, url/key 등 메타데이터만 접근 가능합니다.
@@ -14,12 +14,12 @@ export declare class UploadedFile extends BaseFile {
14
14
  url: string;
15
15
  signedUrl: string;
16
16
  key: string;
17
- diskName: DriverKey;
17
+ diskName: DiskName;
18
18
  });
19
19
  /** 저장소 내 키 */
20
20
  get key(): string;
21
21
  /** 저장된 디스크 이름 */
22
- get diskName(): DriverKey;
22
+ get diskName(): DiskName;
23
23
  /**
24
24
  * 저장소에서 파일을 다운로드합니다.
25
25
  * 스트림 모드로 업로드된 파일을 나중에 처리해야 할 때 사용합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"uploaded-file.d.ts","sourceRoot":"","sources":["../../src/storage/uploaded-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAY;IAEjC,YAAY,MAAM,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,SAAS,CAAC;KACrB,EAUA;IAED,cAAc;IACd,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,iBAAiB;IACjB,IAAI,QAAQ,IAAI,SAAS,CAExB;IAED;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAMhC;CACF"}
1
+ {"version":3,"file":"uploaded-file.d.ts","sourceRoot":"","sources":["../../src/storage/uploaded-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAW;IAEhC,YAAY,MAAM,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,QAAQ,CAAC;KACpB,EAUA;IAED,cAAc;IACd,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,iBAAiB;IACjB,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAMhC;CACF"}
@@ -40,4 +40,4 @@ var init_uploaded_file = __esmMin((() => {
40
40
  init_uploaded_file();
41
41
  export { UploadedFile, init_uploaded_file };
42
42
 
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZWQtZmlsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS91cGxvYWRlZC1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VGaWxlIH0gZnJvbSBcIi4vYmFzZS1maWxlXCI7XG5pbXBvcnQgeyB0eXBlIERyaXZlcktleSB9IGZyb20gXCIuL2RyaXZlcnNcIjtcblxuLyoqXG4gKiBTdHJlYW0g66qo65Oc66GcIOyXheuhnOuTnOuQnCDtjIzsnbxcbiAqIOydtOuvuCDsoIDsnqXshozsl5Ag7Iqk7Yq466as67CNIOyZhOujjOuQnCDsg4Htg5zroZwsIHVybC9rZXkg65OxIOuplO2DgOuNsOydtO2EsOunjCDsoJHqt7wg6rCA64ql7ZWp64uI64ukLlxuICovXG5leHBvcnQgY2xhc3MgVXBsb2FkZWRGaWxlIGV4dGVuZHMgQmFzZUZpbGUge1xuICBwcml2YXRlIGtleVZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgZGlza05hbWVWYWx1ZTogRHJpdmVyS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczoge1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgbWltZXR5cGU6IHN0cmluZztcbiAgICBzaXplOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2lnbmVkVXJsOiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZGlza05hbWU6IERyaXZlcktleTtcbiAgfSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGZpbGVuYW1lOiBwYXJhbXMuZmlsZW5hbWUsXG4gICAgICBtaW1ldHlwZTogcGFyYW1zLm1pbWV0eXBlLFxuICAgICAgc2l6ZTogcGFyYW1zLnNpemUsXG4gICAgICB1cmw6IHBhcmFtcy51cmwsXG4gICAgICBzaWduZWRVcmw6IHBhcmFtcy5zaWduZWRVcmwsXG4gICAgfSk7XG4gICAgdGhpcy5rZXlWYWx1ZSA9IHBhcmFtcy5rZXk7XG4gICAgdGhpcy5kaXNrTmFtZVZhbHVlID0gcGFyYW1zLmRpc2tOYW1lO1xuICB9XG5cbiAgLyoqIOyggOyepeyGjCDrgrQg7YKkICovXG4gIGdldCBrZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rZXlWYWx1ZTtcbiAgfVxuXG4gIC8qKiDsoIDsnqXrkJwg65SU7Iqk7YGsIOydtOumhCAqL1xuICBnZXQgZGlza05hbWUoKTogRHJpdmVyS2V5IHtcbiAgICByZXR1cm4gdGhpcy5kaXNrTmFtZVZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOyggOyepeyGjOyXkOyEnCDtjIzsnbzsnYQg64uk7Jq066Gc65Oc7ZWp64uI64ukLlxuICAgKiDsiqTtirjrprwg66qo65Oc66GcIOyXheuhnOuTnOuQnCDtjIzsnbzsnYQg64KY7KSR7JeQIOyymOumrO2VtOyVvCDtlaAg65WMIOyCrOyaqe2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGRvd25sb2FkKCk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgeyBTb25hbXUgfSA9IGF3YWl0IGltcG9ydChcIi4uL2FwaS9zb25hbXVcIik7XG4gICAgY29uc3QgZGlzayA9IFNvbmFtdS5zdG9yYWdlLnVzZSh0aGlzLmRpc2tOYW1lVmFsdWUpO1xuXG4gICAgY29uc3QgdWludDhBcnJheSA9IGF3YWl0IGRpc2suZ2V0KHRoaXMua2V5VmFsdWUpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh1aW50OEFycmF5KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztDQUFzQyxlQUFBO0NBT3pCLGVBQWIsY0FBa0MsU0FBUztFQUN6QztFQUNBO0VBRUEsWUFBWSxRQVFUO0dBQ0QsTUFBTTtJQUNKLFVBQVUsT0FBTztJQUNqQixVQUFVLE9BQU87SUFDakIsTUFBTSxPQUFPO0lBQ2IsS0FBSyxPQUFPO0lBQ1osV0FBVyxPQUFPO0dBQ3BCLENBQUM7R0FDRCxLQUFLLFdBQVcsT0FBTztHQUN2QixLQUFLLGdCQUFnQixPQUFPO0VBQzlCOztFQUdBLElBQUksTUFBYztHQUNoQixPQUFPLEtBQUs7RUFDZDs7RUFHQSxJQUFJLFdBQXNCO0dBQ3hCLE9BQU8sS0FBSztFQUNkOzs7OztFQU1BLE1BQU0sV0FBNEI7R0FDaEMsTUFBTSxFQUFFLFdBQVcsTUFBTSxPQUFPO0dBR2hDLE1BQU0sYUFBYSxNQUZOLE9BQU8sUUFBUSxJQUFJLEtBQUssYUFFWixDQUFBLENBQUssSUFBSSxLQUFLLFFBQVE7R0FDL0MsT0FBTyxPQUFPLEtBQUssVUFBVTtFQUMvQjtDQUNGIn0=
43
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZWQtZmlsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS91cGxvYWRlZC1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VGaWxlIH0gZnJvbSBcIi4vYmFzZS1maWxlXCI7XG5pbXBvcnQgeyB0eXBlIERpc2tOYW1lIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBTdHJlYW0g66qo65Oc66GcIOyXheuhnOuTnOuQnCDtjIzsnbxcbiAqIOydtOuvuCDsoIDsnqXshozsl5Ag7Iqk7Yq466as67CNIOyZhOujjOuQnCDsg4Htg5zroZwsIHVybC9rZXkg65OxIOuplO2DgOuNsOydtO2EsOunjCDsoJHqt7wg6rCA64ql7ZWp64uI64ukLlxuICovXG5leHBvcnQgY2xhc3MgVXBsb2FkZWRGaWxlIGV4dGVuZHMgQmFzZUZpbGUge1xuICBwcml2YXRlIGtleVZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgZGlza05hbWVWYWx1ZTogRGlza05hbWU7XG5cbiAgY29uc3RydWN0b3IocGFyYW1zOiB7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgIHNpemU6IG51bWJlcjtcbiAgICB1cmw6IHN0cmluZztcbiAgICBzaWduZWRVcmw6IHN0cmluZztcbiAgICBrZXk6IHN0cmluZztcbiAgICBkaXNrTmFtZTogRGlza05hbWU7XG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBmaWxlbmFtZTogcGFyYW1zLmZpbGVuYW1lLFxuICAgICAgbWltZXR5cGU6IHBhcmFtcy5taW1ldHlwZSxcbiAgICAgIHNpemU6IHBhcmFtcy5zaXplLFxuICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgc2lnbmVkVXJsOiBwYXJhbXMuc2lnbmVkVXJsLFxuICAgIH0pO1xuICAgIHRoaXMua2V5VmFsdWUgPSBwYXJhbXMua2V5O1xuICAgIHRoaXMuZGlza05hbWVWYWx1ZSA9IHBhcmFtcy5kaXNrTmFtZTtcbiAgfVxuXG4gIC8qKiDsoIDsnqXshowg64K0IO2CpCAqL1xuICBnZXQga2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua2V5VmFsdWU7XG4gIH1cblxuICAvKiog7KCA7J6l65CcIOuUlOyKpO2BrCDsnbTrpoQgKi9cbiAgZ2V0IGRpc2tOYW1lKCk6IERpc2tOYW1lIHtcbiAgICByZXR1cm4gdGhpcy5kaXNrTmFtZVZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOyggOyepeyGjOyXkOyEnCDtjIzsnbzsnYQg64uk7Jq066Gc65Oc7ZWp64uI64ukLlxuICAgKiDsiqTtirjrprwg66qo65Oc66GcIOyXheuhnOuTnOuQnCDtjIzsnbzsnYQg64KY7KSR7JeQIOyymOumrO2VtOyVvCDtlaAg65WMIOyCrOyaqe2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGRvd25sb2FkKCk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgeyBTb25hbXUgfSA9IGF3YWl0IGltcG9ydChcIi4uL2FwaS9zb25hbXVcIik7XG4gICAgY29uc3QgZGlzayA9IFNvbmFtdS5zdG9yYWdlLnVzZSh0aGlzLmRpc2tOYW1lVmFsdWUpO1xuXG4gICAgY29uc3QgdWludDhBcnJheSA9IGF3YWl0IGRpc2suZ2V0KHRoaXMua2V5VmFsdWUpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh1aW50OEFycmF5KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztDQUFzQyxlQUFBO0NBT3pCLGVBQWIsY0FBa0MsU0FBUztFQUN6QztFQUNBO0VBRUEsWUFBWSxRQVFUO0dBQ0QsTUFBTTtJQUNKLFVBQVUsT0FBTztJQUNqQixVQUFVLE9BQU87SUFDakIsTUFBTSxPQUFPO0lBQ2IsS0FBSyxPQUFPO0lBQ1osV0FBVyxPQUFPO0dBQ3BCLENBQUM7R0FDRCxLQUFLLFdBQVcsT0FBTztHQUN2QixLQUFLLGdCQUFnQixPQUFPO0VBQzlCOztFQUdBLElBQUksTUFBYztHQUNoQixPQUFPLEtBQUs7RUFDZDs7RUFHQSxJQUFJLFdBQXFCO0dBQ3ZCLE9BQU8sS0FBSztFQUNkOzs7OztFQU1BLE1BQU0sV0FBNEI7R0FDaEMsTUFBTSxFQUFFLFdBQVcsTUFBTSxPQUFPO0dBR2hDLE1BQU0sYUFBYSxNQUZOLE9BQU8sUUFBUSxJQUFJLEtBQUssYUFFWixDQUFBLENBQUssSUFBSSxLQUFLLFFBQVE7R0FDL0MsT0FBTyxPQUFPLEtBQUssVUFBVTtFQUMvQjtDQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.13.2",
3
+ "version": "0.13.3",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "framework",
@@ -0,0 +1,145 @@
1
+ import { tmpdir } from "node:os";
2
+
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
+
5
+ import { DB } from "../../database/db";
6
+ import { EntityManager } from "../../entity/entity-manager";
7
+ import * as envModule from "../../env";
8
+ import { drivers } from "../../storage/drivers";
9
+ import { Syncer } from "../../syncer/syncer";
10
+ import { TemplateManager } from "../../template";
11
+ import { type AbsolutePath } from "../../utils/path-utils";
12
+ import * as utils from "../../utils/utils";
13
+ import * as configModule from "../config";
14
+ import { type SonamuConfig } from "../config";
15
+ import { Sonamu } from "../sonamu";
16
+
17
+ // 스토리지 자체는 실제 FS 드라이버로 검증하고 DB·모델 자동 로딩만 격리한다.
18
+ describe("서버 없이 스토리지 초기화", () => {
19
+ const snapshot = Sonamu.captureTestingSnapshot();
20
+ const originalInitialized = Sonamu.isInitialized;
21
+ const originalForTesting = Sonamu.forTesting;
22
+ const originalServer = Sonamu.server;
23
+ const originalStorage = Sonamu["storageValue"];
24
+ const originalCache = Sonamu["cacheValue"];
25
+ const originalWorkflows = Sonamu["workflowsValue"];
26
+ const originalDbConfig = Sonamu["dbConfigValue"];
27
+ const originalBoot = Sonamu["boot"];
28
+ const originalInitializeWorkflows = Sonamu["initializeWorkflows"];
29
+
30
+ let config: SonamuConfig;
31
+
32
+ beforeEach(() => {
33
+ vi.stubEnv("NODE_ENV", "test");
34
+ Sonamu.isInitialized = false;
35
+ Reflect.set(Sonamu, "storageValue", null);
36
+ config = {
37
+ projectName: "storage-test",
38
+ api: { dir: "api", route: { prefix: "/api" } },
39
+ database: {},
40
+ i18n: { defaultLocale: "ko", supportedLocales: ["ko"] },
41
+ sync: { targets: [] },
42
+ logging: false,
43
+ server: {
44
+ apiConfig: {
45
+ contextProvider: (context) => context,
46
+ guardHandler: () => {},
47
+ },
48
+ },
49
+ };
50
+ vi.spyOn(configModule, "loadConfig").mockImplementation(async () => config);
51
+ vi.spyOn(envModule, "readAllEnvironmentSnapshots").mockReturnValue({
52
+ development: {},
53
+ test: {},
54
+ staging: {},
55
+ production: {},
56
+ });
57
+ vi.spyOn(DB, "setConfig").mockImplementation(() => {});
58
+ vi.spyOn(EntityManager, "autoload").mockResolvedValue(undefined);
59
+ vi.spyOn(Syncer.prototype, "autoloadTypes").mockResolvedValue(undefined);
60
+ vi.spyOn(Syncer.prototype, "autoloadModels").mockResolvedValue(undefined);
61
+ vi.spyOn(Syncer.prototype, "autoloadApis").mockResolvedValue(undefined);
62
+ vi.spyOn(Syncer.prototype, "autoloadWorkflows").mockResolvedValue(undefined);
63
+ vi.spyOn(Syncer.prototype, "autoloadSsrRoutes").mockResolvedValue(undefined);
64
+ vi.spyOn(TemplateManager, "autoload").mockResolvedValue(undefined);
65
+ // 워크플로 초기화는 별도 DB 연결을 만들므로 스토리지 수명주기 검사에서 제외한다.
66
+ Sonamu["initializeWorkflows"] = async () => {};
67
+ // SAFETY: 테스트에서만 쓰는 절대 경로이며 파일 접근은 위의 설정·자동 로딩 경계에서 격리한다.
68
+ vi.spyOn(utils, "findApiRootPath").mockReturnValue(
69
+ "/tmp/sonamu-storage-test/api" as AbsolutePath,
70
+ );
71
+ });
72
+
73
+ afterEach(async () => {
74
+ if (Sonamu.server && Sonamu.server !== originalServer) await Sonamu.server.close();
75
+ Sonamu.restoreTestingSnapshot(snapshot);
76
+ Sonamu.isInitialized = originalInitialized;
77
+ Sonamu.forTesting = originalForTesting;
78
+ Sonamu.server = originalServer;
79
+ Reflect.set(Sonamu, "storageValue", originalStorage);
80
+ Reflect.set(Sonamu, "cacheValue", originalCache);
81
+ Reflect.set(Sonamu, "workflowsValue", originalWorkflows);
82
+ Reflect.set(Sonamu, "dbConfigValue", originalDbConfig);
83
+ Sonamu["boot"] = originalBoot;
84
+ Sonamu["initializeWorkflows"] = originalInitializeWorkflows;
85
+ vi.restoreAllMocks();
86
+ vi.unstubAllEnvs();
87
+ });
88
+
89
+ function configureStorage() {
90
+ const factory = vi.fn(
91
+ drivers.fs({
92
+ location: tmpdir(),
93
+ visibility: "public",
94
+ urlBuilder: {
95
+ async generateURL(key) {
96
+ return `https://cdn.example.com/${key}`;
97
+ },
98
+ async generateSignedURL(key) {
99
+ return `https://cdn.example.com/${key}?signed`;
100
+ },
101
+ },
102
+ }),
103
+ );
104
+ config.server.storage = { drivers: { images: factory } };
105
+ return factory;
106
+ }
107
+
108
+ it.each(["init", "initForTesting"] as const)(
109
+ "%s에서 디스크 생성 없이 설정을 준비하고 URL을 만든다",
110
+ async (method) => {
111
+ const factory = configureStorage();
112
+ if (method === "init") await Sonamu.init(true, false);
113
+ else await Sonamu.initForTesting();
114
+
115
+ const storage = Sonamu.storage;
116
+ expect(factory).not.toHaveBeenCalled();
117
+ const disk = storage.use("images");
118
+ expect(await disk.getUrl("photo.jpg")).toBe("https://cdn.example.com/photo.jpg");
119
+ expect(await disk.getSignedUrl("photo.jpg")).toBe("https://cdn.example.com/photo.jpg?signed");
120
+ expect(storage.use("images")).toBe(disk);
121
+ expect(factory).toHaveBeenCalledTimes(1);
122
+ await Sonamu.init(true, false);
123
+ expect(Sonamu.storage).toBe(storage);
124
+ },
125
+ );
126
+
127
+ it("설정이 없으면 기존 초기화 오류를 유지한다", async () => {
128
+ await Sonamu.initForTesting();
129
+ expect(() => Sonamu.storage).toThrow("Storage has not been initialized");
130
+ });
131
+
132
+ it("init 다음 서버를 생성해도 기존 디스크 인스턴스를 유지한다", async () => {
133
+ const factory = configureStorage();
134
+ await Sonamu.init(true, false);
135
+ const storage = Sonamu.storage;
136
+ const disk = storage.use("images");
137
+ vi.spyOn(Sonamu, "withFastify").mockResolvedValue(undefined);
138
+ // 실제 listen과 프로세스 종료 훅만 격리한다.
139
+ Sonamu["boot"] = async () => {};
140
+ await Sonamu.createServer({ doSilent: true });
141
+ expect(Sonamu.storage).toBe(storage);
142
+ expect(Sonamu.storage.use("images")).toBe(disk);
143
+ expect(factory).toHaveBeenCalledTimes(1);
144
+ });
145
+ });
@@ -15,8 +15,7 @@ import { PuriTransactionWrapper } from "../database/puri-wrapper";
15
15
  import { type TransactionalOptions } from "../database/puri-wrapper";
16
16
  import { UpsertBuilder } from "../database/upsert-builder";
17
17
  import { convertDomainToCategory } from "../logger/category";
18
- import { type DriverKey } from "../storage/drivers";
19
- import { type KeyGenerator } from "../storage/types";
18
+ import { type DiskName, type KeyGenerator } from "../storage/types";
20
19
  import { type ApiParam, type ApiParamType } from "../types/types";
21
20
  import { getModelNameFromClassName } from "../utils/class-name";
22
21
  import { BaseFrameClass } from "./base-frame";
@@ -85,7 +84,7 @@ type BufferUploadOptions = {
85
84
  };
86
85
  type StreamUploadOptions = {
87
86
  consume: "stream";
88
- destination: DriverKey;
87
+ destination: DiskName;
89
88
  keyGenerator?: KeyGenerator;
90
89
  };
91
90
  export type UploadDecoratorOptions = {