@dan-uni/dan-any 2.0.2 → 2.1.0

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.
package/README.md CHANGED
@@ -1,12 +1,18 @@
1
1
  # @dan-uni/dan-any
2
2
 
3
- `@dan-uni/dan-any` (V2) 是一个弹幕转换与处理库,用于在不同平台格式之间导入、导出与统一处理弹幕数据。
3
+ `@dan-uni/dan-any` (v2) 是一个弹幕转换与处理库,用于在不同平台格式之间导入、导出与统一处理弹幕数据。
4
4
 
5
5
  它的核心思路是:
6
6
  - 用 `Adapter` 把外部格式导入为统一数据
7
7
  - 用 `Transformer` 把统一数据导出为目标格式
8
8
  - 用 `Plugin` 在处理中间态(`UniChunk`)上做增强/清洗/统计
9
9
 
10
+ v2 使用 drizzle+pglite(支持`MemoryFS`(默认)/`NodeFS`/`IndexedDbFS`/`OpfsAhpFS`) 作为默认数据库选项,同时允许通过drizzle接入自定义postgres数据库实例
11
+ v2 打包大小gzip后~100KB (大部分为打包后展开的drizzle schema定义),同时支持tree-shake,故不会大幅增加软件体积
12
+ v2 在第一次初始化实例时可能有~1s的开销,建议使用 [PGLite的Multi-tab Worker](https://pglite.dev/docs/multi-tab-worker) 使所有调用共享一个数据库实例
13
+
14
+ 如果还是觉得太重了,可以使用 v1 版本,在临时小文件处理上速度更快。
15
+
10
16
  ## 功能概览
11
17
 
12
18
  ### Formats 支持转换的格式
@@ -20,6 +26,8 @@
20
26
  - [x] dplayer: `DplayerAdapter` `DplayerTransformer`
21
27
  - [x] artplayer: `ArtplayerAdapter` `ArtplayerTransformer`
22
28
  - [x] 弹弹Play: `DdplayAdapter` `DdplayTransformer`
29
+ - [x] tencent `正向`: `TencentAdapter`
30
+ - [x] vod `双向`: `VodAdapter` `VodTransformer`
23
31
  - [x] [ASS(`@dan-uni/dan-any-ext-ass`)](https://github.com/ani-uni/dan-any-ext-ass) `双向(部分支持,仅该库生成的ass文件支持还原)`
24
32
 
25
33
  ### Plugins 常用插件
@@ -38,6 +46,10 @@ bun add @dan-uni/dan-any
38
46
  pnpm add @dan-uni/dan-any
39
47
  ```
40
48
 
49
+ ## 接入 SKILL
50
+
51
+ 可以从 `/.agents/skills/dan-any/SKILL.md` 导入技能文件。
52
+
41
53
  ## 快速开始
42
54
 
43
55
  详细使用方法可以参考库中的测试文件。
@@ -84,7 +96,11 @@ const reimported = await udb.import(DanuniPbAdapter(pb))
84
96
 
85
97
  ### 高级: 提供兼容的drizzle+pglite实例接入自己的数据库
86
98
 
87
- 详见 测试文件 `tests/db.test.ts`.
99
+ 详见 测试文件 `tests/db.test.ts` 。
100
+
101
+ ### 高级: 使用 `WildcardAdapterUtil` 进行格式自动识别与导入
102
+
103
+ 详见 测试文件 `tests/utils.test.ts` 。
88
104
 
89
105
  ## 模块入口
90
106
 
@@ -1,2 +1,2 @@
1
- import { A as enumModeCodec, C as BiliGrpcAdapter, D as DanuniJsonAdapter, E as DanuniPbTransformer, O as DanuniJsonTransformerConfigurator, S as BiliCommonParser, T as DanuniPbAdapter, _ as BiliXmlAdapter, a as UDanmaku, b as BiliCommonBuilder, c as defineTransformer, d as DplayerAdapter, f as DplayerTransformer, g as ArtplayerTransformer, h as ArtplayerAdapter, i as TransformerInput, j as enumPoolCodec, k as enumAttrsCodec, m as DdplayTransformer, n as Plugin, o as defineAdapter, p as DdplayAdapter, r as Transformer, s as definePlugin, t as Adapter, u as transformerInput2Danmakus, v as BiliXmlTransformerConfigurator, w as BiliCommandGrpcAdapter, x as BiliCommonModeRec, y as BiliUpAdapter } from "./index-5rcmHUF1.mjs";
2
- export { Adapter, ArtplayerAdapter, ArtplayerTransformer, BiliCommandGrpcAdapter, BiliCommonBuilder, BiliCommonModeRec, BiliCommonParser, BiliGrpcAdapter, BiliUpAdapter, BiliXmlAdapter, BiliXmlTransformerConfigurator, DanuniJsonAdapter, DanuniJsonTransformerConfigurator, DanuniPbAdapter, DanuniPbTransformer, DdplayAdapter, DdplayTransformer, DplayerAdapter, DplayerTransformer, Plugin, Transformer, TransformerInput, UDanmaku, defineAdapter, definePlugin, defineTransformer, enumAttrsCodec, enumModeCodec, enumPoolCodec, transformerInput2Danmakus };
1
+ import { A as BiliXmlTransformerConfigurator, B as DanuniPbAdapter, C as DdplayMetadata, D as ArtplayerTransformer, E as ArtplayerMetadata, F as BiliCommonParser, G as DanuniJsonTransformerConfigurator, H as DanuniPbTransformer, I as BiliGrpcAdapter, J as enumPoolCodec, K as enumAttrsCodec, L as BiliGrpcMetadata, M as BiliUpMetadata, N as BiliCommonBuilder, O as BiliXmlAdapter, P as BiliCommonModeRec, R as BiliCommandGrpcAdapter, S as DdplayAdapter, T as ArtplayerAdapter, U as DanuniJsonAdapter, V as DanuniPbMetadata, W as DanuniJsonMetadata, _ as TencentAdapter, a as TransformerInput, b as DplayerMetadata, c as defineMetadata, f as transformerInput2Danmakus, g as VodZod, h as VodTransformer, i as Transformer, j as BiliUpAdapter, k as BiliXmlMetadata, l as definePlugin, m as VodMetadata, n as Metadata, o as UDanmaku, p as VodAdapter, q as enumModeCodec, r as Plugin, s as defineAdapter, t as Adapter, u as defineTransformer, v as TencentMetadata, w as DdplayTransformer, x as DplayerTransformer, y as DplayerAdapter, z as BiliCommandGrpcMetadata } from "./index-CN85D9jj.mjs";
2
+ export { Adapter, ArtplayerAdapter, ArtplayerMetadata, ArtplayerTransformer, BiliCommandGrpcAdapter, BiliCommandGrpcMetadata, BiliCommonBuilder, BiliCommonModeRec, BiliCommonParser, BiliGrpcAdapter, BiliGrpcMetadata, BiliUpAdapter, BiliUpMetadata, BiliXmlAdapter, BiliXmlMetadata, BiliXmlTransformerConfigurator, DanuniJsonAdapter, DanuniJsonMetadata, DanuniJsonTransformerConfigurator, DanuniPbAdapter, DanuniPbMetadata, DanuniPbTransformer, DdplayAdapter, DdplayMetadata, DdplayTransformer, DplayerAdapter, DplayerMetadata, DplayerTransformer, Metadata, Plugin, TencentAdapter, TencentMetadata, Transformer, TransformerInput, UDanmaku, VodAdapter, VodMetadata, VodTransformer, VodZod, defineAdapter, defineMetadata, definePlugin, defineTransformer, enumAttrsCodec, enumModeCodec, enumPoolCodec, transformerInput2Danmakus };
package/dist/adapters.mjs CHANGED
@@ -1 +1 @@
1
- import{A as e,C as t,D as n,E as r,O as i,S as a,T as o,_ as s,b as c,c as l,d as u,f as d,g as f,h as p,j as m,k as h,l as g,m as _,p as v,s as y,u as b,v as x,w as S,x as C,y as w}from"./core-BsUKRX1y.mjs";export{p as ArtplayerAdapter,f as ArtplayerTransformer,S as BiliCommandGrpcAdapter,c as BiliCommonBuilder,C as BiliCommonModeRec,a as BiliCommonParser,t as BiliGrpcAdapter,w as BiliUpAdapter,s as BiliXmlAdapter,x as BiliXmlTransformerConfigurator,n as DanuniJsonAdapter,i as DanuniJsonTransformerConfigurator,o as DanuniPbAdapter,r as DanuniPbTransformer,v as DdplayAdapter,_ as DdplayTransformer,u as DplayerAdapter,d as DplayerTransformer,y as defineAdapter,l as definePlugin,g as defineTransformer,h as enumAttrsCodec,e as enumModeCodec,m as enumPoolCodec,b as transformerInput2Danmakus};
1
+ import{A as e,B as t,C as n,D as r,E as i,F as a,G as o,H as s,I as c,K as l,L as u,M as d,N as f,O as p,P as m,R as h,S as g,T as _,U as v,V as y,W as b,_ as x,b as S,c as C,d as w,f as T,g as E,h as D,j as O,k,l as A,m as j,p as M,q as N,s as P,u as F,v as I,w as L,x as R,y as z,z as B}from"./core-DTWAwE-V.mjs";export{L as ArtplayerAdapter,_ as ArtplayerMetadata,i as ArtplayerTransformer,u as BiliCommandGrpcAdapter,h as BiliCommandGrpcMetadata,d as BiliCommonBuilder,f as BiliCommonModeRec,m as BiliCommonParser,a as BiliGrpcAdapter,c as BiliGrpcMetadata,e as BiliUpAdapter,O as BiliUpMetadata,r as BiliXmlAdapter,p as BiliXmlMetadata,k as BiliXmlTransformerConfigurator,s as DanuniJsonAdapter,v as DanuniJsonMetadata,b as DanuniJsonTransformerConfigurator,B as DanuniPbAdapter,t as DanuniPbMetadata,y as DanuniPbTransformer,R as DdplayAdapter,g as DdplayMetadata,n as DdplayTransformer,I as DplayerAdapter,z as DplayerMetadata,S as DplayerTransformer,E as TencentAdapter,x as TencentMetadata,T as VodAdapter,M as VodMetadata,j as VodTransformer,D as VodZod,P as defineAdapter,C as defineMetadata,A as definePlugin,F as defineTransformer,o as enumAttrsCodec,l as enumModeCodec,N as enumPoolCodec,w as transformerInput2Danmakus};
@@ -1,2 +1,2 @@
1
- import { _ as onConflictDoUpdateSet, a as PoolSchema, c as chunk2danmakusZod, d as danmakus, f as danmakusInsertZod, g as onConflictDoUpdate, h as modeEnum, i as ModeSchema, l as chunks, m as dmAttrEnum, n as DanmakusInsert, o as baseRelations, p as danmakusSelectZod, r as DanmakusSelect, s as chunk2danmakus, t as DMAttrSchema, u as chunksZod, v as poolEnum, y as relations } from "../../schema-BuenbDx9.mjs";
1
+ import { _ as onConflictDoUpdateSet, a as PoolSchema, c as chunk2danmakusZod, d as danmakus, f as danmakusInsertZod, g as onConflictDoUpdate, h as modeEnum, i as ModeSchema, l as chunks, m as dmAttrEnum, n as DanmakusInsert, o as baseRelations, p as danmakusSelectZod, r as DanmakusSelect, s as chunk2danmakus, t as DMAttrSchema, u as chunksZod, v as poolEnum, y as relations } from "../../schema-CS5AwMob.mjs";
2
2
  export { DMAttrSchema, DanmakusInsert, DanmakusSelect, ModeSchema, PoolSchema, baseRelations, chunk2danmakus, chunk2danmakusZod, chunks, chunksZod, danmakus, danmakusInsertZod, danmakusSelectZod, dmAttrEnum, modeEnum, onConflictDoUpdate, onConflictDoUpdateSet, poolEnum, relations };
@@ -1,4 +1,4 @@
1
- import { t as Extra } from "../../dm-extra-DrAQCrFv.mjs";
1
+ import { t as Extra } from "../../dm-extra-LzSQ7NZv.mjs";
2
2
  import { PGlite } from "@electric-sql/pglite";
3
3
  import * as _$drizzle_orm_pglite0 from "drizzle-orm/pglite";
4
4
  import { drizzle } from "drizzle-orm/pglite";
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./chunk-0Lt9GpW0.mjs";import{chunk2danmakus as t,chunks as n,danmakus as r,onConflictDoUpdate as i}from"./core/db/schema.mjs";import{i as a,n as o,r as s,t as c}from"./db-DWWzkRBb.mjs";import{eq as l}from"drizzle-orm";import{z as u}from"zod";import{sha3_256 as ee}from"@noble/hashes/sha3.js";import te from"json-bigint";import{bytesToHex as ne,utf8ToBytes as re}from"@noble/hashes/utils.js";import{fileDesc as ie,messageDesc as d}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as ae,timestampDate as oe,timestampFromDate as se,timestampNow as ce}from"@bufbuild/protobuf/wkt";import{create as le,fromBinary as f,toBinary as ue}from"@bufbuild/protobuf";import{XMLParser as de}from"fast-xml-parser";import fe from"fast-xml-builder";const p=te({useNativeBigInt:!0});var pe=`@dan-uni/dan-any`,me=`2.1.0`;let m=function(e){return e.Bangumi=`bgm`,e.TMDB=`tmdb`,e}({});const h=Object.values(m);let g=function(e){return e.Acfun=`acfun`,e.Baha=`baha`,e.Bilibili=`bili`,e.BilibiliGlobal=`bglobal`,e.Iqiyi=`iqiyi`,e.Tencent=`tencent`,e.Youku=`youku`,e}({});const _=Object.values(g);let v=function(e){return e.DanDanPlay=`ddplay`,e.TuCao=`tucao`,e}({});const he=Object.values(v),y=[..._,...he],ge=[...h,...y],_e=u.templateLiteral([u.string(),`@`,u.string()]);var b=class e{constructor(e,t){this.id=e,this.domain=t}static validateString(e){return _e.safeParse(e).success}static fromStringSafe(e){return this.fromString(_e.parse(e))}static fromString(t){let[n,r]=t.split(`@`);return new e(n,r)}toString(){return`${this.id}@${this.domain}`}static fromNull(t){return new e(t===`runtime`?`runtime`:`anonymous`,t||`danuni`)}static fromBili({cid:t,mid:n,midHash:r}){return t?new e(t.toString(),`bili`):n?new e(n.toString(),`bili`):r?new e(r,`bili`):this.fromNull(`bili`)}static fromUnknown(t,n){return t?new e(t,n):this.fromNull(n)}};let x=function(e){return e[e.Normal=0]=`Normal`,e[e.Bottom=1]=`Bottom`,e[e.Top=2]=`Top`,e[e.Reverse=3]=`Reverse`,e[e.Ext=4]=`Ext`,e}({}),S=function(e){return e[e.Def=0]=`Def`,e[e.Sub=1]=`Sub`,e[e.Adv=2]=`Adv`,e[e.Ix=3]=`Ix`,e}({}),C=function(e){return e.Protect=`Protect`,e.FromLive=`FromLive`,e.HighLike=`HighLike`,e.Compatible=`Compatible`,e.Reported=`Reported`,e.Unchecked=`Unchecked`,e.HasEvent=`HasEvent`,e.Hide=`Hide`,e}({});const w={SOID:b.fromNull().toString(),progress:0,mode:0,fontsize:25,color:16777215,senderID:b.fromNull().toString(),content:``,weight:0,pool:0,attr:[],platform:null,extra:null},T={meassage:`Converted by DanUni!`,version:`JS/TS ${pe} (v${me})`},ve=e=>e?[`adv`,`bas`,`code`,`command`].some(t=>e[t]):!1;function ye(e){return e.mode!==`Ext`&&e.extra&&(e.extra.artplayer||ve(e.extra.bili))?(e.mode=`Ext`,!0):!1}function be(e){let t=p.parse(e);return{...t,bili:t.bili?{...t.bili,dmid:t.bili.dmid?.toString(),mid:t.bili.mid?.toString()}:void 0}}const xe=u.float32(),Se=u.int();function Ce(e){return Se.parse(~~(xe.parse(e)*1e3))}const E=u.codec(u.enum(x).default(0),u.enum(r.mode.enumValues),{decode:e=>r.mode.enumValues[e]||`Normal`,encode:e=>x[e]||0}),D=u.codec(u.enum(S).default(0),u.enum(r.pool.enumValues),{decode:e=>r.pool.enumValues[e]||`Def`,encode:e=>S[e]||0}),O=u.codec(u.enum(C).array(),u.enum(r.attr.enumValues).array(),{decode:e=>e,encode:e=>e.map(e=>C[e])});function we(e){let t=!Number.isInteger(e.progress),n=typeof e.extraStr==`string`;return t||n}const k=J((e,t)=>async(n,r)=>{let i=new Date,a=r??await n.makeChunk({}),o=t?.isV1?!0:e.some(e=>we(e));return await a.upsertDanmakus(e.map(e=>{let t={SOID:e.SOID||w.SOID,progress:e.progress?o?Ce(e.progress):e.progress:w.progress,mode:E.decode(e.mode),fontsize:e.fontsize??w.fontsize,color:e.color??w.color,senderID:e.senderID||w.senderID,content:e.content??w.content,ctime:e.ctime?new Date(e.ctime):i,weight:e.weight??w.weight,pool:D.decode(e.pool),attr:e.attr?O.decode(e.attr):w.attr,platform:e.platform??w.platform,extra:e.extra??(e.extraStr?be(e.extraStr):w.extra)};return ye(t),{...t,DMID:!o&&e.DMID?e.DMID:a.$UniDB.DMIDGenerator(t)}})),a});function Te(e){return Y(t=>t.then(t=>e?.minify?t.map(e=>({SOID:e.SOID===w.SOID?void 0:e.SOID,progress:e.progress===w.progress?void 0:e.progress,mode:e.mode===`Normal`?void 0:E.encode(e.mode),fontsize:e.fontsize===w.fontsize?void 0:e.fontsize,color:e.color===w.color?void 0:e.color,senderID:e.senderID===w.senderID?void 0:e.senderID,content:e.content===w.content?void 0:e.content,ctime:e.ctime,weight:e.weight===w.weight?void 0:e.weight,pool:e.pool===`Def`?void 0:D.encode(e.pool),attr:e.attr&&e.attr.length>0?O.encode(e.attr):void 0,platform:e.platform??void 0,extra:e.extra??void 0,DMID:e.DMID})):t.map(e=>({...e,mode:E.encode(e.mode),pool:D.encode(e.pool),attr:O.encode(e.attr)}))))}const Ee=X({type:`danuni.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return e.import(k(t))}catch{return null}}}}),A=d(ie(`Ch9kYW51bmkvZGFubWFrdS92MS9kYW5tYWt1LnByb3RvEhFkYW51bmkuZGFubWFrdS52MSI2Cg5MaXN0RGFuUmVxdWVzdBIKCgJpZBgBIAEoCRIQCgNzZWcYAiABKAVIAIgBAUIGCgRfc2VnIpMDCgdEYW5tYWt1EhIKBHNvaWQYASABKAlSBFNPSUQSEgoEZG1pZBgCIAEoCVIERE1JRBIQCghwcm9ncmVzcxgDIAEoBRIlCgRtb2RlGAQgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuTW9kZRIQCghmb250c2l6ZRgFIAEoBRINCgVjb2xvchgGIAEoBRIbCglzZW5kZXJfaWQYByABKAlSCHNlbmRlcklEEg8KB2NvbnRlbnQYCCABKAkSKQoFY3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBndlaWdodBgKIAEoBRIlCgRwb29sGAsgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuUG9vbBIMCgRhdHRyGAwgAygJEhUKCHBsYXRmb3JtGA0gASgJSACIAQESGQoIZXh0cmFfdjEYDiABKAlCAhgBSAGIAQESEgoFZXh0cmEYDyABKAlIAogBAUILCglfcGxhdGZvcm1CCwoJX2V4dHJhX3YxQggKBl9leHRyYSI/Cg9MaXN0RGFuUmVzcG9uc2USLAoIZGFubWFrdXMYASADKAsyGi5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1KmIKBE1vZGUSGwoXTU9ERV9OT1JNQUxfVU5TUEVDSUZJRUQQABIPCgtNT0RFX0JPVFRPTRABEgwKCE1PREVfVE9QEAISEAoMTU9ERV9SRVZFUlNFEAMSDAoITU9ERV9FWFQQBCpJCgRQb29sEhgKFFBPT0xfREVGX1VOU1BFQ0lGSUVEEAASDAoIUE9PTF9TVUIQARIMCghQT09MX0FEVhACEgsKB1BPT0xfSVgQAzJkCg5EYW5tYWt1U2VydmljZRJSCgdMaXN0RGFuEiEuZGFudW5pLmRhbm1ha3UudjEuTGlzdERhblJlcXVlc3QaIi5kYW51bmkuZGFubWFrdS52MS5MaXN0RGFuUmVzcG9uc2UiAEKLAQoVY29tLmRhbnVuaS5kYW5tYWt1LnYxQgxEYW5tYWt1UHJvdG9QAaICA0REWKoCEURhbnVuaS5EYW5tYWt1LlYxygIRRGFudW5pXERhbm1ha3VcVjHiAh1EYW51bmlcRGFubWFrdVxWMVxHUEJNZXRhZGF0YeoCE0RhbnVuaTo6RGFubWFrdTo6VjFiBnByb3RvMw`,[ae]),2);let De=function(e){return e[e.NORMAL_UNSPECIFIED=0]=`NORMAL_UNSPECIFIED`,e[e.BOTTOM=1]=`BOTTOM`,e[e.TOP=2]=`TOP`,e[e.REVERSE=3]=`REVERSE`,e[e.EXT=4]=`EXT`,e}({}),Oe=function(e){return e[e.DEF_UNSPECIFIED=0]=`DEF_UNSPECIFIED`,e[e.SUB=1]=`SUB`,e[e.ADV=2]=`ADV`,e[e.IX=3]=`IX`,e}({});const ke=u.codec(u.enum(De),u.enum(r.mode.enumValues),{decode:e=>r.mode.enumValues[e]||`Normal`,encode:e=>{let t=r.mode.enumValues.indexOf(e);return t===-1?0:t}}),Ae=u.codec(u.enum(Oe),u.enum(r.pool.enumValues),{decode:e=>r.pool.enumValues[e]||`Def`,encode:e=>{let t=r.pool.enumValues.indexOf(e);return t===-1?0:t}}),j=J(e=>async(t,n)=>{let i=f(A,new Uint8Array(e)),a=n??await t.makeChunk({}),o=i.danmakus.some(e=>e.extraV1);return await a.upsertDanmakus(i.danmakus.map(e=>{let t={...e,SOID:e.soid,DMID:e.dmid,mode:ke.decode(e.mode),senderID:e.senderId,ctime:oe(e.ctime||ce()),pool:Ae.decode(e.pool),attr:u.enum(r.attr.enumValues).array().parse(e.attr),platform:e.platform??w.platform,extra:e.extra?p.parse(e.extra):e.extraV1?be(e.extraV1):void 0};return o?{...t,DMID:a.$UniDB.DMIDGenerator(t)}:t})),a}),je=Y(e=>e.then(e=>ue(A,le(A,{danmakus:e.map(e=>({...e,soid:e.SOID,dmid:e.DMID,mode:ke.encode(e.mode),senderId:e.senderID,ctime:se(e.ctime),pool:Ae.encode(e.pool),platform:e.platform??void 0,extra:p.stringify(e.extra)}))})))),Me=X({type:`danuni.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))return null;try{let n;if(t instanceof ArrayBuffer)n=new Uint8Array(t);else if(ArrayBuffer.isView(t)){let e=t;n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}else return null;return e.import(j(n))}catch{return null}}}}),Ne=ie(`CiliaWxpYmlsaS9jb21tdW5pdHkvc2VydmljZS9kbS92MS9kbS5wcm90bxIgYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEiZAoGQXZhdGFyEgoKAmlkGAEgASgJEgsKA3VybBgCIAEoCRJBCgthdmF0YXJfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhclR5cGUiIwoGQnViYmxlEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJIsYBCghCdWJibGVWMhIMCgR0ZXh0GAEgASgJEgsKA3VybBgCIAEoCRJBCgtidWJibGVfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVR5cGUSFQoNZXhwb3N1cmVfb25jZRgEIAEoCBJFCg1leHBvc3VyZV90eXBlGAUgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIlsKBkJ1dHRvbhIMCgR0ZXh0GAEgASgJEkMKBmFjdGlvbhgCIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0RnVuY3Rpb25UeXBlIlgKDkJ1enp3b3JkQ29uZmlnEkYKCGtleXdvcmRzGAEgAygLMjQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnV6endvcmRTaG93Q29uZmlnIngKEkJ1enp3b3JkU2hvd0NvbmZpZxIMCgRuYW1lGAEgASgJEg4KBnNjaGVtYRgCIAEoCRIOCgZzb3VyY2UYAyABKAUSCgoCaWQYBCABKAMSEwoLYnV6endvcmRfaWQYBSABKAMSEwoLc2NoZW1hX3R5cGUYBiABKAUiewoIQ2hlY2tCb3gSDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgSDAoEc2hvdxgEIAEoCCJvCgpDaGVja0JveFYyEgwKBHRleHQYASABKAkSPAoEdHlwZRgCIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrYm94VHlwZRIVCg1kZWZhdWx0X3ZhbHVlGAMgASgIIoICCgtDbGlja0J1dHRvbhIVCg1wb3J0cmFpdF90ZXh0GAEgAygJEhYKDmxhbmRzY2FwZV90ZXh0GAIgAygJEhsKE3BvcnRyYWl0X3RleHRfZm9jdXMYAyADKAkSHAoUbGFuZHNjYXBlX3RleHRfZm9jdXMYBCADKAkSQQoLcmVuZGVyX3R5cGUYBSABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEgwKBHNob3cYBiABKAgSOAoGYnViYmxlGAcgASgLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlIrMCCg1DbGlja0J1dHRvblYyEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSFwoPdGV4dF9pbnB1dF9wb3N0GAYgASgIEhUKDWV4cG9zdXJlX29uY2UYByABKAgSRQoNZXhwb3N1cmVfdHlwZRgIIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cG9zdXJlVHlwZSJLCgdDb21tYW5kEkAKC2NvbW1hbmRfZG1zGAEgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZERtIuYBCglDb21tYW5kRG0SCgoCaWQYASABKAMSCwoDb2lkGAIgASgDEgsKA21pZBgDIAEoAxIPCgdjb21tYW5kGAQgASgJEg8KB2NvbnRlbnQYBSABKAkSEAoIcHJvZ3Jlc3MYBiABKAUSDQoFY3RpbWUYByABKAkSDQoFbXRpbWUYCCABKAkSDQoFZXh0cmEYCSABKAkSDQoFaWRTdHIYCiABKAkSDAoEdHlwZRgLIAEoBRITCgthdXRvX2NyZWF0ZRgMIAEoCBISCgpjb3VudF9kb3duGA0gASgFEgwKBGF0dHIYDiABKAUiUAoNRGFubWFrdUFJRmxhZxI/CghkbV9mbGFncxgBIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnIosDCgtEYW5tYWt1RWxlbRIKCgJpZBgBIAEoAxIQCghwcm9ncmVzcxgCIAEoBRIMCgRtb2RlGAMgASgFEhAKCGZvbnRzaXplGAQgASgFEj8KBWNvbG9yGAUgASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1Db2xvcmZ1bFR5cGUSEAoIbWlkX2hhc2gYBiABKAkSDwoHY29udGVudBgHIAEoCRINCgVjdGltZRgIIAEoAxIOCgZ3ZWlnaHQYCSABKAUSDgoGYWN0aW9uGAogASgJEgwKBHBvb2wYCyABKAUSDgoGaWRfc3RyGAwgASgJEgwKBGF0dHIYDSABKAUSEQoJYW5pbWF0aW9uGBYgASgJEg0KBWV4dHJhGBcgASgJEkIKCGNvbG9yZnVsGBggASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1Db2xvcmZ1bFR5cGUSDAoEdHlwZRgZIAEoBRILCgNvaWQYGiABKAMiKQoLRGFubWFrdUZsYWcSDAoEZG1pZBgBIAEoAxIMCgRmbGFnGAIgASgFIksKEURhbm1ha3VGbGFnQ29uZmlnEhAKCHJlY19mbGFnGAEgASgFEhAKCHJlY190ZXh0GAIgASgJEhIKCnJlY19zd2l0Y2gYAyABKAUiiwcKGERhbm11RGVmYXVsdFBsYXllckNvbmZpZxIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYASABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X3N3aXRjaBgQIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV9zZW5pb3JfbW9kZV9zd2l0Y2gYESABKAUSLgomcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjIYEiABKAUSmAEKKnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyX21hcBgTIAMoCzJkLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11RGVmYXVsdFBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgUIAEoCBpLCilQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIuwJChFEYW5tdVBsYXllckNvbmZpZxIdChVwbGF5ZXJfZGFubWFrdV9zd2l0Y2gYASABKAgSIgoacGxheWVyX2Rhbm1ha3Vfc3dpdGNoX3NhdmUYAiABKAgSKQohcGxheWVyX2Rhbm1ha3VfdXNlX2RlZmF1bHRfY29uZmlnGAMgASgIEiwKJHBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX3N3aXRjaBgEIAEoCBIrCiNwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbBgFIAEoBRIfChdwbGF5ZXJfZGFubWFrdV9ibG9ja3RvcBgGIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3Njcm9sbBgHIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja2JvdHRvbRgIIAEoCBIkChxwbGF5ZXJfZGFubWFrdV9ibG9ja2NvbG9yZnVsGAkgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrcmVwZWF0GAogASgIEiMKG3BsYXllcl9kYW5tYWt1X2Jsb2Nrc3BlY2lhbBgLIAEoCBIeChZwbGF5ZXJfZGFubWFrdV9vcGFjaXR5GAwgASgCEiQKHHBsYXllcl9kYW5tYWt1X3NjYWxpbmdmYWN0b3IYDSABKAISHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCEhwKFHBsYXllcl9kYW5tYWt1X3NwZWVkGA8gASgFEiYKHnBsYXllcl9kYW5tYWt1X2VuYWJsZWJsb2NrbGlzdBgQIAEoCBIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBEgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9jb25maWcYEiABKAUSJgoecGxheWVyX2Rhbm1ha3VfaW9zX3N3aXRjaF9zYXZlGBMgASgFEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgUIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgVIAEoBRKRAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBYgAygLMl0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyTWFwRW50cnkSJQodcGxheWVyX2Rhbm1ha3VfZW5hYmxlX2hlcmRfZG0YFyABKAgSJgoecGxheWVyX2Rhbm1ha3VfYmxvY2t0b3BfYm90dG9tGBggASgIEiAKGHBsYXllcl9kYW5tYWt1X2RvbWFpbl92MhgZIAEoBRIeChZwbGF5ZXJfZGFubWFrdV9kZW5zaXR5GBogASgFEiUKHXBsYXllcl9kYW5tYWt1X3N1YnRpdGxlX3Byb29mGBsgASgIEiMKG3BsYXllcl9kYW5tYWt1X3Blb3BsZV9wcm9vZhgcIAEoCBpLCilQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIjAKFkRhbm11UGxheWVyQ29uZmlnUGFuZWwSFgoOc2VsZWN0aW9uX3RleHQYASABKAkiSwoYRGFubXVQbGF5ZXJEeW5hbWljQ29uZmlnEhAKCHByb2dyZXNzGAEgASgFEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAiKQAwoVRGFubXVQbGF5ZXJWaWV3Q29uZmlnEmEKHWRhbm11a3VfZGVmYXVsdF9wbGF5ZXJfY29uZmlnGAEgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnElIKFWRhbm11a3VfcGxheWVyX2NvbmZpZxgCIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyQ29uZmlnEmEKHWRhbm11a3VfcGxheWVyX2R5bmFtaWNfY29uZmlnGAMgAygLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJEeW5hbWljQ29uZmlnEl0KG2Rhbm11a3VfcGxheWVyX2NvbmZpZ19wYW5lbBgEIAEoCzI4LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyQ29uZmlnUGFuZWwimQUKFERhbm11V2ViUGxheWVyQ29uZmlnEhEKCWRtX3N3aXRjaBgBIAEoCBIRCglhaV9zd2l0Y2gYAiABKAgSEAoIYWlfbGV2ZWwYAyABKAUSEAoIYmxvY2t0b3AYBCABKAgSEwoLYmxvY2tzY3JvbGwYBSABKAgSEwoLYmxvY2tib3R0b20YBiABKAgSEgoKYmxvY2tjb2xvchgHIAEoCBIUCgxibG9ja3NwZWNpYWwYCCABKAgSFAoMcHJldmVudHNoYWRlGAkgASgIEg0KBWRtYXNrGAogASgIEg8KB29wYWNpdHkYCyABKAISDgoGZG1hcmVhGAwgASgFEhEKCXNwZWVkcGx1cxgNIAEoAhIQCghmb250c2l6ZRgOIAEoAhISCgpzY3JlZW5zeW5jGA8gASgIEhEKCXNwZWVkc3luYxgQIAEoCBISCgpmb250ZmFtaWx5GBEgASgJEgwKBGJvbGQYEiABKAgSEgoKZm9udGJvcmRlchgTIAEoBRIRCglkcmF3X3R5cGUYFCABKAkSGgoSc2VuaW9yX21vZGVfc3dpdGNoGBUgASgFEhMKC2FpX2xldmVsX3YyGBYgASgFEmEKD2FpX2xldmVsX3YyX21hcBgXIAMoCzJILmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11V2ViUGxheWVyQ29uZmlnLkFpTGV2ZWxWMk1hcEVudHJ5EhcKD2Jsb2NrdG9wX2JvdHRvbRgYIAEoCBISCgpkbV9hcmVhX3YyGBkgASgFEhIKCmRtX2RlbnNpdHkYGiABKAUaMwoRQWlMZXZlbFYyTWFwRW50cnkSCwoDa2V5GAEgASgFEg0KBXZhbHVlGAIgASgFOgI4ASJZCgpEbUNvbG9yZnVsEj4KBHR5cGUYASABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRILCgNzcmMYAiABKAkiUAoPRG1FeHBvUmVwb3J0UmVxEhIKCnNlc3Npb25faWQYASABKAkSCwoDb2lkGAIgASgDEg0KBWRtaWRzGAMgASgMEg0KBXNwbWlkGAQgASgJIhEKD0RtRXhwb1JlcG9ydFJlcyJtCgpEbUhlcmRWaWV3EhsKE2Rpc3BsYXlfaGVyZF9kbV9udW0YASABKAUSQgoIaGVyZF9kbXMYAiADKAsyMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWV3SGVyZERtRWxlbSKWAgoKRG1NYXNrV2FsbBINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSDwoHY29udGVudBgDIAEoCRJNCgxjb250ZW50X3R5cGUYBCABKA4yNy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQ29udGVudFR5cGUSRQoIYml6X3R5cGUYBSABKA4yMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQml6VHlwZRJFCghjb250ZW50cxgGIAMoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50ImsKEURtTWFza1dhbGxDb250ZW50EkUKBHR5cGUYASABKA4yNy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQ29udGVudFR5cGUSDwoHY29udGVudBgCIAEoCSLNEAoRRG1QbGF5ZXJDb25maWdSZXESCgoCdHMYASABKAMSRQoGc3dpdGNoGAIgASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaBJOCgtzd2l0Y2hfc2F2ZRgDIAEoCzI5LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTd2l0Y2hTYXZlElsKEnVzZV9kZWZhdWx0X2NvbmZpZxgEIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEmEKFWFpX3JlY29tbWVuZGVkX3N3aXRjaBgFIAEoCzJCLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkU3dpdGNoEl8KFGFpX3JlY29tbWVuZGVkX2xldmVsGAYgASgLMkEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbBJJCghibG9ja3RvcBgHIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3RvcBJPCgtibG9ja3Njcm9sbBgIIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBJPCgtibG9ja2JvdHRvbRgJIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja2JvdHRvbRJTCg1ibG9ja2NvbG9yZnVsGAogASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSTwoLYmxvY2tyZXBlYXQYCyABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tyZXBlYXQSUQoMYmxvY2tzcGVjaWFsGAwgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc3BlY2lhbBJHCgdvcGFjaXR5GA0gASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdU9wYWNpdHkSUwoNc2NhbGluZ2ZhY3RvchgOIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTY2FsaW5nZmFjdG9yEkUKBmRvbWFpbhgPIAEoCzI1LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VEb21haW4SQwoFc3BlZWQYECABKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3BlZWQSVwoPZW5hYmxlYmxvY2tsaXN0GBEgASgLMj4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZWJsb2NrbGlzdBJeChlpbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoGBIgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuSW5saW5lUGxheWVyRGFubWFrdVN3aXRjaBJbChJzZW5pb3JfbW9kZV9zd2l0Y2gYEyABKAsyPy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBJkChdhaV9yZWNvbW1lbmRlZF9sZXZlbF92MhgUIAEoCzJDLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhJTCg5lbmFibGVfaGVyZF9kbRgVIAEoCzI7LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VFbmFibGVIZXJkRG0SVgoPYmxvY2t0b3BfYm90dG9tGBYgASgLMj0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wQm90dG9tEkoKCWRvbWFpbl92MhgXIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VEb21haW5WMhJHCgdkZW5zaXR5GBggASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURlbnNpdHkSVAoOc3VidGl0bGVfcHJvb2YYGSABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3VidGl0bGVQcm9vZhJQCgxwZW9wbGVfcHJvb2YYGiABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1UGVvcGxlUHJvb2YiLwoLRG1TZWdDb25maWcSEQoJcGFnZV9zaXplGAEgASgDEg0KBXRvdGFsGAIgASgDIpECChBEbVNlZ01vYmlsZVJlcGx5EjwKBWVsZW1zGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUVsZW0SDQoFc3RhdGUYAiABKAUSQAoHYWlfZmxhZxgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VBSUZsYWcSFQoNc2VnbWVudF9ydWxlcxgEIAMoAxJCCgxjb2xvcmZ1bF9zcmMYBSADKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsEhMKC2NvbnRleHRfc3JjGAYgASgJIsoBCg5EbVNlZ01vYmlsZVJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAxIWCg50ZWVuYWdlcnNfbW9kZRgFIAEoBRIKCgJwcxgGIAEoAxIKCgJwZRgHIAEoAxIRCglwdWxsX21vZGUYCCABKAUSEgoKZnJvbV9zY2VuZRgJIAEoBRINCgVzcG1pZBgKIAEoCRITCgtjb250ZXh0X2V4dBgLIAEoCSJcCg1EbVNlZ090dFJlcGx5EjwKBWVsZW1zGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUVsZW0SDQoFc3RhdGUYAiABKAUiTAoLRG1TZWdPdHRSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEhUKDXNlZ21lbnRfaW5kZXgYBCABKAMiXQoNRG1TZWdTREtSZXBseRIOCgZjbG9zZWQYASABKAgSPAoFZWxlbXMYAiADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbSJMCgtEbVNlZ1NES1JlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJ3CglEbVN1YlZpZXcSDAoEdHlwZRgBIAEoBRILCgNvaWQYAiABKAMSCwoDcGlkGAMgASgDEkIKC3Bvc3RfcGFuZWwyGAQgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjIioQkKC0RtVmlld1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI5CgRtYXNrGAIgASgLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVmlkZW9NYXNrEkEKCHN1YnRpdGxlGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVmlkZW9TdWJ0aXRsZRITCgtzcGVjaWFsX2RtcxgEIAMoCRJECgdhaV9mbGFnGAUgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWdDb25maWcSTgoNcGxheWVyX2NvbmZpZxgGIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyVmlld0NvbmZpZxIWCg5zZW5kX2JveF9zdHlsZRgHIAEoBRINCgVhbGxvdxgIIAEoCBIRCgljaGVja19ib3gYCSABKAgSGgoSY2hlY2tfYm94X3Nob3dfbXNnGAogASgJEhgKEHRleHRfcGxhY2Vob2xkZXIYCyABKAkSGQoRaW5wdXRfcGxhY2Vob2xkZXIYDCABKAkSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GA0gAygJEkEKC2V4cG9fcmVwb3J0GA4gASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb1JlcG9ydBJJCg9idXp6d29yZF9jb25maWcYDyABKAsyMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZENvbmZpZxJCCgtleHByZXNzaW9ucxgQIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb25zEj8KCnBvc3RfcGFuZWwYESADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWwSFQoNYWN0aXZpdHlfbWV0YRgSIAMoCRJCCgtwb3N0X3BhbmVsMhgTIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbFYyEkIKDGRtX21hc2tfd2FsbBgUIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGwSPQoHZG1faGVyZBgVIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtSGVyZFZpZXcSOgoHY29tbWFuZBgWIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmQSCgoCa3YYFyABKAkSPgoJc3ViX3ZpZXdzGBggAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgZIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8ibQoJRG1WaWV3UmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRINCgVzcG1pZBgEIAEoCRIUCgxpc19oYXJkX2Jvb3QYBSABKAUSEwoLY29udGV4dF9leHQYBiABKAkigQYKDkRtV2ViVmlld1JlcGx5Eg0KBXN0YXRlGAEgASgFEgwKBHRleHQYAiABKAkSEQoJdGV4dF9zaWRlGAMgASgJEj0KBmRtX3NnZRgEIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnQ29uZmlnEkEKBGZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxITCgtzcGVjaWFsX2RtcxgGIAMoCRIRCgljaGVja19ib3gYByABKAgSDQoFY291bnQYCCABKAMSQAoLY29tbWFuZF9kbXMYCSADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0STQoNcGxheWVyX2NvbmZpZxgKIAEoCzI2LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11V2ViUGxheWVyQ29uZmlnEh0KFXJlcG9ydF9maWx0ZXJfY29udGVudBgLIAMoCRJCCgtleHByZXNzaW9ucxgMIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb25zEj8KCnBvc3RfcGFuZWwYDSADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWwSFQoNYWN0aXZpdHlfbWV0YRgOIAMoCRJCCgtwb3N0X3BhbmVsMhgPIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbFYyEj4KCXN1Yl92aWV3cxgQIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU3ViVmlldxI2CgNxb2UYESABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Rb2VJbmZvIioKCkV4cG9SZXBvcnQSHAoUc2hvdWxkX3JlcG9ydF9hdF9lbmQYASABKAgiZAoKRXhwcmVzc2lvbhIPCgdrZXl3b3JkGAEgAygJEgsKA3VybBgCIAEoCRI4CgZwZXJpb2QYAyADKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QZXJpb2QiSQoLRXhwcmVzc2lvbnMSOgoEZGF0YRgBIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb24iKgoZSW5saW5lUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCCInCgVMYWJlbBINCgV0aXRsZRgBIAEoCRIPCgdjb250ZW50GAIgAygJIocBCgdMYWJlbFYyEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkSFQoNZXhwb3N1cmVfb25jZRgDIAEoCBJFCg1leHBvc3VyZV90eXBlGAQgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIiQKBlBlcmlvZBINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMiMAofUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbBINCgV2YWx1ZRgBIAEoBSIyCiFQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjISDQoFdmFsdWUYASABKAUiMQogUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrYm90dG9tEg0KBXZhbHVlGAEgASgIIisKGlBsYXllckRhbm1ha3VCbG9ja2NvbG9yZnVsEg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tzY3JvbGwSDQoFdmFsdWUYASABKAgiKgoZUGxheWVyRGFubWFrdUJsb2Nrc3BlY2lhbBINCgV2YWx1ZRgBIAEoCCImChVQbGF5ZXJEYW5tYWt1QmxvY2t0b3ASDQoFdmFsdWUYASABKAgiLAobUGxheWVyRGFubWFrdUJsb2NrdG9wQm90dG9tEg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VEZW5zaXR5Eg0KBXZhbHVlGAEgASgFIiQKE1BsYXllckRhbm1ha3VEb21haW4SDQoFdmFsdWUYASABKAIiJgoVUGxheWVyRGFubWFrdURvbWFpblYyEg0KBXZhbHVlGAEgASgFIioKGVBsYXllckRhbm1ha3VFbmFibGVIZXJkRG0SDQoFdmFsdWUYASABKAgiLQocUGxheWVyRGFubWFrdUVuYWJsZWJsb2NrbGlzdBINCgV2YWx1ZRgBIAEoCCIlChRQbGF5ZXJEYW5tYWt1T3BhY2l0eRINCgV2YWx1ZRgBIAEoAiIpChhQbGF5ZXJEYW5tYWt1UGVvcGxlUHJvb2YSDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISDQoFdmFsdWUYASABKAIiLgodUGxheWVyRGFubWFrdVNlbmlvck1vZGVTd2l0Y2gSDQoFdmFsdWUYASABKAUiIwoSUGxheWVyRGFubWFrdVNwZWVkEg0KBXZhbHVlGAEgASgFIisKGlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mEg0KBXZhbHVlGAEgASgIIjgKE1BsYXllckRhbm1ha3VTd2l0Y2gSDQoFdmFsdWUYASABKAgSEgoKY2FuX2lnbm9yZRgCIAEoCCIoChdQbGF5ZXJEYW5tYWt1U3dpdGNoU2F2ZRINCgV2YWx1ZRgBIAEoCCIuCh1QbGF5ZXJEYW5tYWt1VXNlRGVmYXVsdENvbmZpZxINCgV2YWx1ZRgBIAEoCCKMAwoJUG9zdFBhbmVsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIQCghwcmlvcml0eRgDIAEoAxIOCgZiaXpfaWQYBCABKAMSRAoIYml6X3R5cGUYBSABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkMKDGNsaWNrX2J1dHRvbhgGIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uEj8KCnRleHRfaW5wdXQYByABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5UZXh0SW5wdXQSPQoJY2hlY2tfYm94GAggASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tCb3gSNgoFdG9hc3QYCSABKAsyJy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdCKtBAoLUG9zdFBhbmVsVjISDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEkQKCGJpel90eXBlGAMgASgOMjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsQml6VHlwZRJFCgxjbGlja19idXR0b24YBCABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DbGlja0J1dHRvblYyEkEKCnRleHRfaW5wdXQYBSABKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5UZXh0SW5wdXRWMhI/CgljaGVja19ib3gYBiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveFYyEjgKBXRvYXN0GAcgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RWMhI6CgZidWJibGUYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGVWMhI4CgVsYWJlbBgJIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsVjISQQoLcG9zdF9zdGF0dXMYCiABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0U3RhdHVzIhcKB1FvZUluZm8SDAoEaW5mbxgBIAEoCSIpCghSZXNwb25zZRIMCgRjb2RlGAEgASgFEg8KB21lc3NhZ2UYAiABKAki+QIKDFN1YnRpdGxlSXRlbRIKCgJpZBgBIAEoAxIOCgZpZF9zdHIYAiABKAkSCwoDbGFuGAMgASgJEg8KB2xhbl9kb2MYBCABKAkSFAoMc3VidGl0bGVfdXJsGAUgASgJEjoKBmF1dGhvchgGIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlVzZXJJbmZvEjwKBHR5cGUYByABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZVR5cGUSFQoNbGFuX2RvY19icmllZhgIIAEoCRJBCgdhaV90eXBlGAkgASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuU3VidGl0bGVBaVR5cGUSRQoJYWlfc3RhdHVzGAogASgOMjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuU3VidGl0bGVBaVN0YXR1cyLoAgoJVGV4dElucHV0EhwKFHBvcnRyYWl0X3BsYWNlaG9sZGVyGAEgAygJEh0KFWxhbmRzY2FwZV9wbGFjZWhvbGRlchgCIAMoCRJBCgtyZW5kZXJfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSGAoQcGxhY2Vob2xkZXJfcG9zdBgEIAEoCBIMCgRzaG93GAUgASgIEjgKBmF2YXRhchgGIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhchJBCgtwb3N0X3N0YXR1cxgHIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMSNgoFbGFiZWwYCCABKAsyJy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5MYWJlbCL7AQoLVGV4dElucHV0VjISHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEjgKBmF2YXRhchgFIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhchIYChB0ZXh0X2lucHV0X2xpbWl0GAYgASgFIm8KBVRvYXN0EgwKBHRleHQYASABKAkSEAoIZHVyYXRpb24YAiABKAUSDAoEc2hvdxgDIAEoCBI4CgZidXR0b24YBCABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXR0b24iYgoNVG9hc3RCdXR0b25WMhIMCgR0ZXh0GAEgASgJEkMKBmFjdGlvbhgCIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0RnVuY3Rpb25UeXBlInMKB1RvYXN0VjISDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRJICg90b2FzdF9idXR0b25fdjIYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdEJ1dHRvblYyIlwKCFVzZXJJbmZvEgsKA21pZBgBIAEoAxIMCgRuYW1lGAIgASgJEgsKA3NleBgDIAEoCRIMCgRmYWNlGAQgASgJEgwKBHNpZ24YBSABKAkSDAoEcmFuaxgGIAEoBSJTCglWaWRlb01hc2sSCwoDY2lkGAEgASgDEgwKBHBsYXQYAiABKAUSCwoDZnBzGAMgASgFEgwKBHRpbWUYBCABKAMSEAoIbWFza191cmwYBSABKAkicAoNVmlkZW9TdWJ0aXRsZRILCgNsYW4YASABKAkSDwoHbGFuX2RvYxgCIAEoCRJBCglzdWJ0aXRsZXMYAyADKAsyLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUl0ZW0ikgEKDlZpZXdIZXJkRG1FbGVtEhAKCGhlcmRfbXNnGAEgASgJEhYKDmhlcmRfc3RhcnRfY250GAIgASgFEhQKDGhlcmRfZW5kX2NudBgDIAEoBRISCgpyZWdleF9ydWxlGAQgASgJEhYKDnN0YXJ0X3Byb2dyZXNzGAUgASgFEhQKDGVuZF9wcm9ncmVzcxgGIAEoBSozCgpBdmF0YXJUeXBlEhIKDkF2YXRhclR5cGVOb25lEAASEQoNQXZhdGFyVHlwZU5GVBABKlkKCkJ1YmJsZVR5cGUSEgoOQnViYmxlVHlwZU5vbmUQABIZChVCdWJibGVUeXBlQ2xpY2tCdXR0b24QARIcChhCdWJibGVUeXBlRG1TZXR0aW5nUGFuZWwQAipYCgxDaGVja2JveFR5cGUSFAoQQ2hlY2tib3hUeXBlTm9uZRAAEhkKFUNoZWNrYm94VHlwZUVuY291cmFnZRABEhcKE0NoZWNrYm94VHlwZUNvbG9yRE0QAio1Cg5EbUNvbG9yZnVsVHlwZRIMCghOb25lVHlwZRAAEhUKD1ZpcEdyYWR1YWxDb2xvchDh1AMqYAoRRG1NYXNrV2FsbEJpelR5cGUSCwoHVW5rbm93bhAAEgcKA09HVhABEgoKBkJpelBpYxACEggKBE11dGUQAxIKCgZSZWNvcmQQBBIJCgVDbG91ZBAFEggKBEFJR0MQBip2ChVEbU1hc2tXYWxsQ29udGVudFR5cGUSIAocRG1NYXNrV2FsbENvbnRlbnRUeXBlVW5rbm93bhAAEh0KGURtTWFza1dhbGxDb250ZW50VHlwZVRleHQQARIcChhEbU1hc2tXYWxsQ29udGVudFR5cGVQaWMQAio8CgxFeHBvc3VyZVR5cGUSFAoQRXhwb3N1cmVUeXBlTm9uZRAAEhYKEkV4cG9zdXJlVHlwZURNU2VuZBABKoMCChBQb3N0UGFuZWxCaXpUeXBlEhgKFFBvc3RQYW5lbEJpelR5cGVOb25lEAASHQoZUG9zdFBhbmVsQml6VHlwZUVuY291cmFnZRABEhsKF1Bvc3RQYW5lbEJpelR5cGVDb2xvckRNEAISGQoVUG9zdFBhbmVsQml6VHlwZU5GVERNEAMSHQoZUG9zdFBhbmVsQml6VHlwZUZyYWdDbG9zZRAEEh0KGVBvc3RQYW5lbEJpelR5cGVSZWNvbW1lbmQQBRIcChhQb3N0UGFuZWxCaXpUeXBlUGxvdExlYWsQBhIiCh5Qb3N0UGFuZWxCaXpUeXBlQW50aUhhcmFzc21lbnQQByo4CgpQb3N0U3RhdHVzEhQKEFBvc3RTdGF0dXNOb3JtYWwQABIUChBQb3N0U3RhdHVzQ2xvc2VkEAEqTgoKUmVuZGVyVHlwZRISCg5SZW5kZXJUeXBlTm9uZRAAEhQKEFJlbmRlclR5cGVTaW5nbGUQARIWChJSZW5kZXJUeXBlUm90YXRpb24QAio2ChBTdWJ0aXRsZUFpU3RhdHVzEggKBE5vbmUQABIMCghFeHBvc3VyZRABEgoKBkFzc2lzdBACKisKDlN1YnRpdGxlQWlUeXBlEgoKBk5vcm1hbBAAEg0KCVRyYW5zbGF0ZRABKh4KDFN1YnRpdGxlVHlwZRIGCgJDQxAAEgYKAkFJEAEqTgoRVG9hc3RGdW5jdGlvblR5cGUSGQoVVG9hc3RGdW5jdGlvblR5cGVOb25lEAASHgoaVG9hc3RGdW5jdGlvblR5cGVQb3N0UGFuZWwQATKgBQoCRE0ScwoLRG1TZWdNb2JpbGUSMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ01vYmlsZVJlcRoyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVwbHkSZAoGRG1WaWV3EisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1WaWV3UmVxGi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1WaWV3UmVwbHkScQoORG1QbGF5ZXJDb25maWcSMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVBsYXllckNvbmZpZ1JlcRoqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlc3BvbnNlEmoKCERtU2VnT3R0Ei0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdPdHRSZXEaLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcGx5EmoKCERtU2VnU0RLEi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdTREtSZXEaLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcGx5EnQKDERtRXhwb1JlcG9ydBIxLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtRXhwb1JlcG9ydFJlcRoxLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtRXhwb1JlcG9ydFJlc0LUAQokY29tLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxQgdEbVByb3RvUAGiAgRCQ1NEqgIgQmlsaWJpbGkuQ29tbXVuaXR5LlNlcnZpY2UuRG0uVjHKAiBCaWxpYmlsaVxDb21tdW5pdHlcU2VydmljZVxEbVxWMeICLEJpbGliaWxpXENvbW11bml0eVxTZXJ2aWNlXERtXFYxXEdQQk1ldGFkYXRh6gIkQmlsaWJpbGk6OkNvbW11bml0eTo6U2VydmljZTo6RG06OlYxYgZwcm90bzM`),Pe=d(Ne,30),Fe=d(Ne,39),M=J(e=>async(t,n)=>{let r=n??await t.makeChunk({}),i=f(Fe,new Uint8Array(e)).commandDms;return await r.upsertDanmakus(i.map(e=>{let t=`def_bili+${b.fromBili({cid:e.oid}).toString()}`,n=b.fromBili({mid:e.mid}),i={SOID:t,progress:e.progress,mode:`Ext`,fontsize:w.fontsize,color:w.color,senderID:n.toString(),content:e.content,ctime:new Date(`${e.ctime} GMT+0800`),weight:11,pool:`Adv`,attr:[`Protect`],platform:`bili`,extra:{bili:{dmid:e.idStr,attr:e.attr,mid:e.mid?.toString(),command:e}}};return{...i,DMID:r.$UniDB.DMIDGenerator(i)}})),r}),Ie=X({type:`bili.cmd.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`,`.so`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))return null;try{let n;if(t instanceof ArrayBuffer)n=new Uint8Array(t);else if(ArrayBuffer.isView(t)){let e=t;n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}else return null;return e.import(M(n))}catch{return null}}}});function Le(e,t){return t===`ms`?!0:t===`s`?!1:e<1e8}function N(e,t){return typeof e==`number`||typeof e==`bigint`?Le(e,t)?new Date(Number(e)):new Date(Number(e)*1e3):typeof e==`string`?/^\d+n$/.test(e)?N(Number(e.slice(0,-1)),t):N(Number(e),t):e}const Re=e=>{let t=[];do t.unshift(!!(e&1)),e>>=1;while(e);return t.toReversed()};var ze=class{constructor(e){this.bin=e}set1(e){this.bin|=1<<e}set0(e){this.bin&=~(1<<e)}};const Be={fromBin(e=0,t){let n=Re(e),r=[];return t===`bili`&&(n[0]&&r.push(`Protect`),n[1]&&r.push(`FromLive`),n[2]&&r.push(`HighLike`)),r},toBin(e=[],t){let n=new ze(0);return t===`bili`&&(e.includes(`Protect`)&&n.set1(0),e.includes(`FromLive`)&&n.set1(1),e.includes(`HighLike`)&&n.set1(2)),n.bin}};function P(e,t,n,r){t.oid&&!n&&(n=t.oid);let i=r||`def_bili+${b.fromBili({cid:n}).toString()}`,a=b.validateString(t.midHash)?t.midHash:b.fromBili({midHash:t.midHash}).toString(),o,s=t.pool,c={bili:{mode:t.mode,pool:t.pool,dmid:t.idStr??t.id.toString(),attr:t.attr,mid:t.mid?.toString(),adv:void 0,code:void 0,bas:void 0}};switch(t.mode){case 4:o=1;break;case 5:o=2;break;case 6:o=3;break;case 7:o=4,c.bili.adv=t.content;break;case 8:o=4,c.bili.code=t.content;break;case 9:o=4,c.bili.bas=t.content;break;default:o=0;break}let l={...t,SOID:i,mode:o,senderID:a,ctime:N(t.ctime,`s`),weight:t.weight||+(s===3),pool:s,attr:Be.fromBin(t.attr,`bili`),platform:`bili`,extra:c};return{...l,mode:E.decode(o),pool:D.decode(s),DMID:e.$UniDB.DMIDGenerator({...l,mode:E.decode(o),pool:D.decode(s)})}}const F=(e,t)=>{switch(e){case`Normal`:return 1;case`Bottom`:return 4;case`Top`:return 5;case`Reverse`:return 6;case`Ext`:return t?t.adv?7:t.code?8:t.bas?9:1:1;default:return 1}};function I(e,t,n){if(n?.skipBiliCommand&&t.extra?.bili?.command)return null;let r=t.extra?.bili?.mode||F(t.mode,t.extra?.bili),i;switch(r){case 7:i=t.extra?.bili?.adv;break;case 8:i=t.extra?.bili?.code;break;case 9:i=t.extra?.bili?.bas;break;default:i=t.content;break}return{"#text":i??t.content,"@_p":[t.progress/1e3,r,t.fontsize,t.color,t.ctime.getTime()/1e3,t.extra?.bili?.pool||t.pool,n?.avoidSenderIDWithAt?t.senderID.replaceAll(`@bili`,``):t.senderID,t.extra?.bili?.dmid||t.DMID||e(t),t.weight].join(`,`)}}const L=J(e=>async(t,n)=>{let r=n??await t.makeChunk({}),i=f(Pe,new Uint8Array(e)).elems;return await r.upsertDanmakus(i.map(e=>P(r,e))),r}),Ve=X({type:`bili.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`,`.so`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))return null;try{let n;if(t instanceof ArrayBuffer)n=new Uint8Array(t);else if(ArrayBuffer.isView(t)){let e=t;n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}else return null;return e.import(L(n))}catch{return null}}}}),R=J(e=>async(t,n)=>{let r=n??await t.makeChunk({});return await r.upsertDanmakus(e.data.result.map(e=>{let t=e.attrs?e.attrs.split(`,`).map(Number).reduce((e,t)=>e|1<<t-1,0):0;return P(r,{id:BigInt(e.id_str||e.id),idStr:e.id_str,progress:e.progress,mode:e.mode,fontsize:e.fontsize,color:Number.parseInt(e.color,16),mid:e.mid,midHash:e.mid_hash,content:e.msg,ctime:BigInt(e.ctime),pool:e.pool,attr:t,oid:BigInt(e.oid)})})),r}),He=X({type:`bili.up.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(!(typeof t==`object`||typeof t==`string`)||!t)return null;try{return e.import(R(p.parse(p.stringify(t))))}catch{return null}}}}),Ue=new de({ignoreAttributes:!1,isArray:(e,t,n,r)=>t===`i.d`}),We=new fe({ignoreAttributes:!1});function Ge(e,t){let n=e.split(`,`);return{content:t,progress:~~(Number.parseFloat(n[0])*1e3),mode:Number.parseInt(n[1]),fontsize:Number.parseInt(n[2]),color:Number.parseInt(n[3]),ctime:BigInt(n[4]),pool:Number.parseInt(n[5]),midHash:n[6],id:BigInt(n[7]),idStr:n[7],weight:Number.parseInt(n[8])}}const z=J(e=>async(t,n)=>{let r=Ue.parse(e),i=r.i.d,a=!!r.i.danuni,o=BigInt(r.i.chatid),s=a?r.i.danuni?.data:void 0,c=n??await t.makeChunk({fromConverted:a});return await c.upsertDanmakus(i.map(e=>P(c,Ge(e[`@_p`],e[`#text`]),o,s))),c}),Ke=(e,t)=>{if(e){let n=b.fromStringSafe(e);if(n.domain===`bili`){let e=n.id.replaceAll(`def_bili+`,``);if(e)return e}return t?.cid||e}else return t?.cid||b.fromNull().toString()},qe=e=>Y(async(t,n)=>{let r=await t;if(e?.avoidSenderIDWithAt&&!r.every(e=>e.senderID.endsWith(`@bili`)))throw Error(`存在其他来源的senderID,请关闭该功能再试!`);let i=r.map(t=>I(n.DMIDGenerator,t,e));return e?.skipBiliCommand&&(i=i.filter(e=>e!==null)),We.build({"?xml":{"@_version":`1.0`,"@_encoding":`UTF-8`},i:{chatserver:`chat.bilibili.com`,chatid:Ke(r[0]?.SOID),mission:0,maxlimit:r.length,state:0,real_name:0,source:`k-v`,danuni:{...T,data:[...new Set(r.map(e=>e.SOID))][0]},d:i}})}),Je=X({type:`bili.xml`,ext:[`.xml`],check:{adapter:async(e,t)=>{if(typeof t!=`string`)return null;try{return e.import(z(t))}catch{return null}}}});function B(e,t){let n=`Normal`;switch(t){case`bili`:switch(e){case 4:n=`Bottom`;break;case 5:n=`Top`;break;case 6:n=`Reverse`;break;case 7:n=`Ext`;break;case 8:n=`Ext`;break;case 9:n=`Ext`;break}break;case`dplayer`:e===1?n=`Top`:e===2&&(n=`Bottom`);break;case`artplayer`:e===1?n=`Top`:e===2&&(n=`Bottom`);break;case`ddplay`:n=B(e,`bili`);break;case`vod`:e===`top`?n=`Top`:e===`bottom`&&(n=`Bottom`);break;default:n=`Normal`;break}return n}const V=J((e,t,n=`other`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!!e.danuni}),o=t?b.fromUnknown(t,n).toString():b.fromNull(n).toString(),s=b.fromNull(n).toString(),c=new Date;return await a.upsertDanmakus(e.danmuku.map(e=>{let t=e.border?{artplayer:{border:e.border,style:{}}}:null;e.style&&(t=t?{...t,artplayer:{...t.artplayer,border:e.border,style:e.style}}:{artplayer:{border:e.border,style:e.style}});let r=B(e.mode??0,`artplayer`),i={attr:w.attr,fontsize:w.fontsize,ctime:c,weight:w.weight,pool:`Def`,content:e.text,progress:(e.time??0)*1e3,mode:r,color:Number((e.color||`FFFFFF`).replace(`#`,`0x`)),style:e.style,SOID:o,senderID:s,platform:n,extra:t};return{...i,DMID:a.$UniDB.DMIDGenerator(i)}})),a}),Ye=Y(e=>e.then(e=>({danuni:{...T,data:e[0]?.SOID.split(`@`)[0]},danmuku:e.map(e=>{let t=0;return e.mode===`Top`?t=1:e.mode===`Bottom`&&(t=2),{text:e.content,time:e.progress/1e3,mode:t,color:`#${e.color.toString(16).toUpperCase()||`FFFFFF`}`,border:e.extra?.artplayer?.border,style:e.extra?.artplayer?.style}})}))),Xe=X({type:`artplayer.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(V(t)),V}catch{return null}}}}),H=J((e,t=`0`,n=`ddplay`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!!e.danuni}),o=b.fromUnknown(`def_ddplay+${t}`,n).toString(),s=new Date;return await a.upsertDanmakus(e.comments.map(e=>{let t=e.p.split(`,`),r=t[3],i=b.fromUnknown(r,n).toString(),c=B(Number.parseInt(t[1]),`ddplay`),l={SOID:o,color:Number.parseInt(t[2]),progress:Number.parseFloat(t[0])*1e3,mode:c,senderID:i,content:e.m,platform:n,extra:{ddplay:{cid:e.cid,uid:r}},attr:w.attr,fontsize:w.fontsize,ctime:s,weight:w.weight,pool:`Def`};return{...l,DMID:a.$UniDB.DMIDGenerator(l)}})),a}),Ze=Y(e=>e.then(e=>({danuni:{...T,data:e[0]?.SOID.split(`@`)[0].replaceAll(`def_ddplay+`,``)},count:e.length,comments:e.map(e=>{let t=1;return e.mode===`Top`?t=5:e.mode===`Bottom`&&(t=4),{cid:e.extra?.ddplay?.cid??Number.parseInt(`0x${Buffer.from(e.DMID).toString(`hex`)}`)??0,p:`${e.progress/1e3},${t},${e.color},${e.extra?.ddplay?.uid??e.senderID}`,m:e.content}})}))),Qe=X({type:`ddplay.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(H(t)),H}catch{return null}}}}),U=J((e,t,n=`other`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!!e.danuni}),o=t?b.fromUnknown(t,n).toString():b.fromNull(n).toString(),s=new Date;return await a.upsertDanmakus(e.data.map(([e,t,r,i,c])=>{let l=B(t,`dplayer`),u={attr:w.attr,fontsize:w.fontsize,ctime:s,weight:w.weight,extra:w.extra,pool:`Def`,progress:e*1e3,mode:l,color:r,midHash:i,content:c,SOID:o,senderID:b.fromUnknown(i,n).toString(),platform:n};return{...u,DMID:a.$UniDB.DMIDGenerator(u)}})),a}),$e=Y(e=>e.then(e=>({code:0,danuni:{...T,data:e[0]?.SOID.split(`@`)[0]},data:e.map(e=>{let t=0;return e.mode===`Top`?t=1:e.mode===`Bottom`&&(t=2),[e.progress/1e3,t,e.color,e.senderID,e.content]})}))),et=X({type:`dplayer.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(U(t)),U}catch{return null}}}});function tt(e){return e===2?`Top`:e===3?`Bottom`:`Normal`}const nt=u.object({color:u.string(),gradient_colors:u.tuple([u.string(),u.string()]),position:u.number()}),rt=u.string().transform(e=>{try{let t=JSON.parse(e);return nt.parse(t)}catch{return}}).transform(e=>{let t=e?.gradient_colors[0]??e?.color??`ffffff`;return{color:Number(`#${t}`.replace(`#`,`0x`)),mode:tt(e?.position)}}),W=`tencent`,G=J((e,t)=>async(n,r)=>{let i=r??await n.makeChunk({fromConverted:!1}),a=t?b.fromUnknown(t,W).toString():b.fromNull(W).toString(),o=b.fromNull(W).toString(),s=Array.isArray(e?.barrage_list)?e.barrage_list:[];return await i.upsertDanmakus(s.map(e=>{let t=rt.parse(e.content_style),n={...e};delete n.content,delete n.time_offset,delete n.create_time;let r={attr:w.attr,fontsize:w.fontsize,ctime:N(e.create_time,`s`),weight:e.show_weight??w.weight,pool:`Def`,content:e.content,progress:Number.parseInt(e.time_offset)||0,mode:t.mode,color:t.color,SOID:a,senderID:o,platform:W,extra:{tencent:n}};return{...r,DMID:i.$UniDB.DMIDGenerator(r)}})),i}),it=X({type:`tencent.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(G(t)),G}catch{return null}}}}),K=u.object({code:u.number(),name:u.string(),danum:u.number(),danmuku:u.array(u.tuple([u.coerce.number().min(0),u.union([u.literal(`right`),u.literal(`top`),u.literal(`bottom`)]),u.string().toUpperCase().regex(/^#([0-9a-fA-F]{3}){1,2}$/,{error:`Invalid hex color format`}).transform(e=>e.length>6?e.toUpperCase():`#${e.split(`#`)[1].toUpperCase()}`),u.string().prefault(``),u.string(),u.string().prefault(``),u.string().prefault(``),u.string().regex(/^\d+px$/)]).rest(u.any()))}),q=J((e,t,n=`other`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!1}),o=t?b.fromUnknown(t,n).toString():b.fromNull(n).toString(),s=b.fromNull(n).toString(),c=new Date;return await a.upsertDanmakus(e.danmuku.slice(-e.danum).map(e=>{let t={...w,pool:`Def`,ctime:c,SOID:o,senderID:s,progress:~~(e[0]*1e3),mode:B(e[1],`vod`),color:Number((e[2]||`FFFFFF`).replace(`#`,`0x`)),content:e[4],fontsize:Number(e[7].replace(`px`,``))};return{...t,DMID:a.$UniDB.DMIDGenerator(t)}})),a}),at=Y(e=>e.then(e=>({danuni:{...T,data:e[0]?.SOID.split(`@`)[0]},code:0,name:e[0]?.SOID??`unknown`,danum:e.length,danmuku:e.map(e=>{let t=`right`;switch(e.mode){case`Top`:t=`top`;break;case`Bottom`:t=`bottom`;break}return[e.progress/1e3,t,`#${e.color.toString(16).toUpperCase()||`FFFFFF`}`,``,e.content,``,``,`${e.fontsize}px`]})}))),ot=X({type:`vod.json`,ext:[`.json`],check:{body:e=>K.safeParse(e).success?q:null,adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(q(t)),q}catch{return null}}}});var st=e({ArtplayerAdapter:()=>V,ArtplayerMetadata:()=>Xe,ArtplayerTransformer:()=>Ye,BiliCommandGrpcAdapter:()=>M,BiliCommandGrpcMetadata:()=>Ie,BiliCommonBuilder:()=>I,BiliCommonModeRec:()=>F,BiliCommonParser:()=>P,BiliGrpcAdapter:()=>L,BiliGrpcMetadata:()=>Ve,BiliUpAdapter:()=>R,BiliUpMetadata:()=>He,BiliXmlAdapter:()=>z,BiliXmlMetadata:()=>Je,BiliXmlTransformerConfigurator:()=>qe,DanuniJsonAdapter:()=>k,DanuniJsonMetadata:()=>Ee,DanuniJsonTransformerConfigurator:()=>Te,DanuniPbAdapter:()=>j,DanuniPbMetadata:()=>Me,DanuniPbTransformer:()=>je,DdplayAdapter:()=>H,DdplayMetadata:()=>Qe,DdplayTransformer:()=>Ze,DplayerAdapter:()=>U,DplayerMetadata:()=>et,DplayerTransformer:()=>$e,TencentAdapter:()=>G,TencentMetadata:()=>it,VodAdapter:()=>q,VodMetadata:()=>ot,VodTransformer:()=>at,VodZod:()=>K,defineAdapter:()=>J,defineMetadata:()=>X,definePlugin:()=>lt,defineTransformer:()=>Y,enumAttrsCodec:()=>O,enumModeCodec:()=>E,enumPoolCodec:()=>D,transformerInput2Danmakus:()=>ct});function ct(e){return e.$danmakus}function J(e){return e}function Y(e){return e}function lt(e){return e}function X(e){return e}const Z=(e,t=8)=>{let n=re([e.SOID,e.progress,e.mode,e.fontsize,e.color,e.senderID,e.content,e.ctime.toISOString(),e.weight,e.pool,e.attr.toSorted().join(`,`),e.platform??null,p.stringify(e.extra)].join(`|`));return ne(ee.create().update(n).digest()).slice(0,t)};var ut=e({DMAttr:()=>C,DanUniConvertTipTemplate:()=>T,InitedUniDB:()=>Q,Modes:()=>x,PlatformDanmakuOnlySource:()=>v,PlatformDanmakuOnlySources:()=>he,PlatformDanmakuSources:()=>y,PlatformInfoSource:()=>m,PlatformInfoSources:()=>h,PlatformSources:()=>ge,PlatformVideoSource:()=>g,PlatformVideoSources:()=>_,Pools:()=>S,UniChunk:()=>$,UniDB:()=>dt,createDMID:()=>Z,defaultUniDM:()=>w}),dt=class{constructor(e=o,t=Z){this.$drizzle=e,this.DMIDGenerator=t}async init(e){return new Q(await a(e),this.DMIDGenerator)}async dump(){return await s(this.$drizzle)}async close(){this.$drizzle=null,await c()}},Q=class extends dt{constructor(e,t=Z){super(e,t),this.$drizzle=e,this.DMIDGenerator=t}get $db(){return this.$drizzle}get $chunks(){return this.$db.query.chunks.findMany()}get $danmakus(){return this.$db.query.chunks.findFirst({with:{danmakus:!0}}).then(e=>e?.danmakus??[])}async listChunks(){return(await this.$chunks).map(e=>new $(this,e.id))}async makeChunk(e){return $.makeChunk(this,e)}async upsertDanmakus(e,t=!0){if(e instanceof Map)await this.upsertDanmakus([...e.values()],t);else if(t){let t=new Map;e.forEach(e=>{t.set(e.DMID,e)}),await this.$db.insert(r).values([...t.values()]).onConflictDoUpdate(i.danmakus)}else await this.$db.insert(r).values(e).onConflictDoUpdate(i.danmakus)}async shrink(){let e=await this.$db.query.chunks.findMany({where:{tmp:!0}});for(let t of e)await new $(this,t.id).delete()}async import(e){return e(this)}export(e){return e(this.$danmakus,{DMIDGenerator:this.DMIDGenerator})}},$=class e{constructor(e,t){this.$UniDB=e,this.id=t}get $db(){return this.$UniDB.$drizzle}static async makeChunk(t,r){let i=await t.$db.insert(n).values(r).returning();return new e(t instanceof Q?t:t.$UniDB,i[0].id)}static async assign(t,r){if(r.length<1)return t;let i=t.$UniDB,a=i.$drizzle,o=t.id,s=(await t.$chunk()).fromConverted;for(let e of r){let n=await e.$chunk();s&&=!!n.fromConverted;let r=await e.$danmakus;await t.upsertDanmakus(r,!1),await e.delete()}return await a.update(n).set({fromConverted:s}).where(l(n.id,o)),new e(i,o)}static async compare(e,t){let n=await e.$danmakus,r=await t.$danmakus;if(n.length!==r.length)return!1;let i=new Set;for(let e of n)i.add(e.DMID);for(let e of r){let t=i.has(e.DMID);if(!t||JSON.stringify(t)!==JSON.stringify(e))return!1}return!0}get $chunks(){return this.$db.select().from(n).where(l(n.id,this.id))}async $chunk(){return(await this.$chunks)[0]}get $danmakus(){return this.$db.query.chunks.findFirst({where:{id:this.id},with:{danmakus:!0}}).then(e=>e?.danmakus??[])}get isDeleted(){return this.$chunks.then(e=>e.length===0)}async upsertDanmakus(e,n=!1,r=!0){let i=new Set;e instanceof Map?(await this.$UniDB.upsertDanmakus([...e.values()],r),e.forEach(e=>i.add(e.DMID))):(n?e=e.map(e=>{let t=this.$UniDB.DMIDGenerator(e);return i.add(t),{...e,DMID:t}}):e.forEach(e=>{i.add(e.DMID)}),await this.$UniDB.upsertDanmakus(e,r)),await this.$db.insert(t).values([...i].map(e=>({chunkID:this.id,DMID:e}))).onConflictDoNothing()}async import(e){return await e(this.$UniDB,this)}async export(e){return e(this.$danmakus,{DMIDGenerator:this.$UniDB.DMIDGenerator,uchunk:await this.$chunk()})}plugin(e){return e(this)}async delete(){await this.$db.transaction(async e=>{let i=(await e.select().from(t).where(l(t.chunkID,this.id))).map(e=>e.DMID);await e.delete(t).where(l(t.chunkID,this.id));for(let n of i)(await e.select().from(t).where(l(t.DMID,n))).length===0&&await e.delete(r).where(l(r.DMID,n));await e.delete(n).where(l(n.id,this.id))})}};export{v as $,R as A,Me as B,Ze as C,z as D,Ye as E,L as F,O as G,k as H,Ve as I,C as J,E as K,M as L,I as M,F as N,Je as O,P,w as Q,Ie as R,Qe as S,Xe as T,Ee as U,je as V,Te as W,x as X,T as Y,S as Z,it as _,Z as a,g as at,$e as b,X as c,ct as d,he as et,q as f,G as g,K as h,ut as i,ge as it,He as j,qe as k,lt as l,at as m,$ as n,m as nt,st as o,_ as ot,ot as p,D as q,dt as r,h as rt,J as s,Q as t,y as tt,Y as u,U as v,V as w,H as x,et as y,j as z};
2
+ //# sourceMappingURL=core-DTWAwE-V.mjs.map