bytefun-ai-mcp 1.13.117 → 1.13.119

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.
@@ -1,2 +1,2 @@
1
- export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u548C\u4F7F\u7528\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u9009\u4E2D\u72B6\u6001\u3001\u805A\u7126\u72B6\u6001\u3001\u7981\u7528\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u901A\u8FC7`setStation(station: ViewStation)`\u51FD\u6570\u6765\u8BBE\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8BBE\u7F6E\u7EC4\u4EF6\u7684UI\u5C5E\u6027\uFF0C\u53EA\u9700\u8981\u8BBE\u7F6E\u7EC4\u4EF6\u7684station\u5C5E\u6027\u5373\u53EF\u81EA\u52A8\u66F4\u65B0\u7EC4\u4EF6\u7684UI\u6837\u5F0F\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`station`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n \n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u6240\u6709Page\u7684\u5B50\u7C7B\uFF0C\u90FD\u5141\u8BB8\u6DFB\u52A0\u6784\u9020\u51FD\u6570\u548C\u6784\u9020\u51FD\u6570\u7684\u53C2\u6570\uFF0C\u8FD9\u4E9B\u53C2\u6570\u5C31\u7528\u6765\u9875\u9762\u8DF3\u8F6C\u65F6\u9875\u9762\u4E4B\u95F4\u4F20\u9012\u6570\u636E\u4F7F\u7528\uFF0C\u6BD4\u5982\uFF1A\u5546\u54C1\u5217\u8868\u9875ProjectListPage\u8DF3\u5230\u5546\u54C1\u8BE6\u60C5\u9875ProjectDetailPage\uFF0C\u90A3\u4E48ProjectListPage\u5E94\u8BE5\u8981\u4F20\u7ED9ProjectDetailPage\u4E00\u4E2A\u53C2\u6570\uFF1AproductID\u3002\u6240\u4EE5\uFF0CProjectDetailPage\u7684\u9875\u9762\u53C2\u6570\u58F0\u660E\u548C\u6784\u9020\u51FD\u6570\u5E94\u8BE5\u662F\u8FD9\u6837\u5199\uFF1A\n private productID: string\n constructor(productID: string) {\n super()\n this.productID = productID\n }\u3002\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u6240\u6709\u7684\u7F51\u7EDC\u62E6\u622A\u7684\u5168\u5C40\u7EDF\u4E00\u5904\u7406\u9700\u8981\u5728Application\u4E2D\u7684onGlobalNetSuccessIntercept(\u8054\u7F51\u6210\u529F\u540E\uFF0C\u540E\u7AEF\u4E1A\u52A1\u6B63\u786E\u4E0E\u9519\u8BEF\u90FD\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC\uFF0C\u6240\u4EE5\u5728\u8FD9\u91CC\u53EF\u7EDF\u4E00\u5904\u7406\u4E1A\u52A1\u9519\u8BEF\u7801)\u6216onGlobalNetFailIntercept(\u7F51\u7EDC\u4E0D\u901A\uFF0C\u8FDE\u63A5\u5931\u8D25\u60C5\u51B5\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC)\u91CC\u9762\u5904\u7406\u3002\n - \u9875\u9762\u5185\u7684\u7F51\u7EDC\u8BF7\u6C42\u4E1A\u52A1\u5904\u7406\u4E0D\u5F97\u5199\u5728Application\u7684onGlobalNetSuccessIntercept\u91CC\u9762\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u5B57\u7B26\u4E32\u4E0D\u5F97\u76F4\u63A5\u8FDB\u884Cboolean\u8FD0\u7B97\u7136\u540E\u8D4B\u503C\u7ED9boolean\u7C7B\u578B\u7684\u53D8\u91CF\uFF0C\u9700\u8981\u5728\u5B57\u7B26\u4E32\u524D\u9762\u6DFB\u52A0\u4E24\u4E2A\u975E\u8FD0\u7B97\uFF1A!!\u3002\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Aconst isAdd = !!this.inputView.text && isNew\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - \u79FB\u52A8\u7AEF\u7684ViewPager\u7684canIndicatorClick\u5C5E\u6027\u9ED8\u8BA4\u8BBE\u7F6E\u4E3Afalse\u7684\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8BF4\u660E\u9700\u8981\u6FC0\u6D3B\u6307\u793A\u5668\u7684\u70B9\u70B9\u51FB\u5207\u6362ViewPager\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5EFA\u8BAE\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u5982\u679C\u9700\u8981\u8FD8\u53EF\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6570\u636Ets\u6587\u4EF6(\u5982loginPageData.ts)\uFF0C\u8FD9\u6837\u5982loginPage\u8D1F\u8D23\u4E1A\u52A1\u903B\u8F91\u548C\u4EA4\u4E92\u903B\u8F91\uFF0C\u5982loginPageData\u8D1F\u8D23\u6570\u636E\u58F0\u660E\u5B9A\u4E49\u3001\u521D\u59CB\u5316\u4E0E\u7BA1\u7406\u7B49\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u5931\u8D25\u8FD4\u56DE\u6570\u636E\n export interface apiFailInfo {\n msg: string\n code: number\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: apiFailInfo) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: apiFailInfo) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5982\u679C\u6709\u540E\u7AEFapi\u63A5\u53E3\u8BF7\u6C42\uFF0C\u90A3\u4E48\u5FC5\u987B\u5C01\u88C5\u4E00\u4E2A\u540D\u5B57\u53EB\u505A`bindDataFromNet`\u7684\u65B9\u6CD5\u6765\u5904\u7406\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u7684\u903B\u8F91\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u5FC5\u987B\u4E25\u683C\u53C2\u8003`api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50`\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u6570\u636E\u7ED1\u5B9A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(xxxResponse.data.list)\u3001this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)\u3001this.xxxViewPager.setDataList(xxxResponse.xxxList)\n - `setDataList`\u7684\u5165\u53C2\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1AxxxResponse.data.xxxList\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u4E0D\u80FD\u5199\u51FD\u6570\u8C03\u7528\u7B49\u3002\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u5E76\u4E14\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\u7684\u7B2C\u4E00\u4E2AitemData\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1Aconst itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u5982\u679C\u9700\u8981\u903B\u8F91\u5904\u7406\u540E\u624D\u80FD\u5F97\u51FAthis.recommendBookTitle1.text\u7684\u503C\uFF0C\u90A3\u5C31\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A`getxxx(itemData: any): string`\u65B9\u6CD5\u6765\u83B7\u53D6\uFF0C\u7136\u540E:this.recommendBookTitle1.text = this.getxxx(itemData)\n - api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n private bindDataFromNet(getRecommendBookListData: getRecommendBookListResponse) {\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListData.data.listData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const listItemData = getRecommendBookListData.data.listData[0]\n this.recommendBookCover1.src = listItemData.coverUrl\n this.recommendBookTitle1.text = listItemData.title\n this.recommendBookAuthor1.text = listItemData.author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListData.data.viewPagerData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const viePagerItemData = getRecommendBookListData.data.viewPagerData[0]\n this.recommendImage1.src = viePagerItemData.coverUrl\n this.carouselTitle1.text = this.getCarouselTitleData(viePagerItemData) // \u7531\u4E8E\u6709\u590D\u6742\u7684\u903B\u8F91\u5904\u7406\uFF0C\u6240\u4EE5\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A\u65B9\u6CD5\u6765\u83B7\u53D6\n }\n private getCarouselTitleData(itemData: any) {\n let title = ''\n if (itemData.title) {\n title = itemData.title\n } else if (itemData.description) {\n title = itemData.description\n } else {\n title = itemData.categoryName\n }\n return title\n }\n ...\n ```\n - \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\u65F6\uFF0C\u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5FC5\u987B\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\uFF0C\u5982\uFF1A\n ```typescript\n // \u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\u65F6\u6539\u4E3A\u8C03\u7528\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n this.recommendImage1.src = this.xxxMethod(getRecommendBookListResponse)\n // \u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n private xxxMethod(res: getRecommendBookListResponse): string {\n let tmp = getRecommendBookListResponse.data.list[0].coverUrl\n if (tmp && tmp.length > 5) {\n return tmp + '\u957F\u540D\u5B57'\n }\n return tmp\n }\n ```\n \n\n## 10. \u4E00\u4E9BView\u7EC4\u4EF6\u5185\u90E8\u5DF2\u5C01\u88C5\u597D\u903B\u8F91\uFF0C\u56E0\u6B64\u4E00\u4E9BView\u7EC4\u4EF6\u4E0D\u9700\u8981\u505A\u4EE5\u4E0B\u4E8B\u60C5\n- \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5B50\u9875\u9762\u5BB9\u5668`SubPageContainer`\u4E0D\u9700\u8981\u7F16\u5199\u4EFB\u4F55\u8BBE\u7F6E\u9875\u9762\u6216\u5207\u6362\u9875\u9762\u7684\u903B\u8F91\u3002\n- \u7981\u6B62\u5BF9ImageView\u8FDB\u884Ccolor\u5C5E\u6027\u7684\u8BBE\u7F6E\u3002\n\n## 11. \u4E25\u683C\u9075\u5B88\u4EE3\u7801\u89C4\u8303\u4E0E\u9650\u5236\n - \u3010\u7C7B\u578B\u4E0E\u6CDB\u578B\u3011\n - \u5728\u7EE7\u627F\u81EA`Page`\u7684\u7C7B\u4E2D\uFF0C\u7981\u6B62\u975E\u9759\u6001\u6210\u5458\u4F7F\u7528DOM\u7C7B\u578B\u6216\u5176\u4ED6\u81EA\u5B9A\u4E49\u7981\u6B62\u7C7B\u578B\u3002\n - \u7981\u6B62\u4F7F\u7528UILIB\u7C7B\u578B\u7684\u6570\u7EC4\u4F5C\u4E3A\u6210\u5458\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u6216\u8FD4\u56DE\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u4E0E\u5C40\u90E8\u53D8\u91CF\u663E\u5F0F\u58F0\u660E\u4E3A`any`\uFF0C\u4EE5\u53CA\u4F7F\u7528`as any`\u3002\n - `Ref<T>`\u7684`T`\u4EC5\u5141\u8BB8\uFF1A`number`\u3001`string`\u3001`boolean`\u3001`any`\u3001`Array<any>`\u53CA\u5176`| null`\u53D8\u4F53\u3002\n - \u7981\u6B62\u4F7F\u7528`Symbol`\u53CA\u5176\u76F8\u5173API\u3002\n - \u7981\u6B62\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u7684\u8054\u5408\u7C7B\u578B\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u58F0\u660E`interface`\uFF0C\u4E14\u8BE5\u6587\u4EF6\u4EC5\u5141\u8BB8\u4E00\u4E2A`class`\u58F0\u660E\u3002\n - \u975E`src/lib`\u76EE\u5F55\u7684`ts`\u6587\u4EF6\u4E2D\uFF0C`interface`\u53EA\u5141\u8BB8\u5B9A\u4E49\u5C5E\u6027\uFF1B\u7981\u6B62\u5176\u4ED6\u58F0\u660E\u3002\n - \u7981\u6B62\u4F7F\u7528`Partial<T>`\u3002\n - \u7981\u6B62\u884C\u5185\u51FD\u6570\u7C7B\u578B\u3001\u51FD\u6570\u7C7B\u578B\u522B\u540D\u4E0E\u5185\u8054\u5BF9\u8C61\u7C7B\u578B\u5B57\u9762\u91CF\uFF08\u5C5E\u6027\u9664\u5916\uFF09\u3002\n - \u7981\u6B62\u5B9A\u4E49\u7C7B\u578B\u5C5E\u4E8EUILIB\u7684\u975E\u7C7B\u6210\u5458\u53D8\u91CF\u3002\n - \u7981\u6B62\u5C06UILIB\u7C7B\u578B\u7684\u503C\u8D4B\u7ED9\u975EUILIB\u7C7B\u578B\u7684\u76EE\u6807\u3002\n - \u7981\u6B62interface\u4E2D\u7684\u5C5E\u6027\u4F7F\u7528DOM\u7C7B\u578B\u3001UILIB\u7C7B\u578B\u3001any\u7C7B\u578B\u3001any[]\u7C7B\u578B\u3001Array<any>\u7C7B\u578B\u3001\u8054\u5408\u7C7B\u578B\u7B49\u7981\u6B62\u7C7B\u578B\u3002\n - \u3010\u5BFC\u5165\u3011\n - \u5F53\u7C7B\u8DEF\u5F84\u5728`src/lib`\u76EE\u5F55\u4E0B\u65F6\uFF0C\u7981\u6B62\u5BF9\u8FD9\u4E2A\u7C7B\u4F7F\u7528\u5BFC\u5165\u91CD\u547D\u540D\u6216\u522B\u540D\u3002\n - \u3010\u5BFC\u51FA\u3011\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u6587\u4EF6\u4E2D\uFF0C\u4E14\u7C7B\u540D\u4E0D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u3001\u4E14\u4E0D\u4E3A`Application`\u65F6\uFF0C\u4EC5\u5141\u8BB8`export default class`\u3001`export class`\u3001`export interface`\uFF1B\u7981\u6B62\u5176\u4ED6\u5BFC\u51FA\u5F62\u5F0F\u3002\n - \u3010\u65B9\u6CD5\u4E0E\u51FD\u6570\u3011\n - \u7981\u6B62\u4F7F\u7528`setInterval`\u3001`clearInterval`\u3001`setTimeout`\uFF1B\u4F7F\u7528`AllFunction`\u5BF9\u5E94\u65B9\u6CD5\u3002\n - \u7981\u6B62\u4F7F\u7528`localStorage/sessionStorage`\u7684`setItem/getItem`\uFF1B\u4F7F\u7528`AllFunction`\u6570\u636E\u5E93\u65B9\u6CD5\u3002\n - \u7981\u6B62`Date.now()`\u4E0E`new Date()`\uFF1B\u4F7F\u7528`AllFunction`\u65F6\u95F4\u65B9\u6CD5\u3002\n - \u7981\u6B62\u5728\u51FD\u6570\u5185\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF1B\u8BF7\u5B9A\u4E49\u4E3A\u7C7B\u79C1\u6709\u65B9\u6CD5\u3002\n - \u7981\u6B62`JSON.stringify/JSON.parse`\uFF1B\u6309\u4E0A\u4E0B\u6587\u4F7F\u7528`JsonArray.stringify/parse`\u6216`JsonObject.stringify/parse`\u3002\n - `JsonObject.stringify/parse`\u4E0E`JsonArray.stringify/parse`\u7684\u53C2\u6570\u7981\u6B62\u4F20\u5165`class`\u5BF9\u8C61\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u9759\u6001\u8C03\u7528\u7EE7\u627F`BaseApi`\u7684\u7C7B\u65B9\u6CD5\u65F6\uFF1A\u65B9\u6CD5\u540D\u5FC5\u987B\u5339\u914D`request_<10\u4F4D\u5B57\u6BCD\u6570\u5B57>`\uFF0C\u53C2\u6570\u5FC5\u987B\u4E3A3\u4E2A\uFF0C\u4E14\u7B2C2\u30013\u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5F97\u4E3A`any`\u6216\u6CDB\u578B\u3002\n - \u5728\u7EE7\u627F`BaseApi`\u7684\u7C7B\u4E2D\uFF0C`request_`\u5F00\u5934\u7684\u9759\u6001\u65B9\u6CD5\u540C\u6837\u5FC5\u987B\u6EE1\u8DB3\u547D\u540D\u4E0E3\u53C2\u89C4\u5219\u3002\n - \u7981\u6B62\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u91CD\u540D\u3002\n - `findViewById`\u4EC5\u5141\u8BB8\u7528\u4E8E\u7C7B\u6210\u5458\u53D8\u91CF\u521D\u59CB\u5316\uFF0C\u5982`this.findViewById('xxx') as <\u5177\u4F53\u7C7B\u578B>`\uFF1B\u5176\u4ED6\u4F4D\u7F6E\u7981\u6B62\u8C03\u7528\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`Array.isArray()`\uFF1B\u4F7F\u7528`AllFunction.isArray()`\u3002\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u7C7B\u4E2D\u7981\u6B62\u58F0\u660E\u65B9\u6CD5\uFF08`constructor`\u9664\u5916\uFF09\uFF1B\u82E5\u7C7B\u540D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u5219\u4E0D\u53D7\u6B64\u9650\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u8C03\u7528`findViewById`\u65F6\uFF0C\u53C2\u6570\u5FC5\u987B\u5B58\u5728\u4E8E\u540C\u76EE\u5F55\u540C\u540D\u58F0\u660E\u5F0FUI\u7684`.id('...')`\u5217\u8868\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u8C03\u7528`watch`\uFF08\u4F4D\u4E8E`Ref.ts`\uFF09\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5FC5\u987B\u662F\u5B57\u9762\u91CF\u6570\u7EC4`[ref1, ref2]`\uFF0C\u7981\u6B62\u53D8\u91CF\u4F20\u9012\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u5B9A\u4E49UILIB\u7C7B\u578B\u6210\u5458\u53D8\u91CF\u65F6\uFF0C\u5FC5\u987B\u4F7F\u7528`this.findViewById('xxx') as Xxx`\u521D\u59CB\u5316\u3002\n - \u3010\u6570\u7EC4\u65B9\u6CD5\u3011\n - \u7981\u6B62\u4F7F\u7528`map`\u3001`filter`\u3001`find`\u3001`findIndex`\u3001`reduce`\u3001`reduceRight`\u3001`every`\u3001`some`\u3001`sort`\u3001`flatMap`\uFF1B\u7EDF\u4E00\u4F7F\u7528`for-i`\u5B9E\u73B0\u3002\n - \u3010\u8BED\u6CD5\u9650\u5236\u3011\n - \u7981\u6B62\u4F7F\u7528`||`\u8FD0\u7B97\u7B26\u8BA1\u7B97\u7136\u540E\u8FDB\u884C\u8D4B\u503C\u3001\u4F20\u53C2\u6216\u521D\u59CB\u5316\uFF0C\u5FC5\u987B\u6539\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u7684\u5199\u6CD5\u6765\u4EE3\u66FF\uFF0C\u6BD4\u5982\uFF1A`const a = b || 'default'` \u6539\u4E3A `const a = b ? b : 'default'`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C55\u5F00\u8BED\u6CD5`...`\u514B\u9686\u5BF9\u8C61\uFF1B\u6539\u7528\u624B\u52A8\u8D4B\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u53D8\u91CF\u4E0E\u65B9\u6CD5\u5165\u53C2\u540C\u540D\uFF0C\u6216\u4E0E\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u540C\u540D\u3002\n - \u7981\u6B62\u4F7F\u7528`try/catch/finally`\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`typeof`\uFF1B\u6539\u7528`AllFunction.isString/isNumber/isBoolean/isObject`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C5E\u6027\u7B80\u5199\uFF08`{ a }`\uFF09\uFF1B\u4F7F\u7528\u5B8C\u6574\u5199\u6CD5\uFF08`{ a: a }`\uFF09\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\uFF0C\u7981\u6B62\u5BF9UILIB\u7C7B\u578B\u53D8\u91CF\u8FDB\u884C\u771F\u503C\u5224\u65AD\u3002\n - \u7981\u6B62\u4F7F\u7528\u903B\u8F91\u6216\uFF08`||`\uFF09\u77ED\u8DEF\u6C42\u503C\u7684\u94FE\u5F0F\u64CD\u4F5C\uFF0C\u6539\u4E3A\u4F7F\u7528 `if/else` \u5904\u7406\u3002\n - \u7981\u6B62\u4F7F\u7528\u7A7A\u503C\u5408\u5E76\u8FD0\u7B97\u7B26\uFF08`??`\uFF09\uFF0C\u6539\u4E3A\u4F7F\u7528`if/else`\u5904\u7406\u3002\u4F8B\u5982\uFF1A`\n`\u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A`\n```` typescript \nprivate cus71() { \n const displayName = this.cus71Str1 ?? this.cus71Str2 ?? ''; \n} \n``` `\n`\u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A `\n```` typescript \nprivate cus71() { \n let displayName: string; \n if (this.cus71Str1) { \n displayName = this.cus71Str1; \n } else if (this.cus71Str2) { \n displayName = this.cus71Str2; \n } else { \n displayName = ''; \n } \n} \n```\n - \u3010\u8865\u5145\u7684\u9879\u76EE\u89C4\u5219\u3011\n - \u7981\u6B62\u4F7F\u7528`for...in`\uFF1B\u4F7F\u7528`Object.keys`+`for-i`\u3002\n - \u7981\u6B62`async/Promise`\uFF08\u542B`Promise.race/Promise.all`\uFF09\uFF1B\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n - \u7981\u6B62\u4F7F\u7528\u6D4F\u89C8\u5668\u73AF\u5883\u7684`lib.dom.d.ts`\u65B9\u6CD5\u4E8ENode\u73AF\u5883\u3002\n - \u7981\u6B62\u4FEE\u6539\u3001\u589E\u5220`src/lib`\u53CA\u5176\u5B50\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u3002\n - \u7981\u6B62\u4F7F\u7528`@ts-ignore`\u8FD9\u4E9BTypeScript\u6CE8\u91CA\u6307\u4EE4\u3002\n - \u7981\u6B62\u6DFB\u52A0\u548C\u4F7F\u7528`src/lib/uilib`\u4E2DView\u4E0D\u5B58\u5728\u7684\u65B9\u6CD5\u548C\u5C5E\u6027\u3002\n\n";
1
+ export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u548C\u4F7F\u7528\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u9009\u4E2D\u72B6\u6001\u3001\u805A\u7126\u72B6\u6001\u3001\u7981\u7528\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u901A\u8FC7`setStation(station: ViewStation)`\u51FD\u6570\u6765\u8BBE\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8BBE\u7F6E\u7EC4\u4EF6\u7684UI\u5C5E\u6027\uFF0C\u53EA\u9700\u8981\u8BBE\u7F6E\u7EC4\u4EF6\u7684station\u5C5E\u6027\u5373\u53EF\u81EA\u52A8\u66F4\u65B0\u7EC4\u4EF6\u7684UI\u6837\u5F0F\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`station`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/JsonObject.ts'\u548C'src/lib/JsonArray.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8FD9\u4E24\u4E2A\u6587\u4EF6\u5B9A\u4E49\u7684json\u76F8\u5173\u7684\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u6240\u6709localStorage\u672C\u5730\u6570\u636E\u5B58\u50A8\u90FD\u5FC5\u987B\u4F7F\u7528AllFunction\u7684saveDatabaseBoolean\u3001saveDatabaseNumber\u3001saveDatabaseString\u3001saveDatabaseArray\u3001saveDatabaseObject\u65B9\u6CD5\u6765\u5B58\u50A8\u6570\u636E\uFF0C\u4F7F\u7528getDatabaseBoolean\u3001getDatabaseNumber\u3001getDatabaseString\u3001getDatabaseArray\u3001getDatabaseObject\u65B9\u6CD5\u6765\u83B7\u53D6\u6570\u636E\u3002\n \n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5EFA\u8BAE\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u5982\u679C\u9700\u8981\u8FD8\u53EF\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6570\u636Ets\u6587\u4EF6(\u5982loginPageData.ts)\uFF0C\u8FD9\u6837\u5982loginPage\u8D1F\u8D23\u4E1A\u52A1\u903B\u8F91\u548C\u4EA4\u4E92\u903B\u8F91\uFF0C\u5982loginPageData\u8D1F\u8D23\u6570\u636E\u58F0\u660E\u5B9A\u4E49\u3001\u521D\u59CB\u5316\u4E0E\u7BA1\u7406\u7B49\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u5931\u8D25\u8FD4\u56DE\u6570\u636E\n export interface apiFailInfo {\n msg: string\n code: number\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: apiFailInfo) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: apiFailInfo) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5982\u679C\u6709\u540E\u7AEFapi\u63A5\u53E3\u8BF7\u6C42\uFF0C\u90A3\u4E48\u5FC5\u987B\u5C01\u88C5\u4E00\u4E2A\u540D\u5B57\u53EB\u505A`bindDataFromNet`\u7684\u65B9\u6CD5\u6765\u5904\u7406\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u7684\u903B\u8F91\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u5FC5\u987B\u4E25\u683C\u53C2\u8003`api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50`\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u6570\u636E\u7ED1\u5B9A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(xxxResponse.data.list)\u3001this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)\u3001this.xxxViewPager.setDataList(xxxResponse.xxxList)\n - `setDataList`\u7684\u5165\u53C2\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1AxxxResponse.data.xxxList\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u4E0D\u80FD\u5199\u51FD\u6570\u8C03\u7528\u7B49\u3002\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u5E76\u4E14\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\u7684\u7B2C\u4E00\u4E2AitemData\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1Aconst itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u5982\u679C\u9700\u8981\u903B\u8F91\u5904\u7406\u540E\u624D\u80FD\u5F97\u51FAthis.recommendBookTitle1.text\u7684\u503C\uFF0C\u90A3\u5C31\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A`getxxx(itemData: any): string`\u65B9\u6CD5\u6765\u83B7\u53D6\uFF0C\u7136\u540E:this.recommendBookTitle1.text = this.getxxx(itemData)\n - api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n private bindDataFromNet(getRecommendBookListData: getRecommendBookListResponse) {\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListData.data.listData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const listItemData = getRecommendBookListData.data.listData[0]\n this.recommendBookCover1.src = listItemData.coverUrl\n this.recommendBookTitle1.text = listItemData.title\n this.recommendBookAuthor1.text = listItemData.author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListData.data.viewPagerData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const viePagerItemData = getRecommendBookListData.data.viewPagerData[0]\n this.recommendImage1.src = viePagerItemData.coverUrl\n this.carouselTitle1.text = this.getCarouselTitleData(viePagerItemData) // \u7531\u4E8E\u6709\u590D\u6742\u7684\u903B\u8F91\u5904\u7406\uFF0C\u6240\u4EE5\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A\u65B9\u6CD5\u6765\u83B7\u53D6\n }\n private getCarouselTitleData(itemData: any) {\n let title = ''\n if (itemData.title) {\n title = itemData.title\n } else if (itemData.description) {\n title = itemData.description\n } else {\n title = itemData.categoryName\n }\n return title\n }\n ...\n ```\n - \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\u65F6\uFF0C\u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5FC5\u987B\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\uFF0C\u5982\uFF1A\n ```typescript\n // \u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\u65F6\u6539\u4E3A\u8C03\u7528\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n this.recommendImage1.src = this.xxxMethod(getRecommendBookListResponse)\n // \u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n private xxxMethod(res: getRecommendBookListResponse): string {\n let tmp = getRecommendBookListResponse.data.list[0].coverUrl\n if (tmp && tmp.length > 5) {\n return tmp + '\u957F\u540D\u5B57'\n }\n return tmp\n }\n ```\n \n\n## 10. \u4E00\u4E9BView\u7EC4\u4EF6\u5185\u90E8\u5DF2\u5C01\u88C5\u597D\u903B\u8F91\uFF0C\u56E0\u6B64\u4E00\u4E9BView\u7EC4\u4EF6\u4E0D\u9700\u8981\u505A\u4EE5\u4E0B\u4E8B\u60C5\n- \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5B50\u9875\u9762\u5BB9\u5668`SubPageContainer`\u4E0D\u9700\u8981\u7F16\u5199\u4EFB\u4F55\u8BBE\u7F6E\u9875\u9762\u6216\u5207\u6362\u9875\u9762\u7684\u903B\u8F91\u3002\n- \u7981\u6B62\u5BF9ImageView\u8FDB\u884Ccolor\u5C5E\u6027\u7684\u8BBE\u7F6E\u3002\n- \u591A\u72B6\u6001\u5BB9\u5668`MultiStateContainer`\uFF0C\u7981\u6B62\u5BF9\u5176\u5185\u90E8\u7684\u5B50View\u7EC4\u4EF6\u8FDB\u884C\u76F4\u63A5\u8BBE\u7F6E\uFF0C\u800C\u5FC5\u987B\u901A\u8FC7`currentStationRef`\u6765\u5207\u6362\u72B6\u6001\uFF0C\u4FEE\u6539`currentStationRef`\u5207\u6362\u72B6\u6001\u540E\u5C31\u4F1A\u81EA\u52A8\u663E\u793A\u8BE5\u72B6\u6001\u4E0B\u7684UI\u7EC4\u4EF6\uFF0C\u5E76\u4E14\u9690\u85CF\u5176\u4ED6\u72B6\u6001\u4E0B\u7684UI\u7EC4\u4EF6\u3002\n\n## 11. \u4E25\u683C\u9075\u5B88\u4EE3\u7801\u89C4\u8303\u4E0E\u9650\u5236\n - \u3010\u7C7B\u578B\u4E0E\u6CDB\u578B\u3011\n - \u5728\u7EE7\u627F\u81EA`Page`\u7684\u7C7B\u4E2D\uFF0C\u7981\u6B62\u975E\u9759\u6001\u6210\u5458\u4F7F\u7528DOM\u7C7B\u578B\u6216\u5176\u4ED6\u81EA\u5B9A\u4E49\u7981\u6B62\u7C7B\u578B\u3002\n - \u7981\u6B62\u4F7F\u7528UILIB\u7C7B\u578B\u7684\u6570\u7EC4\u4F5C\u4E3A\u6210\u5458\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u6216\u8FD4\u56DE\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u4E0E\u5C40\u90E8\u53D8\u91CF\u663E\u5F0F\u58F0\u660E\u4E3A`any`\uFF0C\u4EE5\u53CA\u4F7F\u7528`as any`\u3002\n - `Ref<T>`\u7684`T`\u4EC5\u5141\u8BB8\uFF1A`number`\u3001`string`\u3001`boolean`\u3001`any`\u3001`Array<any>`\u53CA\u5176`| null`\u53D8\u4F53\u3002\n - \u7981\u6B62\u4F7F\u7528`Symbol`\u53CA\u5176\u76F8\u5173API\u3002\n - \u7981\u6B62\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u7684\u8054\u5408\u7C7B\u578B\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u58F0\u660E`interface`\uFF0C\u4E14\u8BE5\u6587\u4EF6\u4EC5\u5141\u8BB8\u4E00\u4E2A`class`\u58F0\u660E\u3002\n - \u975E`src/lib`\u76EE\u5F55\u7684`ts`\u6587\u4EF6\u4E2D\uFF0C`interface`\u53EA\u5141\u8BB8\u5B9A\u4E49\u5C5E\u6027\uFF1B\u7981\u6B62\u5176\u4ED6\u58F0\u660E\u3002\n - \u7981\u6B62\u4F7F\u7528`Partial<T>`\u3002\n - \u7981\u6B62\u884C\u5185\u51FD\u6570\u7C7B\u578B\u3001\u51FD\u6570\u7C7B\u578B\u522B\u540D\u4E0E\u5185\u8054\u5BF9\u8C61\u7C7B\u578B\u5B57\u9762\u91CF\uFF08\u5C5E\u6027\u9664\u5916\uFF09\u3002\n - \u7981\u6B62\u5B9A\u4E49\u7C7B\u578B\u5C5E\u4E8EUILIB\u7684\u975E\u7C7B\u6210\u5458\u53D8\u91CF\u3002\n - \u7981\u6B62\u5C06UILIB\u7C7B\u578B\u7684\u503C\u8D4B\u7ED9\u975EUILIB\u7C7B\u578B\u7684\u76EE\u6807\u3002\n - \u7981\u6B62interface\u4E2D\u7684\u5C5E\u6027\u4F7F\u7528DOM\u7C7B\u578B\u3001UILIB\u7C7B\u578B\u3001any\u7C7B\u578B\u3001any[]\u7C7B\u578B\u3001Array<any>\u7C7B\u578B\u3001\u8054\u5408\u7C7B\u578B\u7B49\u7981\u6B62\u7C7B\u578B\u3002\n - \u3010\u5BFC\u5165\u3011\n - \u5F53\u7C7B\u8DEF\u5F84\u5728`src/lib`\u76EE\u5F55\u4E0B\u65F6\uFF0C\u7981\u6B62\u5BF9\u8FD9\u4E2A\u7C7B\u4F7F\u7528\u5BFC\u5165\u91CD\u547D\u540D\u6216\u522B\u540D\u3002\n - \u3010\u5BFC\u51FA\u3011\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u6587\u4EF6\u4E2D\uFF0C\u4E14\u7C7B\u540D\u4E0D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u3001\u4E14\u4E0D\u4E3A`Application`\u65F6\uFF0C\u4EC5\u5141\u8BB8`export default class`\u3001`export class`\u3001`export interface`\uFF1B\u7981\u6B62\u5176\u4ED6\u5BFC\u51FA\u5F62\u5F0F\u3002\n - \u3010\u65B9\u6CD5\u4E0E\u51FD\u6570\u3011\n - \u7981\u6B62\u4F7F\u7528`setInterval`\u3001`clearInterval`\u3001`setTimeout`\uFF1B\u4F7F\u7528`AllFunction`\u5BF9\u5E94\u65B9\u6CD5\u3002\n - \u7981\u6B62\u4F7F\u7528`localStorage/sessionStorage`\u7684`setItem/getItem`\uFF1B\u4F7F\u7528`AllFunction`\u6570\u636E\u5E93\u65B9\u6CD5\u3002\n - \u7981\u6B62`Date.now()`\u4E0E`new Date()`\uFF1B\u4F7F\u7528`AllFunction`\u65F6\u95F4\u65B9\u6CD5\u3002\n - \u7981\u6B62\u5728\u51FD\u6570\u5185\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF1B\u8BF7\u5B9A\u4E49\u4E3A\u7C7B\u79C1\u6709\u65B9\u6CD5\u3002\n - \u7981\u6B62`JSON.stringify/JSON.parse`\uFF1B\u6309\u4E0A\u4E0B\u6587\u4F7F\u7528`JsonArray.stringify/parse`\u6216`JsonObject.stringify/parse`\u3002\n - `JsonObject.stringify/parse`\u4E0E`JsonArray.stringify/parse`\u7684\u53C2\u6570\u7981\u6B62\u4F20\u5165`class`\u5BF9\u8C61\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u9759\u6001\u8C03\u7528\u7EE7\u627F`BaseApi`\u7684\u7C7B\u65B9\u6CD5\u65F6\uFF1A\u65B9\u6CD5\u540D\u5FC5\u987B\u5339\u914D`request_<10\u4F4D\u5B57\u6BCD\u6570\u5B57>`\uFF0C\u53C2\u6570\u5FC5\u987B\u4E3A3\u4E2A\uFF0C\u4E14\u7B2C2\u30013\u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5F97\u4E3A`any`\u6216\u6CDB\u578B\u3002\n - \u5728\u7EE7\u627F`BaseApi`\u7684\u7C7B\u4E2D\uFF0C`request_`\u5F00\u5934\u7684\u9759\u6001\u65B9\u6CD5\u540C\u6837\u5FC5\u987B\u6EE1\u8DB3\u547D\u540D\u4E0E3\u53C2\u89C4\u5219\u3002\n - \u7981\u6B62\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u91CD\u540D\u3002\n - `findViewById`\u4EC5\u5141\u8BB8\u7528\u4E8E\u7C7B\u6210\u5458\u53D8\u91CF\u521D\u59CB\u5316\uFF0C\u5982`this.findViewById('xxx') as <\u5177\u4F53\u7C7B\u578B>`\uFF1B\u5176\u4ED6\u4F4D\u7F6E\u7981\u6B62\u8C03\u7528\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`Array.isArray()`\uFF1B\u4F7F\u7528`AllFunction.isArray()`\u3002\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u7C7B\u4E2D\u7981\u6B62\u58F0\u660E\u65B9\u6CD5\uFF08`constructor`\u9664\u5916\uFF09\uFF1B\u82E5\u7C7B\u540D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u5219\u4E0D\u53D7\u6B64\u9650\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u8C03\u7528`findViewById`\u65F6\uFF0C\u53C2\u6570\u5FC5\u987B\u5B58\u5728\u4E8E\u540C\u76EE\u5F55\u540C\u540D\u58F0\u660E\u5F0FUI\u7684`.id('...')`\u5217\u8868\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u8C03\u7528`watch`\uFF08\u4F4D\u4E8E`Ref.ts`\uFF09\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5FC5\u987B\u662F\u5B57\u9762\u91CF\u6570\u7EC4`[ref1, ref2]`\uFF0C\u7981\u6B62\u53D8\u91CF\u4F20\u9012\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u5B9A\u4E49UILIB\u7C7B\u578B\u6210\u5458\u53D8\u91CF\u65F6\uFF0C\u5FC5\u987B\u4F7F\u7528`this.findViewById('xxx') as Xxx`\u521D\u59CB\u5316\u3002\n - \u3010\u6570\u7EC4\u65B9\u6CD5\u3011\n - \u7981\u6B62\u4F7F\u7528`map`\u3001`filter`\u3001`find`\u3001`findIndex`\u3001`reduce`\u3001`reduceRight`\u3001`every`\u3001`some`\u3001`sort`\u3001`flatMap`\uFF1B\u7EDF\u4E00\u4F7F\u7528`for-i`\u5B9E\u73B0\u3002\n - \u3010\u8BED\u6CD5\u9650\u5236\u3011\n - \u7981\u6B62\u4F7F\u7528`||`\u8FD0\u7B97\u7B26\u8BA1\u7B97\u7136\u540E\u8FDB\u884C\u8D4B\u503C\u3001\u4F20\u53C2\u6216\u521D\u59CB\u5316\uFF0C\u5FC5\u987B\u6539\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u7684\u5199\u6CD5\u6765\u4EE3\u66FF\uFF0C\u6BD4\u5982\uFF1A`const a = b || 'default'` \u6539\u4E3A `const a = b ? b : 'default'`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C55\u5F00\u8BED\u6CD5`...`\u514B\u9686\u5BF9\u8C61\uFF1B\u6539\u7528\u624B\u52A8\u8D4B\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u53D8\u91CF\u4E0E\u65B9\u6CD5\u5165\u53C2\u540C\u540D\uFF0C\u6216\u4E0E\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u540C\u540D\u3002\n - \u7981\u6B62\u4F7F\u7528`try/catch/finally`\u3002\n - \u7981\u6B62\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\uFF0C\u6539\u4E3A\u4F7F\u7528\u5B57\u7B26\u4E32\u64CD\u4F5C\u65B9\u6CD5\u4EE3\u66FF\u5B9E\u73B0\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`typeof`\uFF1B\u6539\u7528`AllFunction.isString/isNumber/isBoolean/isObject`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C5E\u6027\u7B80\u5199\uFF08`{ a }`\uFF09\uFF1B\u4F7F\u7528\u5B8C\u6574\u5199\u6CD5\uFF08`{ a: a }`\uFF09\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\uFF0C\u7981\u6B62\u5BF9UILIB\u7C7B\u578B\u53D8\u91CF\u8FDB\u884C\u771F\u503C\u5224\u65AD\u3002\n - \u7981\u6B62\u4F7F\u7528\u903B\u8F91\u6216\uFF08`||`\uFF09\u77ED\u8DEF\u6C42\u503C\u7684\u94FE\u5F0F\u64CD\u4F5C\uFF0C\u6539\u4E3A\u4F7F\u7528 `if/else` \u5904\u7406\u3002\n - \u7981\u6B62\u4F7F\u7528\u7A7A\u503C\u5408\u5E76\u8FD0\u7B97\u7B26\uFF08`??`\uFF09\uFF0C\u6539\u4E3A\u4F7F\u7528`if/else`\u5904\u7406\u3002\u4F8B\u5982\uFF1A`\n`\u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A`\n```` typescript \nprivate cus71() { \n const displayName = this.cus71Str1 ?? this.cus71Str2 ?? ''; \n} \n``` `\n`\u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A `\n```` typescript \nprivate cus71() { \n let displayName: string; \n if (this.cus71Str1) { \n displayName = this.cus71Str1; \n } else if (this.cus71Str2) { \n displayName = this.cus71Str2; \n } else { \n displayName = ''; \n } \n} \n```\n - \u3010\u8865\u5145\u7684\u9879\u76EE\u89C4\u5219\u3011\n - \u7981\u6B62\u4F7F\u7528`for...in`\uFF1B\u4F7F\u7528`Object.keys`+`for-i`\u3002\n - \u7981\u6B62`async/Promise`\uFF08\u542B`Promise.race/Promise.all`\uFF09\uFF1B\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n - \u7981\u6B62\u4F7F\u7528\u6D4F\u89C8\u5668\u73AF\u5883\u7684`lib.dom.d.ts`\u65B9\u6CD5\u4E8ENode\u73AF\u5883\u3002\n - \u7981\u6B62\u4FEE\u6539\u3001\u589E\u5220`src/lib`\u53CA\u5176\u5B50\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u3002\n - \u7981\u6B62\u4F7F\u7528`@ts-ignore`\u8FD9\u4E9BTypeScript\u6CE8\u91CA\u6307\u4EE4\u3002\n - \u7981\u6B62\u6DFB\u52A0\u548C\u4F7F\u7528`src/lib/uilib`\u4E2DView\u4E0D\u5B58\u5728\u7684\u65B9\u6CD5\u548C\u5C5E\u6027\u3002\n\n";
2
2
  //# sourceMappingURL=appCodeRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,u+oCAiV9C,CAAC"}
1
+ {"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,0onCA2U9C,CAAC"}
@@ -29,7 +29,11 @@ export const understandingCodeFrameworkTemplate = `
29
29
 
30
30
  ## 2. **理解唯一的能力方法AllFunction.ts以及json相关代码**
31
31
  - 使用'read_file'工具阅读并理解'src/lib/AllFunction.ts'文件,理解该工程能使用的唯一的能力方法
32
+ - 使用'read_file'工具阅读并理解'src/lib/JsonObject.ts'和'src/lib/JsonArray.ts'文件,理解这两个文件定义的json相关的方法
32
33
  - 请严格按照唯一的能力方法AllFunction.ts,不要新增、删除或修改任何AllFunction接口声明;也不要调用其他未在AllFunction中出现的函数或模块
34
+ - 所有的toast提示,必须调用AllFunction.showToast方法来显示,并且如用户描述没有明确说明需要toast提示,你不得擅自进行Toast提示。
35
+ - 延时执行AllFunction.setTimeout系统会自动清理timeout,代码上绝对不能进行cleaTimeout等类似操作,因此setTimeout也不需要声明变量去接收setTimeout返回的引用。
36
+ - 所有localStorage本地数据存储都必须使用AllFunction的saveDatabaseBoolean、saveDatabaseNumber、saveDatabaseString、saveDatabaseArray、saveDatabaseObject方法来存储数据,使用getDatabaseBoolean、getDatabaseNumber、getDatabaseString、getDatabaseArray、getDatabaseObject方法来获取数据。
33
37
 
34
38
  ## 3. **理解Ref、watch**
35
39
  - Ref的数据类型只能是以下5中类型:数字使用Ref<number>,字符串使用Ref<string>,布尔量使用Ref<boolean>,对象使用Ref<any>,数组使用Ref<Array<any>>或Ref<Array<any> | null>或Ref<any[]>或Ref<any[] | null>。
@@ -124,23 +128,11 @@ export const understandingCodeFrameworkTemplate = `
124
128
 
125
129
  ## 7. **理解基础开发规则**
126
130
  - lib文件夹里面的代码文件都是内置框架代码,绝对禁止对lib文件夹的代码进行增删改操作
127
- - 所有Page的子类,都允许添加构造函数和构造函数的参数,这些参数就用来页面跳转时页面之间传递数据使用,比如:商品列表页ProjectListPage跳到商品详情页ProjectDetailPage,那么ProjectListPage应该要传给ProjectDetailPage一个参数:productID。所以,ProjectDetailPage的页面参数声明和构造函数应该是这样写:
128
- private productID: string
129
- constructor(productID: string) {
130
- super()
131
- this.productID = productID
132
- }。
133
131
  - 任何页面(特别是闪屏页)的业务逻辑绝对不能放到Application.ts进行处理,Application.ts只进行全局网络拦截处理、全局静态变量、全局静态方法的定义和实现
134
132
  - 如果是多个页面共用的数据变量,可以考虑声明为全局静态变量,并在Application.ts中进行声明。
135
133
  - 全局静态变量在关闭APP或者网页后会清理掉的,所以你要思考清楚哪些数据变量需要持久化储存,哪些是全局静态变量,持久化接口:saveDatabaseXxx和getDatabaseDataXxx,比如是否已经弹出过广告弹框,这个应该持久化储存。
136
- - 所有的网络拦截的全局统一处理需要在Application中的onGlobalNetSuccessIntercept(联网成功后,后端业务正确与错误都会回调到这里,所以在这里可统一处理业务错误码)或onGlobalNetFailIntercept(网络不通,连接失败情况会回调到这里)里面处理。
137
- - 页面内的网络请求业务处理不得写在Application的onGlobalNetSuccessIntercept里面。
138
134
  - 声明全局变量、局部变量必须要声明数据类型,并且绝对禁止使用any,请使用具体类型来声明
139
- - 字符串不得直接进行boolean运算然后赋值给boolean类型的变量,需要在字符串前面添加两个非运算:!!。比如正确的写法:const isAdd = !!this.inputView.text && isNew
140
- - 所有的toast提示,必须调用AllFunction.showToast方法来显示,并且如用户描述没有明确说明需要toast提示,你不得擅自进行Toast提示。
141
- - 延时执行AllFunction.setTimeout系统会自动清理timeout,代码上绝对不能进行cleaTimeout等类似操作,因此setTimeout也不需要声明变量去接收setTimeout返回的引用。
142
135
  - 轮播ViewPager对应的索引指示器容器,这个索引指示器不需要额外代码实现指示器点的切换UI更新逻辑,本身ViewPager与IndicatorContainer底层已经实现了切换的UI更新逻辑的了,只需要viewPager.bindIndicator(indicatorContainer)即可。
143
- - 移动端的ViewPager的canIndicatorClick属性默认设置为false的,除非用户明确说明需要激活指示器的点点击切换ViewPager。
144
136
  - 每一个页面(如loginPage)建议在page文件夹下面创建一个页面文件夹(如login),然后页面的ts文件(如loginPage.ts)创建在页面文件夹下面,页面文件夹下如果需要还可创建一个页面数据ts文件(如loginPageData.ts),这样如loginPage负责业务逻辑和交互逻辑,如loginPageData负责数据声明定义、初始化与管理等。
145
137
 
146
138
  ## 8. **理解后端API接口的定义与使用**
@@ -279,6 +271,7 @@ export const understandingCodeFrameworkTemplate = `
279
271
  - 轮播ViewPager的指示器点的切换UI更新逻辑,不得在ts代码里面进行,因为ViewPager的指示器点的切换UI更新逻辑已经自动实现了,你不需要再手动实现。
280
272
  - 子页面容器\`SubPageContainer\`不需要编写任何设置页面或切换页面的逻辑。
281
273
  - 禁止对ImageView进行color属性的设置。
274
+ - 多状态容器\`MultiStateContainer\`,禁止对其内部的子View组件进行直接设置,而必须通过\`currentStationRef\`来切换状态,修改\`currentStationRef\`切换状态后就会自动显示该状态下的UI组件,并且隐藏其他状态下的UI组件。
282
275
 
283
276
  ## 11. 严格遵守代码规范与限制
284
277
  - 【类型与泛型】
@@ -321,7 +314,8 @@ export const understandingCodeFrameworkTemplate = `
321
314
  - 禁止使用\`||\`运算符计算然后进行赋值、传参或初始化,必须改用三元表达式的写法来代替,比如:\`const a = b || 'default'\` 改为 \`const a = b ? b : 'default'\`。
322
315
  - 禁止对象展开语法\`...\`克隆对象;改用手动赋值。
323
316
  - 禁止类成员变量与方法入参同名,或与方法内局部变量同名。
324
- - 禁止使用\`try/catch/finally\`与正则表达式。
317
+ - 禁止使用\`try/catch/finally\`。
318
+ - 禁止使用正则表达式,改为使用字符串操作方法代替实现。
325
319
  - 在继承\`Page\`的文件中禁止使用\`typeof\`;改用\`AllFunction.isString/isNumber/isBoolean/isObject\`。
326
320
  - 禁止对象属性简写(\`{ a }\`);使用完整写法(\`{ a: a }\`)。
327
321
  - 在继承\`Page\`的文件中,禁止对UILIB类型变量进行真值判断。
@@ -336,4 +330,4 @@ export const understandingCodeFrameworkTemplate = `
336
330
  - 禁止添加和使用\`src/lib/uilib\`中View不存在的方法和属性。
337
331
 
338
332
  `;
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpVmpELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdW5kZXJzdGFuZGluZ0NvZGVGcmFtZXdvcmtUZW1wbGF0ZSA9IGBcbiMgKirlv4XpobvlhYjnkIbop6Ppobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuSoqXG4jIyAxLiAqKueQhuino1ZpZXfnu4Tku7bnmoTlo7DmmI7lkozkvb/nlKjop4TliJkqKlxuICAtIOi/meS4jeaYr2h0bWzjgIFyZWFjdOetieW8gOWPke+8jOi/meaYr+S4gOS4quaWsOeahOW8gOWPkeahhuaetu+8jOaYr+WfuuS6jnNyYy9saWIvdWlsaWLmlofku7blpLnph4zpnaLnmoRVSee7hOS7tuW6k+adpeW8gOWPkeeahFxuICAtIFZpZXfnu4Tku7bnmoTln7rnsbvmmK9CYXNlVmlld++8jOWuueWZqOWfuuexu+aYr0Jhc2VDb250YWluZXJWaWV377yM5omA5pyJVmlld+e7hOS7tumDvee7p+aJv+iHqkJhc2VWaWV3XG4gIC0g5p+l55yLJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4gIC0gVmlld+e7hOS7tueahOWjsOaYjuW/hemhu+WcqOexu+aWh+S7tuW8gOWni+aXtuWFiOWjsOaYju+8jOW5tuS4lOW/hemhu+imgeWjsOaYjuWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvIzkuI3lvpflo7DmmI7kuLpCYXNlVmlld++8jOS4jeW+l+WcqOS7u+S9leWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvIzmr5TlpoLvvJpcbiAgICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gICAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5rKh5pyJ5aOw5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8ie+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOWcqOWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvInvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHJpdmF0ZSBvbmVGdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gIC0g5omA5pyJVmlld+e7hOS7tueahOmAieS4reeKtuaAgeOAgeiBmueEpueKtuaAgeOAgeemgeeUqOeKtuaAgeeahOWPmOWMlumDveW/hemhu+mAmui/h1xcYHNldFN0YXRpb24oc3RhdGlvbjogVmlld1N0YXRpb24pXFxg5Ye95pWw5p2l6K6+572u77yM5LiN6IO955u05o6l6K6+572u57uE5Lu255qEVUnlsZ7mgKfvvIzlj6rpnIDopoHorr7nva7nu4Tku7bnmoRzdGF0aW9u5bGe5oCn5Y2z5Y+v6Ieq5Yqo5pu05paw57uE5Lu255qEVUnmoLflvI9cbiAgLSDmiYDmnIlWaWV357uE5Lu255qE5pi+56S644CB6ZqQ6JeP5Y2g5L2N44CB6ZqQ6JeP5LiN5Y2g5L2N55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHZpc2liaWxpdHlcXGDlsZ7mgKfov5vooYzorr7nva7vvIzkuI3lvpfkvb/nlKhcXGBzdGF0aW9uXFxg5bGe5oCn44CCXG4gIC0g5omA5pyJVmlld+e7hOS7tueahG5vcm1hbOOAgXJlYWRPbmx544CBZm9jdXPjgIFzZWxlY3RlZOOAgWRpc2FibGVk54q25oCB55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHN0YXRpb25cXGDlsZ7mgKfov5vooYzorr7nva7jgIJcblxuIyMgMi4gKirnkIbop6PllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+S7peWPimpzb27nm7jlhbPku6PnoIEqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvQWxsRnVuY3Rpb24udHMn5paH5Lu277yM55CG6Kej6K+l5bel56iL6IO95L2/55So55qE5ZSv5LiA55qE6IO95Yqb5pa55rOVXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIFxuIyMgMy4gKirnkIbop6NSZWbjgIF3YXRjaCoqXG4gIC0gUmVm55qE5pWw5o2u57G75Z6L5Y+q6IO95piv5Lul5LiLNeS4reexu+Wei++8muaVsOWtl+S9v+eUqFJlZjxudW1iZXI+77yM5a2X56ym5Liy5L2/55SoUmVmPHN0cmluZz7vvIzluIPlsJTph4/kvb/nlKhSZWY8Ym9vbGVhbj7vvIzlr7nosaHkvb/nlKhSZWY8YW55Pu+8jOaVsOe7hOS9v+eUqFJlZjxBcnJheTxhbnk+PuaIllJlZjxBcnJheTxhbnk+IHwgbnVsbD7miJZSZWY8YW55W10+5oiWUmVmPGFueVtdIHwgbnVsbD7jgIJcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+mYheivu+W5tueQhuinoydzcmMvbGliL1JlZi50cyfmlofku7bvvIznkIbop6NSZWblkox3YXRjaOeahOWumuS5ieeUqOazlVxuICAtIHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIznrKzkuIDkuKrlj4LmlbDmmK/nm5HlkKznmoRSZWbmlbDnu4TvvIznrKzkuozkuKrlj4LmlbDmmK/nm5HlkKznmoTlm57osIPlh73mlbDvvIzlm57osIPlh73mlbDkuK3lj6/ku6XlgZrnm7jlhbNVSeabtOaWsOaIluWFtuS7luS4muWKoemAu+i+keOAglxuICAtIFJlZuaYr+WTjeW6lOW8j+aVsOaNrua6kO+8jHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG5hbWVUZXh0UmVmOiBSZWY8c3RyaW5nPiA9IHJlZignJylcbiAgcHJpdmF0ZSBvdGhlckNvdW50UmVmOiBSZWY8bnVtYmVyPiA9IHJlZigwKVxuICB3YXRjaChbdGhpcy5uYW1lVGV4dFJlZiwgdGhpcy5vdGhlckNvdW50UmVmXSwgKCkgPT4ge1xuICAgIC8vIOWPr+S7peWFiOebuOWFs+eahFVJ5pu05paw5oiW5Lia5Yqh6YC76L6RXG4gICAgaWYgKHRoaXMub3RoZXJDb3VudFJlZi52YWx1ZSA+IDUpIHtcbiAgICAgIHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSB0aGlzLm5hbWVUZXh0UmVmLnZhbHVlICsgJzUnXG4gICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gdGhpcy5uYW1lVGV4dFJlZi52YWx1ZSArICcxMCdcbiAgICB9XG4gIH0pXG4gIFxcYFxcYFxcYFxuICAtIFxcYHNyYy9saWIvdWlsaWIvUmVmLnRzXFxg6YeM6Z2i55qEXFxgd2F0Y2hcXGDlh73mlbDvvIznrKzkuIDkuKrlhaXlj4JcXGByZWZzOiBSZWY8VD5bXVxcYOe7neWvueemgeatouWFiOWjsOaYjuWxgHJlZuaVsOe7hOmDqOWPmOmHj+WGjeS8oOWFpe+8jOato+ehrueahOWGmeazleW6lOivpeaYr+ebtOaOpeWGmeaVsOe7hO+8mlxcYFtyZWYxLCByZWYyXVxcYOWwseihjFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIGNvbnN0IHJlZkFycmF5ID0gW3JlZjEsIHJlZjJdXG4gICAgd2F0Y2gocmVmQXJyYXksIChuZXdWYWx1ZXM6IFRbXSkgPT4ge1xuICAgICAgICAvLyDnm5HlkKxyZWYx5ZKMcmVmMueahOWPmOWMllxuICAgIH0pXG4gICAgXFxgXFxgXFxgXG4gIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgd2F0Y2goW3JlZjEsIHJlZjJdLCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuXG4jIyA0LiAqKueQhuino3NldERhdGFMaXN05pa55rOV55qE6Z2Z5oCB5pWw5o2u5LiO5Yqo5oCB5pWw5o2u5Zy65pmvKipcbiAgLSDlr7nkuo7liqjmgIHmlbDmja7lrrnlmahWaWV3UGFnZXLjgIFMaXN0Vmlld+eahHNldERhdGFMaXN05pa55rOV77yM5aaC5p6c5pWw5o2u5piv5Yqo5oCB55qE77yM5q+U5aaC77ya5LuO5ZCO56uv5o6l5Y+j6I635Y+W55qE77yM5omN6IO95L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXorr7nva7mlbDmja7jgILpnZnmgIHmlbDmja7lt7Lnu4/lnKhVSemhtemdouS4iuWGmeWlveS6hu+8jOS9oOS4jeW+l+S9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CCXG4gIC0g5Yik5pat5qCH5YeG77ya5aaC5p6cVUnpobXpnaLkuK3lt7Lnu4/mnInlrozmlbTnmoTova7mkq3pobnnm64v5YiX6KGo6aG555uu77yM5bCx5piv6Z2Z5oCB5pWw5o2u77yM5aaC5p6c5piv572R57ucQVBJ6L+U5Zue55qE5pWw5o2u5YiX6KGo5bCx5piv5Yqo5oCB5pWw5o2u44CCXG4gIC0g4pyFIOmdmeaAgeaVsOaNruWuueWZqO+8iFVJ6aG16Z2i5Lit5bey5YaZ5aW95YaF5a6577yJ77ya5LiN5L2/55Soc2V0RGF0YUxpc3QoKVxuICAtIOKchSDliqjmgIHmlbDmja7lrrnlmajvvIjpnIDopoHku45BUEnojrflj5bvvInvvJrmiY3kvb/nlKhzZXREYXRhTGlzdCgpXG5cbiMjIDUuICoqVmlld+e7hOS7tu+8jOeQhuino+avj+S4que7hOS7tuWPr+iDvemHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOWmguaenOe7hOS7tumHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOmCo+S5iOS9oOS4jeW+l+WGjeiHquW3seWIm+W7unJlZuWPmOmHj+aIluiAheS9v+eUqG9uU2VsZWN0Q2hhbmdl562J5Zue6LCD6Kem5Y+RVUnmm7TmlrAqKlxuICAtIOS+i+WtkO+8mlZpZXdQYWdlcueahGN1cnJlbnRTZWxlY3RJbmRleOWSjGN1cnJlbnRTZWxlY3RJbmRleFJlZuWxnuaAp+W3sue7j+aYr+WTjeW6lOW8j+aVsOaNrua6kO+8jOWPr+S7peebtOaOpeS9v+eUqGN1cnJlbnRTZWxlY3RJbmRleFJlZuadpee7keWumuiHquWKqOabtOaWsFVJ44CCXG4gICAgcHVibGljIGluaXRWaWV3KCkge1xuICAgICAgdGhpcy5zaG93SW5kZXhUZXh0Vmlldy50ZXh0ID0gdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgIH1cbiAgLSDkvovlrZDvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKflt7Lnu4/mmK/lk43lupTlvI/mlbDmja7mupDvvIzlj6/ku6Xnm7TmjqXkvb/nlKhjdXJyZW50U2VsZWN0SW5kZXhSZWbmnaXnu5Hlrproh6rliqjmm7TmlrBVSe+8jOavlOWmgu+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwdWJsaWMgaW5pdFZpZXcoKSB7XG4gICAgICB3YXRjaChbdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmXSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dJbmRleFRleHRWaWV3LnRleHQgPSB0aGlzLnZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWYudmFsdWUgKyAxICsgJy8nICsgdGhpcy52aWV3UGFnZXIuZGF0YUxpc3QubGVuZ3RoXG4gICAgICB9KVxuICAgIFxcYFxcYFxcYFxuICAtIHRhYue7hOS7tuWSjOi9ruaSree7hOS7tueahOmAieaLqeWPmOWMluebkeWQrO+8jOW/hemhu+S9v+eUqFxcYFZpZXdQYWdlclxcYOaIllxcYFRhYkNvbnRhaW5lclxcYOeahFxcYG9uU2VsZWN0Q2hhbmdlKGZ1bmM6IChpdGVtOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpID0+IHZvaWQpXFxg5Ye95pWw5p2l55uR5ZCs6YCJ5oup5Y+Y5YyWXG5cbiMjIDYuICoq55CG6Kej6aG16Z2i6Lez6L2sKipcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOmhtemdoui3s+i9rOS4jemcgOiAg+iZkeaooeWdl+WMluOAgeW+queOr+S+nei1luOAgea4kOi/m+W8j+W8gOWPke+8jOe7neWvueemgeatouWxj+iUvemhtemdoui3s+i9rOeahOS7o+egge+8jOaJgOaciemhtemdoumDveW3sue7j+WtmOWcqO+8jOS4jeS8muWHuueOsOe8luivkeWHuumUmeeahO+8jOW/hemhu+aYjuehruWGmeS4iumhtemdoui3s+i9rOeahOS7o+eggeWSjOebruagh+mhtemdouaJgOmcgOeahOi3s+i9rOWPguaVsOOAglxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICAgIH1cbiAgLSDinIUg5byV5YWl5YW25LuW57G75Y+q5YWB6K645LiA56eN5YaZ5rOV77ya5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICAgIGltcG9ydCgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLnRoZW4oKHsgZGVmYXVsdDogR3VpZGVQYWdlIH0pID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDlnKjlrp7njrDpobXpnaLot7Povazku6PnoIHnmoTml7blgJnvvIzlv4XpobvkuKXmoLzmjInnhafku6XkuIvkuInmraXmnaXlrp7njrDvvJpcbiAgICAgIC0gKirnrKzkuIDmraXvvJrlhYjliIbmnpDot7PovaznmoTnm67moIfpobXpnaLpnIDopoHkvKDpgJLlk6rkupvlj4LmlbAqKlxuICAgICAgLSAqKuesrOS6jOatpe+8muS/ruaUueebruagh+mhtemdouaehOmAoOWHveaVsCoq77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkaW5nUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgICAgIHByaXZhdGUgYm9va0lkOiBudW1iZXJcbiAgICAgICAgICBwcml2YXRlIGNoYXB0ZXJUaXRsZTogc3RyaW5nXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3RydWN0b3IoYm9va0lkOiBudW1iZXIsIGNoYXB0ZXJUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgIHN1cGVyKClcbiAgICAgICAgICAgICAgdGhpcy5ib29rSWQgPSBib29rSWRcbiAgICAgICAgICAgICAgdGhpcy5jaGFwdGVyVGl0bGUgPSBjaGFwdGVyVGl0bGVcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICAgIC0gKirnrKzkuInmraXvvJrkv67mlLnot7Povazku6PnoIEqKlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgY29uc3QgYm9va0RhdGEgPSB0aGlzLnJlYWRpbmdIaXN0b3J5RGF0YVJlZi52YWx1ZVswXVxuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWFkaW5nUGFnZShib29rRGF0YS5pZCwgYm9va0RhdGEuY2hhcHRlclRpdGxlKSlcbiAgICAgIFxcYFxcYFxcYFxuXG4jIyA3LiAqKueQhuino+WfuuehgOW8gOWPkeinhOWImSoqXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g5omA5pyJUGFnZeeahOWtkOexu++8jOmDveWFgeiuuOa3u+WKoOaehOmAoOWHveaVsOWSjOaehOmAoOWHveaVsOeahOWPguaVsO+8jOi/meS6m+WPguaVsOWwseeUqOadpemhtemdoui3s+i9rOaXtumhtemdouS5i+mXtOS8oOmAkuaVsOaNruS9v+eUqO+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOmhtVByb2plY3RMaXN0UGFnZei3s+WIsOWVhuWTgeivpuaDhemhtVByb2plY3REZXRhaWxQYWdl77yM6YKj5LmIUHJvamVjdExpc3RQYWdl5bqU6K+l6KaB5Lyg57uZUHJvamVjdERldGFpbFBhZ2XkuIDkuKrlj4LmlbDvvJpwcm9kdWN0SUTjgILmiYDku6XvvIxQcm9qZWN0RGV0YWlsUGFnZeeahOmhtemdouWPguaVsOWjsOaYjuWSjOaehOmAoOWHveaVsOW6lOivpeaYr+i/meagt+WGme+8mlxuICAgIHByaXZhdGUgcHJvZHVjdElEOiBzdHJpbmdcbiAgICBjb25zdHJ1Y3Rvcihwcm9kdWN0SUQ6IHN0cmluZykge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcbiAgICB944CCXG4gIC0g5Lu75L2V6aG16Z2i77yI54m55Yir5piv6Zeq5bGP6aG177yJ55qE5Lia5Yqh6YC76L6R57ud5a+55LiN6IO95pS+5YiwQXBwbGljYXRpb24udHPov5vooYzlpITnkIbvvIxBcHBsaWNhdGlvbi50c+WPqui/m+ihjOWFqOWxgOe9kee7nOaLpuaIquWkhOeQhuOAgeWFqOWxgOmdmeaAgeWPmOmHj+OAgeWFqOWxgOmdmeaAgeaWueazleeahOWumuS5ieWSjOWunueOsFxuICAtIOWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj++8jOW5tuWcqEFwcGxpY2F0aW9uLnRz5Lit6L+b6KGM5aOw5piO44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4gIC0g6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbiAgLSDlo7DmmI7lhajlsYDlj5jph4/jgIHlsYDpg6jlj5jph4/lv4XpobvopoHlo7DmmI7mlbDmja7nsbvlnovvvIzlubbkuJTnu53lr7nnpoHmraLkvb/nlKhhbnnvvIzor7fkvb/nlKjlhbfkvZPnsbvlnovmnaXlo7DmmI5cbiAgLSDlrZfnrKbkuLLkuI3lvpfnm7TmjqXov5vooYxib29sZWFu6L+Q566X54S25ZCO6LWL5YC857uZYm9vbGVhbuexu+Wei+eahOWPmOmHj++8jOmcgOimgeWcqOWtl+espuS4suWJjemdoua3u+WKoOS4pOS4qumdnui/kOeul++8miEh44CC5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaY29uc3QgaXNBZGQgPSAhIXRoaXMuaW5wdXRWaWV3LnRleHQgJiYgaXNOZXdcbiAgLSDmiYDmnInnmoR0b2FzdOaPkOekuu+8jOW/hemhu+iwg+eUqEFsbEZ1bmN0aW9uLnNob3dUb2FzdOaWueazleadpeaYvuekuu+8jOW5tuS4lOWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3Tmj5DnpLrjgIJcbiAgLSDlu7bml7bmiafooYxBbGxGdW5jdGlvbi5zZXRUaW1lb3V057O757uf5Lya6Ieq5Yqo5riF55CGdGltZW91dO+8jOS7o+eggeS4iue7neWvueS4jeiDvei/m+ihjGNsZWFUaW1lb3V0562J57G75Ly85pON5L2c77yM5Zug5q2kc2V0VGltZW91dOS5n+S4jemcgOimgeWjsOaYjuWPmOmHj+WOu+aOpeaUtnNldFRpbWVvdXTov5Tlm57nmoTlvJXnlKjjgIJcbiAgLSDova7mkq1WaWV3UGFnZXLlr7nlupTnmoTntKLlvJXmjIfnpLrlmajlrrnlmajvvIzov5nkuKrntKLlvJXmjIfnpLrlmajkuI3pnIDopoHpop3lpJbku6PnoIHlrp7njrDmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOacrOi6q1ZpZXdQYWdlcuS4jkluZGljYXRvckNvbnRhaW5lcuW6leWxguW3sue7j+WunueOsOS6huWIh+aNoueahFVJ5pu05paw6YC76L6R55qE5LqG77yM5Y+q6ZyA6KaBdmlld1BhZ2VyLmJpbmRJbmRpY2F0b3IoaW5kaWNhdG9yQ29udGFpbmVyKeWNs+WPr+OAglxuICAtIOenu+WKqOerr+eahFZpZXdQYWdlcueahGNhbkluZGljYXRvckNsaWNr5bGe5oCn6buY6K6k6K6+572u5Li6ZmFsc2XnmoTvvIzpmaTpnZ7nlKjmiLfmmI7noa7or7TmmI7pnIDopoHmv4DmtLvmjIfnpLrlmajnmoTngrnngrnlh7vliIfmjaJWaWV3UGFnZXLjgIJcbiAgLSDmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+WmguaenOmcgOimgei/mOWPr+WIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuXG4jIyA4LiAqKueQhuino+WQjuerr0FQSeaOpeWPo+eahOWumuS5ieS4juS9v+eUqCoqXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5ZCO56uvQVBJ5L2/55So6K+05piO5paH5Lu277yM5b+F6aG757yT5a2Y6K6w5L2P5omA5pyJ5Y+v55So55qE5ZCO56uvQVBJ5o6l5Y+j5YiX6KGo44CCXG4gIC0g5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55So77yM5b+F6aG75L2/55Soc3JjL2JhY2tlbmRBcGnmlofku7blpLnph4zpnaLnmoTlkITnp41BUEnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhiYWNrZW5kQXBp5paH5Lu25aS55Lit5a6a5LmJ55qE5ZCO56uvQVBJ77yM5q+U5aaC77yaYmFja2VuZEFwaS9hY2NvdW50L2dldFVzZXJJbmZvLnRz77yM6L+Z5Liq5bCx5piv6LSm5Y+35qih5Z2X5Lit55qE6I635Y+W55So5oi35L+h5oGv55qEQVBJ57G777yM6L+U5Zue55qEcmVz5b+F6aG75aOw5piO5YW35L2T57G75Z6L77yM5q+U5aaCcmVzOiBnZXRVc2VySW5mb1Jlc3BvbnNl44CCXG4gIC0gcmVxdWVzdOaOpeWPo+WPqumcgOWumuS5ieWNs+WPr++8jOS4jemcgOimgeWunueOsO+8jOW6leWxguW3sue7j+WunueOsOOAglxuICAtIEFQSeexu+S7o+eggeekuuS+i++8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBpbXBvcnQgQmFzZUFwaSBmcm9tICcuLi9CYXNlQXBpJ1xuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+ivt+axguaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3Qge1xuICAgICAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgICAgICBwYXNzd29yZD86IHN0cmluZ1xuICAgICAgICBrZXk/OiBzdHJpbmdcbiAgICAgICAgY2FwdGNoYT86IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6Pov5Tlm57mlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXNwb25zZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j5aSx6LSl6L+U5Zue5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBhcGlGYWlsSW5mbyB7XG4gICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgIGNvZGU6IG51bWJlclxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6NcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIGV4dGVuZHMgQmFzZUFwaSAge1xuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVxdWVzdF9BcnR1WDFkOGE2QShcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0LFxuICAgICAgICAgICAgc3VjY2VzczogKHJlczogcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlKSA9PiB2b2lkLFxuICAgICAgICAgICAgZmFpbDogKGVycm9yOiBhcGlGYWlsSW5mbykgPT4gdm9pZFxuICAgICAgICApOiB2b2lkIHsgfVxuXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIEFQSeexu+eahOS9v+eUqOaWueW8j++8muWFiGltcG9ydCBBUEnnsbvvvIznhLblkI7osIPnlKhBUEnnsbvnmoRyZXF1ZXN05pa55rOV77yM5q+U5aaC77yaXG4gICAgaW1wb3J0IHsgcG9zdENsaWVudEJpekF1dGhMb2dpbiB9IGZyb20gJy4uLy4uL2JhY2tlbmRBcGkvYWNjb3VudC9wb3N0Q2xpZW50Qml6QXV0aExvZ2luJ1xuICAgIC4uLlxuICAgIGNvbnN0IHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0ID0ge1xuICAgICAgdXNlcm5hbWU6ICdhZG1pbicsXG4gICAgICBwYXNzd29yZDogJzEyMzQ1NicsXG4gICAgICBrZXk6ICcxMjM0NTYnLFxuICAgICAgY2FwdGNoYTogJzEyMzQ1NidcbiAgICB9XG4gICAgcG9zdENsaWVudEJpekF1dGhMb2dpbi5yZXF1ZXN0X0FydHVYMWQ4YTZBKHJlcXVlc3QsIChyZXNwb25zZTogcG9zdENsaWVudEJpekF1dGhMb2dvdXRSZXNwb25zZSkgPT4ge1xuICAgICAgLy8g6K+35rGC5oiQ5Yqf5ZCO55qE5aSE55CGXG4gICAgfSwgKGVycm9yOiBhcGlGYWlsSW5mbykgPT4ge1xuICAgICAgLy8g6K+35rGC5aSx6LSl5ZCO55qE5aSE55CGXG4gICAgfSlcbiAgICAuLi5cblxuIyMgOS4gKirnkIbop6PosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumioqXG4gIC0g5aaC5p6c5pyJ5ZCO56uvYXBp5o6l5Y+j6K+35rGC77yM6YKj5LmI5b+F6aG75bCB6KOF5LiA5Liq5ZCN5a2X5Y+r5YGaXFxgYmluZERhdGFGcm9tTmV0XFxg55qE5pa55rOV5p2l5aSE55CG6LCD55So5ZCO56uvYXBp5o6l5Y+j6L+U5Zue5pWw5o2u5ZCO5LiOVUnmlbDmja7nu5HlrprnmoTpgLvovpFcbiAgLSDlnKjosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7vvIzlv4XpobvkuKXmoLzlj4LogINcXGBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkFxcYO+8jOmcgOimgeagueaNrnZ0eXBl5p2l5YGa5pWw5o2u57uR5a6aXG4gICAgLSB2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgXZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIF2dHlwZT1cInZpZXdQYWdlclwi57G75Z6L55qE6IqC54K557uE5Lu277yM6ZyA6KaB5L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXnu5HlrprmlbDmja7vvIzmr5TlpoLvvJpcbiAgICAgIHRoaXMueHh4VmVydGljYWxMaXN0Vmlldy5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS5kYXRhLmxpc3Qp44CBdGhpcy54eHhIb3Jpem9udGFsTGlzdFZpZXcuc2V0RGF0YUxpc3QoeHh4UmVzcG9uc2UueHh4TGlzdCnjgIF0aGlzLnh4eFZpZXdQYWdlci5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS54eHhMaXN0KVxuICAgIC0gXFxgc2V0RGF0YUxpc3RcXGDnmoTlhaXlj4Llv4XpobvmmK/nm7TmjqXlhpnlkI7nq69hcGnov5Tlm57nmoTmlbDmja7ot6/lvoTvvIzmr5TlpoLvvJp4eHhSZXNwb25zZS5kYXRhLnh4eExpc3TvvIznu53lr7nkuI3og73kvb/nlKjlhajlsYDlj5jph4/lkozlsYDpg6jlj5jph4/ov5vooYzmlbDmja7nu5HlrprvvIzkuI3og73lhpnlhbbku5bpgLvovpHku6PnoIHvvIzmr5TlpoLvvJrkuI3og73lhplpZuOAgWZvcuOAgXdoaWxl562J5b6q546v6K+t5Y+l77yM5LiN6IO95YaZ5Ye95pWw6LCD55So562J44CCXG4gICAgLSB2dHlwZT1cImxpc3RJdGVtQ2FyZFwi44CBdnR5cGU9XCJvbmVWaWV3UGFnZXJDb250ZW50XCLnsbvlnovnmoToioLngrnnu4Tku7bvvIzpnIDopoHmt7HluqbpgY3ljoblroPnmoTnrKwx5LiqaXRlbeeahOWtqeWtkO+8jOeEtuWQjue7k+WQiOWQjuerr2Fwaei/lOWbnueahHh4eFJlc3BvbnNl55qE5pWw5o2u57uT5p6E57uZ56ysMeS4qml0ZW3orr7nva7mlbDmja7vvIzms6jmhI/lj6rpnIDnu5nnrKwx5LiqaXRlbeiKgueCueiuvue9ruaVsOaNru+8jOiAjOS4jeaYr+aJgOaciWl0ZW3oioLngrnpg73orr7nva7mlbDmja7vvIzlubbkuJTlv4XpobvmmK/nm7TmjqXlhpnlkI7nq69hcGnov5Tlm57nmoTmlbDmja7ot6/lvoTnmoTnrKzkuIDkuKppdGVtRGF0YeeahOaVsOaNrui3r+W+hO+8jOavlOWmgu+8mmNvbnN0IGl0ZW1EYXRhID0gZGF0YUxpc3RbMF07IHRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gaXRlbURhdGEueHh4LnRpdGxlVGV4dO+8jOe7neWvueS4jeiDveS9v+eUqOWFqOWxgOWPmOmHj+WSjOWxgOmDqOWPmOmHj+i/m+ihjOaVsOaNrue7keWumu+8jOS4jeiDveWGmeWFtuS7lumAu+i+keS7o+egge+8jOavlOWmgu+8muS4jeiDveWGmWlm44CBZm9y44CBd2hpbGXnrYnlvqrnjq/or63lj6XvvIzlpoLmnpzpnIDopoHpgLvovpHlpITnkIblkI7miY3og73lvpflh7p0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dOeahOWAvO+8jOmCo+WwseW/hemhu+imgeWwgeijheS4gOS4qlxcYGdldHh4eChpdGVtRGF0YTogYW55KTogc3RyaW5nXFxg5pa55rOV5p2l6I635Y+W77yM54S25ZCOOnRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gdGhpcy5nZXR4eHgoaXRlbURhdGEpXG4gICAgLSBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkO+8mlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgLy8g5ZCO56uveHh4QXBp6L+U5Zue55qEeHh4UmVzcG9uc2XmlbDmja7nu5PmnoRcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSB7XG4gICAgICAgICAgY29kZTogbnVtYmVyXG4gICAgICAgICAgbXNnOiBzdHJpbmdcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGxpc3Q6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbnVtYmVyIC8vIOS5puexjUlEXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZyAvLyDkuabnsY3moIfpophcbiAgICAgICAgICAgICAgICAgICAgICBhdXRob3I6IHN0cmluZyAvLyDkvZzogIXlkI3np7BcbiAgICAgICAgICAgICAgICAgICAgICBjb3ZlclVybDogc3RyaW5nIC8vIOWwgemdouWbvueJh1VSTFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgLy8g5Lmm57GN566A5LuLXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lOiBzdHJpbmcgLy8g5YiG57G75ZCN56ewXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0gLy8g5Lmm57GN5YiX6KGoXG4gICAgICAgICAgICAgIHRvdGFsOiBudW1iZXIgLy8g5oC75pWw6YePXG4gICAgICAgICAgICAgIHBhZ2U6IG51bWJlciAvLyDlvZPliY3pobXnoIFcbiAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyIC8vIOavj+mhteaVsOmHj1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC4uLlxuICAgICAgcHJpdmF0ZSBiaW5kRGF0YUZyb21OZXQoZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhOiBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKSB7XG4gICAgICAgIC8vIOiuvue9ruS5puexjeWIl+ihqOaVsOaNrlxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tMaXN0LnNldERhdGFMaXN0KGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLmxpc3REYXRhKVxuICAgICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgICBjb25zdCBsaXN0SXRlbURhdGEgPSBnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS5saXN0RGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tDb3ZlcjEuc3JjID0gbGlzdEl0ZW1EYXRhLmNvdmVyVXJsXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gbGlzdEl0ZW1EYXRhLnRpdGxlXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0F1dGhvcjEudGV4dCA9IGxpc3RJdGVtRGF0YS5hdXRob3JcbiAgICAgICAgLi4uXG4gICAgICAgIC8vIOiuvue9rui9ruaSreaVsOaNrlxuICAgICAgICB0aGlzLnJlY29tbWVuZFZpZXdQYWdlci5zZXREYXRhTGlzdChnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS52aWV3UGFnZXJEYXRhKVxuICAgICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgICBjb25zdCB2aWVQYWdlckl0ZW1EYXRhID0gZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEudmlld1BhZ2VyRGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZEltYWdlMS5zcmMgPSB2aWVQYWdlckl0ZW1EYXRhLmNvdmVyVXJsXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxUaXRsZTEudGV4dCA9IHRoaXMuZ2V0Q2Fyb3VzZWxUaXRsZURhdGEodmllUGFnZXJJdGVtRGF0YSkgLy8g55Sx5LqO5pyJ5aSN5p2C55qE6YC76L6R5aSE55CG77yM5omA5Lul5b+F6aG76KaB5bCB6KOF5LiA5Liq5pa55rOV5p2l6I635Y+WXG4gICAgICB9XG4gICAgICBwcml2YXRlIGdldENhcm91c2VsVGl0bGVEYXRhKGl0ZW1EYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gJydcbiAgICAgICAgaWYgKGl0ZW1EYXRhLnRpdGxlKSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS50aXRsZVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1EYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS5kZXNjcmlwdGlvblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlID0gaXRlbURhdGEuY2F0ZWdvcnlOYW1lXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpdGxlXG4gICAgICB9XG4gICAgICAuLi5cbiAgICAgIFxcYFxcYFxcYFxuICAgIC0g6K6+572u56ysMeS4qml0ZW3oioLngrnmlbDmja7ml7bvvIzlpoLmnpzooajovr7lvI/lj7Pkvqfmtonlj4rpgLvovpHov5DnrpfvvIzlv4XpobvlsIHoo4XmiJDkuIDkuKrnsbvmiJDlkZjmlrnms5XvvIzlpoLvvJpcbiAgICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICAgIC8vIOa2ieWPiumAu+i+kei/kOeul+aXtuaUueS4uuiwg+eUqOS4gOS4quexu+aIkOWRmOaWueazlVxuICAgICAgdGhpcy5yZWNvbW1lbmRJbWFnZTEuc3JjID0gdGhpcy54eHhNZXRob2QoZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSlcbiAgICAgIC8vIOWmguaenOihqOi+vuW8j+WPs+S+p+a2ieWPiumAu+i+kei/kOeul++8jOWwgeijheaIkOS4gOS4quexu+aIkOWRmOaWueazlVxuICAgICAgcHJpdmF0ZSB4eHhNZXRob2QocmVzOiBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRtcCA9IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UuZGF0YS5saXN0WzBdLmNvdmVyVXJsXG4gICAgICAgIGlmICh0bXAgJiYgdG1wLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgIHJldHVybiB0bXAgKyAn6ZW/5ZCN5a2XJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bXBcbiAgICAgIH1cbiAgICAgIFxcYFxcYFxcYFxuICAgIFxuXG4jIyAxMC4g5LiA5LqbVmlld+e7hOS7tuWGhemDqOW3suWwgeijheWlvemAu+i+ke+8jOWboOatpOS4gOS6m1ZpZXfnu4Tku7bkuI3pnIDopoHlgZrku6XkuIvkuovmg4Vcbi0g6L2u5pKtVmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkuI3lvpflnKh0c+S7o+eggemHjOmdoui/m+ihjO+8jOWboOS4ulZpZXdQYWdlcueahOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R5bey57uP6Ieq5Yqo5a6e546w5LqG77yM5L2g5LiN6ZyA6KaB5YaN5omL5Yqo5a6e546w44CCXG4tIOWtkOmhtemdouWuueWZqFxcYFN1YlBhZ2VDb250YWluZXJcXGDkuI3pnIDopoHnvJblhpnku7vkvZXorr7nva7pobXpnaLmiJbliIfmjaLpobXpnaLnmoTpgLvovpHjgIJcbi0g56aB5q2i5a+5SW1hZ2VWaWV36L+b6KGMY29sb3LlsZ7mgKfnmoTorr7nva7jgIJcblxuIyMgMTEuIOS4peagvOmBteWuiOS7o+eggeinhOiMg+S4jumZkOWItlxuIC0g44CQ57G75Z6L5LiO5rOb5Z6L44CRXG4gICAtIOWcqOe7p+aJv+iHqlxcYFBhZ2VcXGDnmoTnsbvkuK3vvIznpoHmraLpnZ7pnZnmgIHmiJDlkZjkvb/nlKhET03nsbvlnovmiJblhbbku5boh6rlrprkuYnnpoHmraLnsbvlnovjgIJcbiAgIC0g56aB5q2i5L2/55SoVUlMSULnsbvlnovnmoTmlbDnu4TkvZzkuLrmiJDlkZjjgIHlsYDpg6jlj5jph4/jgIHmlrnms5XlhaXlj4LmiJbov5Tlm57lgLzjgIJcbiAgIC0g56aB5q2i57G75oiQ5ZGY5LiO5bGA6YOo5Y+Y6YeP5pi+5byP5aOw5piO5Li6XFxgYW55XFxg77yM5Lul5Y+K5L2/55SoXFxgYXMgYW55XFxg44CCXG4gICAtIFxcYFJlZjxUPlxcYOeahFxcYFRcXGDku4XlhYHorrjvvJpcXGBudW1iZXJcXGDjgIFcXGBzdHJpbmdcXGDjgIFcXGBib29sZWFuXFxg44CBXFxgYW55XFxg44CBXFxgQXJyYXk8YW55PlxcYOWPiuWFtlxcYHwgbnVsbFxcYOWPmOS9k+OAglxuICAgLSDnpoHmraLkvb/nlKhcXGBTeW1ib2xcXGDlj4rlhbbnm7jlhbNBUEnjgIJcbiAgIC0g56aB5q2i5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP44CB5pa55rOV5YWl5Y+C44CB6L+U5Zue5YC855qE6IGU5ZCI57G75Z6L44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLlo7DmmI5cXGBpbnRlcmZhY2VcXGDvvIzkuJTor6Xmlofku7bku4XlhYHorrjkuIDkuKpcXGBjbGFzc1xcYOWjsOaYjuOAglxuICAgLSDpnZ5cXGBzcmMvbGliXFxg55uu5b2V55qEXFxgdHNcXGDmlofku7bkuK3vvIxcXGBpbnRlcmZhY2VcXGDlj6rlhYHorrjlrprkuYnlsZ7mgKfvvJvnpoHmraLlhbbku5blo7DmmI7jgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgUGFydGlhbDxUPlxcYOOAglxuICAgLSDnpoHmraLooYzlhoXlh73mlbDnsbvlnovjgIHlh73mlbDnsbvlnovliKvlkI3kuI7lhoXogZTlr7nosaHnsbvlnovlrZfpnaLph4/vvIjlsZ7mgKfpmaTlpJbvvInjgIJcbiAgIC0g56aB5q2i5a6a5LmJ57G75Z6L5bGe5LqOVUlMSULnmoTpnZ7nsbvmiJDlkZjlj5jph4/jgIJcbiAgIC0g56aB5q2i5bCGVUlMSULnsbvlnovnmoTlgLzotYvnu5npnZ5VSUxJQuexu+Wei+eahOebruagh+OAglxuICAgLSDnpoHmraJpbnRlcmZhY2XkuK3nmoTlsZ7mgKfkvb/nlKhET03nsbvlnovjgIFVSUxJQuexu+Wei+OAgWFueeexu+Wei+OAgWFueVtd57G75Z6L44CBQXJyYXk8YW55Puexu+Wei+OAgeiBlOWQiOexu+Wei+etieemgeatouexu+Wei+OAglxuIC0g44CQ5a+85YWl44CRXG4gICAtIOW9k+exu+i3r+W+hOWcqFxcYHNyYy9saWJcXGDnm67lvZXkuIvml7bvvIznpoHmraLlr7nov5nkuKrnsbvkvb/nlKjlr7zlhaXph43lkb3lkI3miJbliKvlkI3jgIJcbiAtIOOAkOWvvOWHuuOAkVxuICAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOaWh+S7tuS4re+8jOS4lOexu+WQjeS4jeetieS6jlxcYHNyYy9saWJcXGDlkoxcXGBzcmMvbGliL3VpbGliXFxg55uu5b2V5LiL55qE57G75ZCN44CB5LiU5LiN5Li6XFxgQXBwbGljYXRpb25cXGDml7bvvIzku4XlhYHorrhcXGBleHBvcnQgZGVmYXVsdCBjbGFzc1xcYOOAgVxcYGV4cG9ydCBjbGFzc1xcYOOAgVxcYGV4cG9ydCBpbnRlcmZhY2VcXGDvvJvnpoHmraLlhbbku5blr7zlh7rlvaLlvI/jgIJcbiAtIOOAkOaWueazleS4juWHveaVsOOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGBzZXRJbnRlcnZhbFxcYOOAgVxcYGNsZWFySW50ZXJ2YWxcXGDjgIFcXGBzZXRUaW1lb3V0XFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDlr7nlupTmlrnms5XjgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlXFxg55qEXFxgc2V0SXRlbS9nZXRJdGVtXFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDmlbDmja7lupPmlrnms5XjgIJcbiAgIC0g56aB5q2iXFxgRGF0ZS5ub3coKVxcYOS4jlxcYG5ldyBEYXRlKClcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOaXtumXtOaWueazleOAglxuICAgLSDnpoHmraLlnKjlh73mlbDlhoXlrprkuYnlhoXpg6jlh73mlbDvvJvor7flrprkuYnkuLrnsbvnp4HmnInmlrnms5XjgIJcbiAgIC0g56aB5q2iXFxgSlNPTi5zdHJpbmdpZnkvSlNPTi5wYXJzZVxcYO+8m+aMieS4iuS4i+aWh+S9v+eUqFxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDmiJZcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOOAglxuICAgLSBcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOS4jlxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDnmoTlj4LmlbDnpoHmraLkvKDlhaVcXGBjbGFzc1xcYOWvueixoeOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE57G75Lit6Z2Z5oCB6LCD55So57un5om/XFxgQmFzZUFwaVxcYOeahOexu+aWueazleaXtu+8muaWueazleWQjeW/hemhu+WMuemFjVxcYHJlcXVlc3RfPDEw5L2N5a2X5q+N5pWw5a2XPlxcYO+8jOWPguaVsOW/hemhu+S4ujPkuKrvvIzkuJTnrKwy44CBM+S4quWPguaVsOexu+Wei+S4jeW+l+S4ulxcYGFueVxcYOaIluazm+Wei+OAglxuICAgLSDlnKjnu6fmib9cXGBCYXNlQXBpXFxg55qE57G75Lit77yMXFxgcmVxdWVzdF9cXGDlvIDlpLTnmoTpnZnmgIHmlrnms5XlkIzmoLflv4Xpobvmu6HotrPlkb3lkI3kuI4z5Y+C6KeE5YiZ44CCXG4gICAtIOemgeatouaWueazleWGheWxgOmDqOWPmOmHj+mHjeWQjeOAglxuICAgLSBcXGBmaW5kVmlld0J5SWRcXGDku4XlhYHorrjnlKjkuo7nsbvmiJDlkZjlj5jph4/liJ3lp4vljJbvvIzlpoJcXGB0aGlzLmZpbmRWaWV3QnlJZCgneHh4JykgYXMgPOWFt+S9k+exu+Weiz5cXGDvvJvlhbbku5bkvY3nva7npoHmraLosIPnlKjjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouS9v+eUqFxcYEFycmF5LmlzQXJyYXkoKVxcYO+8m+S9v+eUqFxcYEFsbEZ1bmN0aW9uLmlzQXJyYXkoKVxcYOOAglxuICAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOexu+S4reemgeatouWjsOaYjuaWueazle+8iFxcYGNvbnN0cnVjdG9yXFxg6Zmk5aSW77yJ77yb6Iul57G75ZCN562J5LqOXFxgc3JjL2xpYlxcYOWSjFxcYHNyYy9saWIvdWlsaWJcXGDnm67lvZXkuIvnmoTnsbvlkI3liJnkuI3lj5fmraTpmZDjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOexu+S4reiwg+eUqFxcYGZpbmRWaWV3QnlJZFxcYOaXtu+8jOWPguaVsOW/hemhu+WtmOWcqOS6juWQjOebruW9leWQjOWQjeWjsOaYjuW8j1VJ55qEXFxgLmlkKCcuLi4nKVxcYOWIl+ihqOOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit6LCD55SoXFxgd2F0Y2hcXGDvvIjkvY3kuo5cXGBSZWYudHNcXGDvvInml7bvvIznrKzkuIDkuKrlj4LmlbDlv4XpobvmmK/lrZfpnaLph4/mlbDnu4RcXGBbcmVmMSwgcmVmMl1cXGDvvIznpoHmraLlj5jph4/kvKDpgJLjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reWumuS5iVVJTElC57G75Z6L5oiQ5ZGY5Y+Y6YeP5pe277yM5b+F6aG75L2/55SoXFxgdGhpcy5maW5kVmlld0J5SWQoJ3h4eCcpIGFzIFh4eFxcYOWIneWni+WMluOAglxuIC0g44CQ5pWw57uE5pa55rOV44CRXG4gICAtIOemgeatouS9v+eUqFxcYG1hcFxcYOOAgVxcYGZpbHRlclxcYOOAgVxcYGZpbmRcXGDjgIFcXGBmaW5kSW5kZXhcXGDjgIFcXGByZWR1Y2VcXGDjgIFcXGByZWR1Y2VSaWdodFxcYOOAgVxcYGV2ZXJ5XFxg44CBXFxgc29tZVxcYOOAgVxcYHNvcnRcXGDjgIFcXGBmbGF0TWFwXFxg77yb57uf5LiA5L2/55SoXFxgZm9yLWlcXGDlrp7njrDjgIJcbiAtIOOAkOivreazlemZkOWItuOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGB8fFxcYOi/kOeul+espuiuoeeul+eEtuWQjui/m+ihjOi1i+WAvOOAgeS8oOWPguaIluWIneWni+WMlu+8jOW/hemhu+aUueeUqOS4ieWFg+ihqOi+vuW8j+eahOWGmeazleadpeS7o+abv++8jOavlOWmgu+8mlxcYGNvbnN0IGEgPSBiIHx8ICdkZWZhdWx0J1xcYCDmlLnkuLogXFxgY29uc3QgYSA9IGIgPyBiIDogJ2RlZmF1bHQnXFxg44CCXG4gICAtIOemgeatouWvueixoeWxleW8gOivreazlVxcYC4uLlxcYOWFi+mahuWvueixoe+8m+aUueeUqOaJi+WKqOi1i+WAvOOAglxuICAgLSDnpoHmraLnsbvmiJDlkZjlj5jph4/kuI7mlrnms5XlhaXlj4LlkIzlkI3vvIzmiJbkuI7mlrnms5XlhoXlsYDpg6jlj5jph4/lkIzlkI3jgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgdHJ5L2NhdGNoL2ZpbmFsbHlcXGDkuI7mraPliJnooajovr7lvI/jgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouS9v+eUqFxcYHR5cGVvZlxcYO+8m+aUueeUqFxcYEFsbEZ1bmN0aW9uLmlzU3RyaW5nL2lzTnVtYmVyL2lzQm9vbGVhbi9pc09iamVjdFxcYOOAglxuICAgLSDnpoHmraLlr7nosaHlsZ7mgKfnroDlhpnvvIhcXGB7IGEgfVxcYO+8ie+8m+S9v+eUqOWujOaVtOWGmeazle+8iFxcYHsgYTogYSB9XFxg77yJ44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3vvIznpoHmraLlr7lVSUxJQuexu+Wei+WPmOmHj+i/m+ihjOecn+WAvOWIpOaWreOAglxuICAgLSDnpoHmraLkvb/nlKjpgLvovpHmiJbvvIhcXGB8fFxcYO+8ieefrei3r+axguWAvOeahOmTvuW8j+aTjeS9nO+8jOaUueS4uuS9v+eUqCBcXGBpZi9lbHNlXFxgIOWkhOeQhuOAglxuICAgLSDnpoHmraLkvb/nlKjnqbrlgLzlkIjlubbov5DnrpfnrKbvvIhcXGA/P1xcYO+8ie+8jOaUueS4uuS9v+eUqFxcYGlmL2Vsc2VcXGDlpITnkIbjgILkvovlpoLvvJpcXGBcXG5cXGDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXFxgXFxuXFxgXFxgXFxgXFxgIHR5cGVzY3JpcHQgXFxucHJpdmF0ZSBjdXM3MSgpIHsgXFxuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gdGhpcy5jdXM3MVN0cjEgPz8gdGhpcy5jdXM3MVN0cjIgPz8gJyc7IFxcbn0gXFxuXFxgXFxgXFxgIFxcYFxcblxcYOKchSDmraPnoa7nmoTlhpnms5XvvJogXFxgXFxuXFxgXFxgXFxgXFxgIHR5cGVzY3JpcHQgXFxucHJpdmF0ZSBjdXM3MSgpIHsgXFxuICAgIGxldCBkaXNwbGF5TmFtZTogc3RyaW5nOyBcXG4gICAgaWYgKHRoaXMuY3VzNzFTdHIxKSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmN1czcxU3RyMTsgXFxuICAgIH0gZWxzZSBpZiAodGhpcy5jdXM3MVN0cjIpIHsgXFxuICAgICAgICBkaXNwbGF5TmFtZSA9IHRoaXMuY3VzNzFTdHIyOyBcXG4gICAgfSBlbHNlIHsgXFxuICAgICAgICBkaXNwbGF5TmFtZSA9ICcnOyBcXG4gICAgfSBcXG59IFxcblxcYFxcYFxcYFxuIC0g44CQ6KGl5YWF55qE6aG555uu6KeE5YiZ44CRXG4gICAtIOemgeatouS9v+eUqFxcYGZvci4uLmluXFxg77yb5L2/55SoXFxgT2JqZWN0LmtleXNcXGArXFxgZm9yLWlcXGDjgIJcbiAgIC0g56aB5q2iXFxgYXN5bmMvUHJvbWlzZVxcYO+8iOWQq1xcYFByb21pc2UucmFjZS9Qcm9taXNlLmFsbFxcYO+8ie+8m+aJgOacieW8guatpeaTjeS9nOS9v+eUqOeureWktOWHveaVsOOAglxuICAgLSDnpoHmraLkvb/nlKjmtY/op4jlmajnjq/looPnmoRcXGBsaWIuZG9tLmQudHNcXGDmlrnms5Xkuo5Ob2Rl546v5aKD44CCXG4gICAtIOemgeatouS/ruaUueOAgeWinuWIoFxcYHNyYy9saWJcXGDlj4rlhbblrZDnm67lvZXkuK3nmoTmlofku7bjgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgQHRzLWlnbm9yZVxcYOi/meS6m1R5cGVTY3JpcHTms6jph4rmjIfku6TjgIJcbiAgIC0g56aB5q2i5re75Yqg5ZKM5L2/55SoXFxgc3JjL2xpYi91aWxpYlxcYOS4rVZpZXfkuI3lrZjlnKjnmoTmlrnms5XlkozlsZ7mgKfjgIJcblxuYDtcbiJdfQ==
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EyVWpELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdW5kZXJzdGFuZGluZ0NvZGVGcmFtZXdvcmtUZW1wbGF0ZSA9IGBcbiMgKirlv4XpobvlhYjnkIbop6Ppobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuSoqXG4jIyAxLiAqKueQhuino1ZpZXfnu4Tku7bnmoTlo7DmmI7lkozkvb/nlKjop4TliJkqKlxuICAtIOi/meS4jeaYr2h0bWzjgIFyZWFjdOetieW8gOWPke+8jOi/meaYr+S4gOS4quaWsOeahOW8gOWPkeahhuaetu+8jOaYr+WfuuS6jnNyYy9saWIvdWlsaWLmlofku7blpLnph4zpnaLnmoRVSee7hOS7tuW6k+adpeW8gOWPkeeahFxuICAtIFZpZXfnu4Tku7bnmoTln7rnsbvmmK9CYXNlVmlld++8jOWuueWZqOWfuuexu+aYr0Jhc2VDb250YWluZXJWaWV377yM5omA5pyJVmlld+e7hOS7tumDvee7p+aJv+iHqkJhc2VWaWV3XG4gIC0g5p+l55yLJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4gIC0gVmlld+e7hOS7tueahOWjsOaYjuW/hemhu+WcqOexu+aWh+S7tuW8gOWni+aXtuWFiOWjsOaYju+8jOW5tuS4lOW/hemhu+imgeWjsOaYjuWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvIzkuI3lvpflo7DmmI7kuLpCYXNlVmlld++8jOS4jeW+l+WcqOS7u+S9leWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvIzmr5TlpoLvvJpcbiAgICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gICAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5rKh5pyJ5aOw5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8ie+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOWcqOWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvInvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHJpdmF0ZSBvbmVGdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gIC0g5omA5pyJVmlld+e7hOS7tueahOmAieS4reeKtuaAgeOAgeiBmueEpueKtuaAgeOAgeemgeeUqOeKtuaAgeeahOWPmOWMlumDveW/hemhu+mAmui/h1xcYHNldFN0YXRpb24oc3RhdGlvbjogVmlld1N0YXRpb24pXFxg5Ye95pWw5p2l6K6+572u77yM5LiN6IO955u05o6l6K6+572u57uE5Lu255qEVUnlsZ7mgKfvvIzlj6rpnIDopoHorr7nva7nu4Tku7bnmoRzdGF0aW9u5bGe5oCn5Y2z5Y+v6Ieq5Yqo5pu05paw57uE5Lu255qEVUnmoLflvI9cbiAgLSDmiYDmnIlWaWV357uE5Lu255qE5pi+56S644CB6ZqQ6JeP5Y2g5L2N44CB6ZqQ6JeP5LiN5Y2g5L2N55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHZpc2liaWxpdHlcXGDlsZ7mgKfov5vooYzorr7nva7vvIzkuI3lvpfkvb/nlKhcXGBzdGF0aW9uXFxg5bGe5oCn44CCXG4gIC0g5omA5pyJVmlld+e7hOS7tueahG5vcm1hbOOAgXJlYWRPbmx544CBZm9jdXPjgIFzZWxlY3RlZOOAgWRpc2FibGVk54q25oCB55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHN0YXRpb25cXGDlsZ7mgKfov5vooYzorr7nva7jgIJcblxuIyMgMi4gKirnkIbop6PllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+S7peWPimpzb27nm7jlhbPku6PnoIEqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvQWxsRnVuY3Rpb24udHMn5paH5Lu277yM55CG6Kej6K+l5bel56iL6IO95L2/55So55qE5ZSv5LiA55qE6IO95Yqb5pa55rOVXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7vlubbnkIbop6Mnc3JjL2xpYi9Kc29uT2JqZWN0LnRzJ+WSjCdzcmMvbGliL0pzb25BcnJheS50cyfmlofku7bvvIznkIbop6Pov5nkuKTkuKrmlofku7blrprkuYnnmoRqc29u55u45YWz55qE5pa55rOVXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIC0g5omA5pyJ55qEdG9hc3Tmj5DnpLrvvIzlv4XpobvosIPnlKhBbGxGdW5jdGlvbi5zaG93VG9hc3Tmlrnms5XmnaXmmL7npLrvvIzlubbkuJTlpoLnlKjmiLfmj4/ov7DmsqHmnInmmI7noa7or7TmmI7pnIDopoF0b2FzdOaPkOekuu+8jOS9oOS4jeW+l+aTheiHqui/m+ihjFRvYXN05o+Q56S644CCXG4gIC0g5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG4gIC0g5omA5pyJbG9jYWxTdG9yYWdl5pys5Zyw5pWw5o2u5a2Y5YKo6YO95b+F6aG75L2/55SoQWxsRnVuY3Rpb27nmoRzYXZlRGF0YWJhc2VCb29sZWFu44CBc2F2ZURhdGFiYXNlTnVtYmVy44CBc2F2ZURhdGFiYXNlU3RyaW5n44CBc2F2ZURhdGFiYXNlQXJyYXnjgIFzYXZlRGF0YWJhc2VPYmplY3Tmlrnms5XmnaXlrZjlgqjmlbDmja7vvIzkvb/nlKhnZXREYXRhYmFzZUJvb2xlYW7jgIFnZXREYXRhYmFzZU51bWJlcuOAgWdldERhdGFiYXNlU3RyaW5n44CBZ2V0RGF0YWJhc2VBcnJheeOAgWdldERhdGFiYXNlT2JqZWN05pa55rOV5p2l6I635Y+W5pWw5o2u44CCXG4gIFxuIyMgMy4gKirnkIbop6NSZWbjgIF3YXRjaCoqXG4gIC0gUmVm55qE5pWw5o2u57G75Z6L5Y+q6IO95piv5Lul5LiLNeS4reexu+Wei++8muaVsOWtl+S9v+eUqFJlZjxudW1iZXI+77yM5a2X56ym5Liy5L2/55SoUmVmPHN0cmluZz7vvIzluIPlsJTph4/kvb/nlKhSZWY8Ym9vbGVhbj7vvIzlr7nosaHkvb/nlKhSZWY8YW55Pu+8jOaVsOe7hOS9v+eUqFJlZjxBcnJheTxhbnk+PuaIllJlZjxBcnJheTxhbnk+IHwgbnVsbD7miJZSZWY8YW55W10+5oiWUmVmPGFueVtdIHwgbnVsbD7jgIJcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+mYheivu+W5tueQhuinoydzcmMvbGliL1JlZi50cyfmlofku7bvvIznkIbop6NSZWblkox3YXRjaOeahOWumuS5ieeUqOazlVxuICAtIHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIznrKzkuIDkuKrlj4LmlbDmmK/nm5HlkKznmoRSZWbmlbDnu4TvvIznrKzkuozkuKrlj4LmlbDmmK/nm5HlkKznmoTlm57osIPlh73mlbDvvIzlm57osIPlh73mlbDkuK3lj6/ku6XlgZrnm7jlhbNVSeabtOaWsOaIluWFtuS7luS4muWKoemAu+i+keOAglxuICAtIFJlZuaYr+WTjeW6lOW8j+aVsOaNrua6kO+8jHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG5hbWVUZXh0UmVmOiBSZWY8c3RyaW5nPiA9IHJlZignJylcbiAgcHJpdmF0ZSBvdGhlckNvdW50UmVmOiBSZWY8bnVtYmVyPiA9IHJlZigwKVxuICB3YXRjaChbdGhpcy5uYW1lVGV4dFJlZiwgdGhpcy5vdGhlckNvdW50UmVmXSwgKCkgPT4ge1xuICAgIC8vIOWPr+S7peWFiOebuOWFs+eahFVJ5pu05paw5oiW5Lia5Yqh6YC76L6RXG4gICAgaWYgKHRoaXMub3RoZXJDb3VudFJlZi52YWx1ZSA+IDUpIHtcbiAgICAgIHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSB0aGlzLm5hbWVUZXh0UmVmLnZhbHVlICsgJzUnXG4gICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gdGhpcy5uYW1lVGV4dFJlZi52YWx1ZSArICcxMCdcbiAgICB9XG4gIH0pXG4gIFxcYFxcYFxcYFxuICAtIFxcYHNyYy9saWIvdWlsaWIvUmVmLnRzXFxg6YeM6Z2i55qEXFxgd2F0Y2hcXGDlh73mlbDvvIznrKzkuIDkuKrlhaXlj4JcXGByZWZzOiBSZWY8VD5bXVxcYOe7neWvueemgeatouWFiOWjsOaYjuWxgHJlZuaVsOe7hOmDqOWPmOmHj+WGjeS8oOWFpe+8jOato+ehrueahOWGmeazleW6lOivpeaYr+ebtOaOpeWGmeaVsOe7hO+8mlxcYFtyZWYxLCByZWYyXVxcYOWwseihjFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIGNvbnN0IHJlZkFycmF5ID0gW3JlZjEsIHJlZjJdXG4gICAgd2F0Y2gocmVmQXJyYXksIChuZXdWYWx1ZXM6IFRbXSkgPT4ge1xuICAgICAgICAvLyDnm5HlkKxyZWYx5ZKMcmVmMueahOWPmOWMllxuICAgIH0pXG4gICAgXFxgXFxgXFxgXG4gIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgd2F0Y2goW3JlZjEsIHJlZjJdLCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuXG4jIyA0LiAqKueQhuino3NldERhdGFMaXN05pa55rOV55qE6Z2Z5oCB5pWw5o2u5LiO5Yqo5oCB5pWw5o2u5Zy65pmvKipcbiAgLSDlr7nkuo7liqjmgIHmlbDmja7lrrnlmahWaWV3UGFnZXLjgIFMaXN0Vmlld+eahHNldERhdGFMaXN05pa55rOV77yM5aaC5p6c5pWw5o2u5piv5Yqo5oCB55qE77yM5q+U5aaC77ya5LuO5ZCO56uv5o6l5Y+j6I635Y+W55qE77yM5omN6IO95L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXorr7nva7mlbDmja7jgILpnZnmgIHmlbDmja7lt7Lnu4/lnKhVSemhtemdouS4iuWGmeWlveS6hu+8jOS9oOS4jeW+l+S9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CCXG4gIC0g5Yik5pat5qCH5YeG77ya5aaC5p6cVUnpobXpnaLkuK3lt7Lnu4/mnInlrozmlbTnmoTova7mkq3pobnnm64v5YiX6KGo6aG555uu77yM5bCx5piv6Z2Z5oCB5pWw5o2u77yM5aaC5p6c5piv572R57ucQVBJ6L+U5Zue55qE5pWw5o2u5YiX6KGo5bCx5piv5Yqo5oCB5pWw5o2u44CCXG4gIC0g4pyFIOmdmeaAgeaVsOaNruWuueWZqO+8iFVJ6aG16Z2i5Lit5bey5YaZ5aW95YaF5a6577yJ77ya5LiN5L2/55Soc2V0RGF0YUxpc3QoKVxuICAtIOKchSDliqjmgIHmlbDmja7lrrnlmajvvIjpnIDopoHku45BUEnojrflj5bvvInvvJrmiY3kvb/nlKhzZXREYXRhTGlzdCgpXG5cbiMjIDUuICoqVmlld+e7hOS7tu+8jOeQhuino+avj+S4que7hOS7tuWPr+iDvemHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOWmguaenOe7hOS7tumHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOmCo+S5iOS9oOS4jeW+l+WGjeiHquW3seWIm+W7unJlZuWPmOmHj+aIluiAheS9v+eUqG9uU2VsZWN0Q2hhbmdl562J5Zue6LCD6Kem5Y+RVUnmm7TmlrAqKlxuICAtIOS+i+WtkO+8mlZpZXdQYWdlcueahGN1cnJlbnRTZWxlY3RJbmRleOWSjGN1cnJlbnRTZWxlY3RJbmRleFJlZuWxnuaAp+W3sue7j+aYr+WTjeW6lOW8j+aVsOaNrua6kO+8jOWPr+S7peebtOaOpeS9v+eUqGN1cnJlbnRTZWxlY3RJbmRleFJlZuadpee7keWumuiHquWKqOabtOaWsFVJ44CCXG4gICAgcHVibGljIGluaXRWaWV3KCkge1xuICAgICAgdGhpcy5zaG93SW5kZXhUZXh0Vmlldy50ZXh0ID0gdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgIH1cbiAgLSDkvovlrZDvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKflt7Lnu4/mmK/lk43lupTlvI/mlbDmja7mupDvvIzlj6/ku6Xnm7TmjqXkvb/nlKhjdXJyZW50U2VsZWN0SW5kZXhSZWbmnaXnu5Hlrproh6rliqjmm7TmlrBVSe+8jOavlOWmgu+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwdWJsaWMgaW5pdFZpZXcoKSB7XG4gICAgICB3YXRjaChbdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmXSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dJbmRleFRleHRWaWV3LnRleHQgPSB0aGlzLnZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWYudmFsdWUgKyAxICsgJy8nICsgdGhpcy52aWV3UGFnZXIuZGF0YUxpc3QubGVuZ3RoXG4gICAgICB9KVxuICAgIFxcYFxcYFxcYFxuICAtIHRhYue7hOS7tuWSjOi9ruaSree7hOS7tueahOmAieaLqeWPmOWMluebkeWQrO+8jOW/hemhu+S9v+eUqFxcYFZpZXdQYWdlclxcYOaIllxcYFRhYkNvbnRhaW5lclxcYOeahFxcYG9uU2VsZWN0Q2hhbmdlKGZ1bmM6IChpdGVtOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpID0+IHZvaWQpXFxg5Ye95pWw5p2l55uR5ZCs6YCJ5oup5Y+Y5YyWXG5cbiMjIDYuICoq55CG6Kej6aG16Z2i6Lez6L2sKipcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOmhtemdoui3s+i9rOS4jemcgOiAg+iZkeaooeWdl+WMluOAgeW+queOr+S+nei1luOAgea4kOi/m+W8j+W8gOWPke+8jOe7neWvueemgeatouWxj+iUvemhtemdoui3s+i9rOeahOS7o+egge+8jOaJgOaciemhtemdoumDveW3sue7j+WtmOWcqO+8jOS4jeS8muWHuueOsOe8luivkeWHuumUmeeahO+8jOW/hemhu+aYjuehruWGmeS4iumhtemdoui3s+i9rOeahOS7o+eggeWSjOebruagh+mhtemdouaJgOmcgOeahOi3s+i9rOWPguaVsOOAglxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICAgIH1cbiAgLSDinIUg5byV5YWl5YW25LuW57G75Y+q5YWB6K645LiA56eN5YaZ5rOV77ya5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICAgIGltcG9ydCgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLnRoZW4oKHsgZGVmYXVsdDogR3VpZGVQYWdlIH0pID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDlnKjlrp7njrDpobXpnaLot7Povazku6PnoIHnmoTml7blgJnvvIzlv4XpobvkuKXmoLzmjInnhafku6XkuIvkuInmraXmnaXlrp7njrDvvJpcbiAgICAgIC0gKirnrKzkuIDmraXvvJrlhYjliIbmnpDot7PovaznmoTnm67moIfpobXpnaLpnIDopoHkvKDpgJLlk6rkupvlj4LmlbAqKlxuICAgICAgLSAqKuesrOS6jOatpe+8muS/ruaUueebruagh+mhtemdouaehOmAoOWHveaVsCoq77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkaW5nUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgICAgIHByaXZhdGUgYm9va0lkOiBudW1iZXJcbiAgICAgICAgICBwcml2YXRlIGNoYXB0ZXJUaXRsZTogc3RyaW5nXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3RydWN0b3IoYm9va0lkOiBudW1iZXIsIGNoYXB0ZXJUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgIHN1cGVyKClcbiAgICAgICAgICAgICAgdGhpcy5ib29rSWQgPSBib29rSWRcbiAgICAgICAgICAgICAgdGhpcy5jaGFwdGVyVGl0bGUgPSBjaGFwdGVyVGl0bGVcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICAgIC0gKirnrKzkuInmraXvvJrkv67mlLnot7Povazku6PnoIEqKlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgY29uc3QgYm9va0RhdGEgPSB0aGlzLnJlYWRpbmdIaXN0b3J5RGF0YVJlZi52YWx1ZVswXVxuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWFkaW5nUGFnZShib29rRGF0YS5pZCwgYm9va0RhdGEuY2hhcHRlclRpdGxlKSlcbiAgICAgIFxcYFxcYFxcYFxuXG4jIyA3LiAqKueQhuino+WfuuehgOW8gOWPkeinhOWImSoqXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g5Lu75L2V6aG16Z2i77yI54m55Yir5piv6Zeq5bGP6aG177yJ55qE5Lia5Yqh6YC76L6R57ud5a+55LiN6IO95pS+5YiwQXBwbGljYXRpb24udHPov5vooYzlpITnkIbvvIxBcHBsaWNhdGlvbi50c+WPqui/m+ihjOWFqOWxgOe9kee7nOaLpuaIquWkhOeQhuOAgeWFqOWxgOmdmeaAgeWPmOmHj+OAgeWFqOWxgOmdmeaAgeaWueazleeahOWumuS5ieWSjOWunueOsFxuICAtIOWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj++8jOW5tuWcqEFwcGxpY2F0aW9uLnRz5Lit6L+b6KGM5aOw5piO44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5aOw5piO5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP5b+F6aG76KaB5aOw5piO5pWw5o2u57G75Z6L77yM5bm25LiU57ud5a+556aB5q2i5L2/55SoYW5577yM6K+35L2/55So5YW35L2T57G75Z6L5p2l5aOw5piOXG4gIC0g6L2u5pKtVmlld1BhZ2Vy5a+55bqU55qE57Si5byV5oyH56S65Zmo5a655Zmo77yM6L+Z5Liq57Si5byV5oyH56S65Zmo5LiN6ZyA6KaB6aKd5aSW5Luj56CB5a6e546w5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHvvIzmnKzouqtWaWV3UGFnZXLkuI5JbmRpY2F0b3JDb250YWluZXLlupXlsYLlt7Lnu4/lrp7njrDkuobliIfmjaLnmoRVSeabtOaWsOmAu+i+keeahOS6hu+8jOWPqumcgOimgXZpZXdQYWdlci5iaW5kSW5kaWNhdG9yKGluZGljYXRvckNvbnRhaW5lcinljbPlj6/jgIJcbiAgLSDmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+WmguaenOmcgOimgei/mOWPr+WIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuXG4jIyA4LiAqKueQhuino+WQjuerr0FQSeaOpeWPo+eahOWumuS5ieS4juS9v+eUqCoqXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5ZCO56uvQVBJ5L2/55So6K+05piO5paH5Lu277yM5b+F6aG757yT5a2Y6K6w5L2P5omA5pyJ5Y+v55So55qE5ZCO56uvQVBJ5o6l5Y+j5YiX6KGo44CCXG4gIC0g5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55So77yM5b+F6aG75L2/55Soc3JjL2JhY2tlbmRBcGnmlofku7blpLnph4zpnaLnmoTlkITnp41BUEnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhiYWNrZW5kQXBp5paH5Lu25aS55Lit5a6a5LmJ55qE5ZCO56uvQVBJ77yM5q+U5aaC77yaYmFja2VuZEFwaS9hY2NvdW50L2dldFVzZXJJbmZvLnRz77yM6L+Z5Liq5bCx5piv6LSm5Y+35qih5Z2X5Lit55qE6I635Y+W55So5oi35L+h5oGv55qEQVBJ57G777yM6L+U5Zue55qEcmVz5b+F6aG75aOw5piO5YW35L2T57G75Z6L77yM5q+U5aaCcmVzOiBnZXRVc2VySW5mb1Jlc3BvbnNl44CCXG4gIC0gcmVxdWVzdOaOpeWPo+WPqumcgOWumuS5ieWNs+WPr++8jOS4jemcgOimgeWunueOsO+8jOW6leWxguW3sue7j+WunueOsOOAglxuICAtIEFQSeexu+S7o+eggeekuuS+i++8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBpbXBvcnQgQmFzZUFwaSBmcm9tICcuLi9CYXNlQXBpJ1xuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+ivt+axguaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3Qge1xuICAgICAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgICAgICBwYXNzd29yZD86IHN0cmluZ1xuICAgICAgICBrZXk/OiBzdHJpbmdcbiAgICAgICAgY2FwdGNoYT86IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6Pov5Tlm57mlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXNwb25zZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j5aSx6LSl6L+U5Zue5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBhcGlGYWlsSW5mbyB7XG4gICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgIGNvZGU6IG51bWJlclxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6NcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIGV4dGVuZHMgQmFzZUFwaSAge1xuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVxdWVzdF9BcnR1WDFkOGE2QShcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0LFxuICAgICAgICAgICAgc3VjY2VzczogKHJlczogcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlKSA9PiB2b2lkLFxuICAgICAgICAgICAgZmFpbDogKGVycm9yOiBhcGlGYWlsSW5mbykgPT4gdm9pZFxuICAgICAgICApOiB2b2lkIHsgfVxuXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIEFQSeexu+eahOS9v+eUqOaWueW8j++8muWFiGltcG9ydCBBUEnnsbvvvIznhLblkI7osIPnlKhBUEnnsbvnmoRyZXF1ZXN05pa55rOV77yM5q+U5aaC77yaXG4gICAgaW1wb3J0IHsgcG9zdENsaWVudEJpekF1dGhMb2dpbiB9IGZyb20gJy4uLy4uL2JhY2tlbmRBcGkvYWNjb3VudC9wb3N0Q2xpZW50Qml6QXV0aExvZ2luJ1xuICAgIC4uLlxuICAgIGNvbnN0IHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0ID0ge1xuICAgICAgdXNlcm5hbWU6ICdhZG1pbicsXG4gICAgICBwYXNzd29yZDogJzEyMzQ1NicsXG4gICAgICBrZXk6ICcxMjM0NTYnLFxuICAgICAgY2FwdGNoYTogJzEyMzQ1NidcbiAgICB9XG4gICAgcG9zdENsaWVudEJpekF1dGhMb2dpbi5yZXF1ZXN0X0FydHVYMWQ4YTZBKHJlcXVlc3QsIChyZXNwb25zZTogcG9zdENsaWVudEJpekF1dGhMb2dvdXRSZXNwb25zZSkgPT4ge1xuICAgICAgLy8g6K+35rGC5oiQ5Yqf5ZCO55qE5aSE55CGXG4gICAgfSwgKGVycm9yOiBhcGlGYWlsSW5mbykgPT4ge1xuICAgICAgLy8g6K+35rGC5aSx6LSl5ZCO55qE5aSE55CGXG4gICAgfSlcbiAgICAuLi5cblxuIyMgOS4gKirnkIbop6PosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumioqXG4gIC0g5aaC5p6c5pyJ5ZCO56uvYXBp5o6l5Y+j6K+35rGC77yM6YKj5LmI5b+F6aG75bCB6KOF5LiA5Liq5ZCN5a2X5Y+r5YGaXFxgYmluZERhdGFGcm9tTmV0XFxg55qE5pa55rOV5p2l5aSE55CG6LCD55So5ZCO56uvYXBp5o6l5Y+j6L+U5Zue5pWw5o2u5ZCO5LiOVUnmlbDmja7nu5HlrprnmoTpgLvovpFcbiAgLSDlnKjosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7vvIzlv4XpobvkuKXmoLzlj4LogINcXGBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkFxcYO+8jOmcgOimgeagueaNrnZ0eXBl5p2l5YGa5pWw5o2u57uR5a6aXG4gICAgLSB2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgXZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIF2dHlwZT1cInZpZXdQYWdlclwi57G75Z6L55qE6IqC54K557uE5Lu277yM6ZyA6KaB5L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXnu5HlrprmlbDmja7vvIzmr5TlpoLvvJpcbiAgICAgIHRoaXMueHh4VmVydGljYWxMaXN0Vmlldy5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS5kYXRhLmxpc3Qp44CBdGhpcy54eHhIb3Jpem9udGFsTGlzdFZpZXcuc2V0RGF0YUxpc3QoeHh4UmVzcG9uc2UueHh4TGlzdCnjgIF0aGlzLnh4eFZpZXdQYWdlci5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS54eHhMaXN0KVxuICAgIC0gXFxgc2V0RGF0YUxpc3RcXGDnmoTlhaXlj4Llv4XpobvmmK/nm7TmjqXlhpnlkI7nq69hcGnov5Tlm57nmoTmlbDmja7ot6/lvoTvvIzmr5TlpoLvvJp4eHhSZXNwb25zZS5kYXRhLnh4eExpc3TvvIznu53lr7nkuI3og73kvb/nlKjlhajlsYDlj5jph4/lkozlsYDpg6jlj5jph4/ov5vooYzmlbDmja7nu5HlrprvvIzkuI3og73lhpnlhbbku5bpgLvovpHku6PnoIHvvIzmr5TlpoLvvJrkuI3og73lhplpZuOAgWZvcuOAgXdoaWxl562J5b6q546v6K+t5Y+l77yM5LiN6IO95YaZ5Ye95pWw6LCD55So562J44CCXG4gICAgLSB2dHlwZT1cImxpc3RJdGVtQ2FyZFwi44CBdnR5cGU9XCJvbmVWaWV3UGFnZXJDb250ZW50XCLnsbvlnovnmoToioLngrnnu4Tku7bvvIzpnIDopoHmt7HluqbpgY3ljoblroPnmoTnrKwx5LiqaXRlbeeahOWtqeWtkO+8jOeEtuWQjue7k+WQiOWQjuerr2Fwaei/lOWbnueahHh4eFJlc3BvbnNl55qE5pWw5o2u57uT5p6E57uZ56ysMeS4qml0ZW3orr7nva7mlbDmja7vvIzms6jmhI/lj6rpnIDnu5nnrKwx5LiqaXRlbeiKgueCueiuvue9ruaVsOaNru+8jOiAjOS4jeaYr+aJgOaciWl0ZW3oioLngrnpg73orr7nva7mlbDmja7vvIzlubbkuJTlv4XpobvmmK/nm7TmjqXlhpnlkI7nq69hcGnov5Tlm57nmoTmlbDmja7ot6/lvoTnmoTnrKzkuIDkuKppdGVtRGF0YeeahOaVsOaNrui3r+W+hO+8jOavlOWmgu+8mmNvbnN0IGl0ZW1EYXRhID0gZGF0YUxpc3RbMF07IHRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gaXRlbURhdGEueHh4LnRpdGxlVGV4dO+8jOe7neWvueS4jeiDveS9v+eUqOWFqOWxgOWPmOmHj+WSjOWxgOmDqOWPmOmHj+i/m+ihjOaVsOaNrue7keWumu+8jOS4jeiDveWGmeWFtuS7lumAu+i+keS7o+egge+8jOavlOWmgu+8muS4jeiDveWGmWlm44CBZm9y44CBd2hpbGXnrYnlvqrnjq/or63lj6XvvIzlpoLmnpzpnIDopoHpgLvovpHlpITnkIblkI7miY3og73lvpflh7p0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dOeahOWAvO+8jOmCo+WwseW/hemhu+imgeWwgeijheS4gOS4qlxcYGdldHh4eChpdGVtRGF0YTogYW55KTogc3RyaW5nXFxg5pa55rOV5p2l6I635Y+W77yM54S25ZCOOnRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gdGhpcy5nZXR4eHgoaXRlbURhdGEpXG4gICAgLSBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkO+8mlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgLy8g5ZCO56uveHh4QXBp6L+U5Zue55qEeHh4UmVzcG9uc2XmlbDmja7nu5PmnoRcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSB7XG4gICAgICAgICAgY29kZTogbnVtYmVyXG4gICAgICAgICAgbXNnOiBzdHJpbmdcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGxpc3Q6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbnVtYmVyIC8vIOS5puexjUlEXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZyAvLyDkuabnsY3moIfpophcbiAgICAgICAgICAgICAgICAgICAgICBhdXRob3I6IHN0cmluZyAvLyDkvZzogIXlkI3np7BcbiAgICAgICAgICAgICAgICAgICAgICBjb3ZlclVybDogc3RyaW5nIC8vIOWwgemdouWbvueJh1VSTFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgLy8g5Lmm57GN566A5LuLXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lOiBzdHJpbmcgLy8g5YiG57G75ZCN56ewXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0gLy8g5Lmm57GN5YiX6KGoXG4gICAgICAgICAgICAgIHRvdGFsOiBudW1iZXIgLy8g5oC75pWw6YePXG4gICAgICAgICAgICAgIHBhZ2U6IG51bWJlciAvLyDlvZPliY3pobXnoIFcbiAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyIC8vIOavj+mhteaVsOmHj1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC4uLlxuICAgICAgcHJpdmF0ZSBiaW5kRGF0YUZyb21OZXQoZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhOiBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKSB7XG4gICAgICAgIC8vIOiuvue9ruS5puexjeWIl+ihqOaVsOaNrlxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tMaXN0LnNldERhdGFMaXN0KGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLmxpc3REYXRhKVxuICAgICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgICBjb25zdCBsaXN0SXRlbURhdGEgPSBnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS5saXN0RGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tDb3ZlcjEuc3JjID0gbGlzdEl0ZW1EYXRhLmNvdmVyVXJsXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gbGlzdEl0ZW1EYXRhLnRpdGxlXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0F1dGhvcjEudGV4dCA9IGxpc3RJdGVtRGF0YS5hdXRob3JcbiAgICAgICAgLi4uXG4gICAgICAgIC8vIOiuvue9rui9ruaSreaVsOaNrlxuICAgICAgICB0aGlzLnJlY29tbWVuZFZpZXdQYWdlci5zZXREYXRhTGlzdChnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS52aWV3UGFnZXJEYXRhKVxuICAgICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgICBjb25zdCB2aWVQYWdlckl0ZW1EYXRhID0gZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEudmlld1BhZ2VyRGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZEltYWdlMS5zcmMgPSB2aWVQYWdlckl0ZW1EYXRhLmNvdmVyVXJsXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxUaXRsZTEudGV4dCA9IHRoaXMuZ2V0Q2Fyb3VzZWxUaXRsZURhdGEodmllUGFnZXJJdGVtRGF0YSkgLy8g55Sx5LqO5pyJ5aSN5p2C55qE6YC76L6R5aSE55CG77yM5omA5Lul5b+F6aG76KaB5bCB6KOF5LiA5Liq5pa55rOV5p2l6I635Y+WXG4gICAgICB9XG4gICAgICBwcml2YXRlIGdldENhcm91c2VsVGl0bGVEYXRhKGl0ZW1EYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gJydcbiAgICAgICAgaWYgKGl0ZW1EYXRhLnRpdGxlKSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS50aXRsZVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1EYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS5kZXNjcmlwdGlvblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlID0gaXRlbURhdGEuY2F0ZWdvcnlOYW1lXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpdGxlXG4gICAgICB9XG4gICAgICAuLi5cbiAgICAgIFxcYFxcYFxcYFxuICAgIC0g6K6+572u56ysMeS4qml0ZW3oioLngrnmlbDmja7ml7bvvIzlpoLmnpzooajovr7lvI/lj7Pkvqfmtonlj4rpgLvovpHov5DnrpfvvIzlv4XpobvlsIHoo4XmiJDkuIDkuKrnsbvmiJDlkZjmlrnms5XvvIzlpoLvvJpcbiAgICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICAgIC8vIOa2ieWPiumAu+i+kei/kOeul+aXtuaUueS4uuiwg+eUqOS4gOS4quexu+aIkOWRmOaWueazlVxuICAgICAgdGhpcy5yZWNvbW1lbmRJbWFnZTEuc3JjID0gdGhpcy54eHhNZXRob2QoZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSlcbiAgICAgIC8vIOWmguaenOihqOi+vuW8j+WPs+S+p+a2ieWPiumAu+i+kei/kOeul++8jOWwgeijheaIkOS4gOS4quexu+aIkOWRmOaWueazlVxuICAgICAgcHJpdmF0ZSB4eHhNZXRob2QocmVzOiBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRtcCA9IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UuZGF0YS5saXN0WzBdLmNvdmVyVXJsXG4gICAgICAgIGlmICh0bXAgJiYgdG1wLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgIHJldHVybiB0bXAgKyAn6ZW/5ZCN5a2XJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bXBcbiAgICAgIH1cbiAgICAgIFxcYFxcYFxcYFxuICAgIFxuXG4jIyAxMC4g5LiA5LqbVmlld+e7hOS7tuWGhemDqOW3suWwgeijheWlvemAu+i+ke+8jOWboOatpOS4gOS6m1ZpZXfnu4Tku7bkuI3pnIDopoHlgZrku6XkuIvkuovmg4Vcbi0g6L2u5pKtVmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkuI3lvpflnKh0c+S7o+eggemHjOmdoui/m+ihjO+8jOWboOS4ulZpZXdQYWdlcueahOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R5bey57uP6Ieq5Yqo5a6e546w5LqG77yM5L2g5LiN6ZyA6KaB5YaN5omL5Yqo5a6e546w44CCXG4tIOWtkOmhtemdouWuueWZqFxcYFN1YlBhZ2VDb250YWluZXJcXGDkuI3pnIDopoHnvJblhpnku7vkvZXorr7nva7pobXpnaLmiJbliIfmjaLpobXpnaLnmoTpgLvovpHjgIJcbi0g56aB5q2i5a+5SW1hZ2VWaWV36L+b6KGMY29sb3LlsZ7mgKfnmoTorr7nva7jgIJcbi0g5aSa54q25oCB5a655ZmoXFxgTXVsdGlTdGF0ZUNvbnRhaW5lclxcYO+8jOemgeatouWvueWFtuWGhemDqOeahOWtkFZpZXfnu4Tku7bov5vooYznm7TmjqXorr7nva7vvIzogIzlv4XpobvpgJrov4dcXGBjdXJyZW50U3RhdGlvblJlZlxcYOadpeWIh+aNoueKtuaAge+8jOS/ruaUuVxcYGN1cnJlbnRTdGF0aW9uUmVmXFxg5YiH5o2i54q25oCB5ZCO5bCx5Lya6Ieq5Yqo5pi+56S66K+l54q25oCB5LiL55qEVUnnu4Tku7bvvIzlubbkuJTpmpDol4/lhbbku5bnirbmgIHkuIvnmoRVSee7hOS7tuOAglxuXG4jIyAxMS4g5Lil5qC86YG15a6I5Luj56CB6KeE6IyD5LiO6ZmQ5Yi2XG4gLSDjgJDnsbvlnovkuI7ms5vlnovjgJFcbiAgIC0g5Zyo57un5om/6IeqXFxgUGFnZVxcYOeahOexu+S4re+8jOemgeatoumdnumdmeaAgeaIkOWRmOS9v+eUqERPTeexu+Wei+aIluWFtuS7luiHquWumuS5ieemgeatouexu+Wei+OAglxuICAgLSDnpoHmraLkvb/nlKhVSUxJQuexu+Wei+eahOaVsOe7hOS9nOS4uuaIkOWRmOOAgeWxgOmDqOWPmOmHj+OAgeaWueazleWFpeWPguaIlui/lOWbnuWAvOOAglxuICAgLSDnpoHmraLnsbvmiJDlkZjkuI7lsYDpg6jlj5jph4/mmL7lvI/lo7DmmI7kuLpcXGBhbnlcXGDvvIzku6Xlj4rkvb/nlKhcXGBhcyBhbnlcXGDjgIJcbiAgIC0gXFxgUmVmPFQ+XFxg55qEXFxgVFxcYOS7heWFgeiuuO+8mlxcYG51bWJlclxcYOOAgVxcYHN0cmluZ1xcYOOAgVxcYGJvb2xlYW5cXGDjgIFcXGBhbnlcXGDjgIFcXGBBcnJheTxhbnk+XFxg5Y+K5YW2XFxgfCBudWxsXFxg5Y+Y5L2T44CCXG4gICAtIOemgeatouS9v+eUqFxcYFN5bWJvbFxcYOWPiuWFtuebuOWFs0FQSeOAglxuICAgLSDnpoHmraLlhajlsYDlj5jph4/jgIHlsYDpg6jlj5jph4/jgIHmlrnms5XlhaXlj4LjgIHov5Tlm57lgLznmoTogZTlkIjnsbvlnovjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouWjsOaYjlxcYGludGVyZmFjZVxcYO+8jOS4lOivpeaWh+S7tuS7heWFgeiuuOS4gOS4qlxcYGNsYXNzXFxg5aOw5piO44CCXG4gICAtIOmdnlxcYHNyYy9saWJcXGDnm67lvZXnmoRcXGB0c1xcYOaWh+S7tuS4re+8jFxcYGludGVyZmFjZVxcYOWPquWFgeiuuOWumuS5ieWxnuaAp++8m+emgeatouWFtuS7luWjsOaYjuOAglxuICAgLSDnpoHmraLkvb/nlKhcXGBQYXJ0aWFsPFQ+XFxg44CCXG4gICAtIOemgeatouihjOWGheWHveaVsOexu+Wei+OAgeWHveaVsOexu+Wei+WIq+WQjeS4juWGheiBlOWvueixoeexu+Wei+Wtl+mdoumHj++8iOWxnuaAp+mZpOWklu+8ieOAglxuICAgLSDnpoHmraLlrprkuYnnsbvlnovlsZ7kuo5VSUxJQueahOmdnuexu+aIkOWRmOWPmOmHj+OAglxuICAgLSDnpoHmraLlsIZVSUxJQuexu+Wei+eahOWAvOi1i+e7memdnlVJTElC57G75Z6L55qE55uu5qCH44CCXG4gICAtIOemgeatomludGVyZmFjZeS4reeahOWxnuaAp+S9v+eUqERPTeexu+Wei+OAgVVJTElC57G75Z6L44CBYW5557G75Z6L44CBYW55W13nsbvlnovjgIFBcnJheTxhbnk+57G75Z6L44CB6IGU5ZCI57G75Z6L562J56aB5q2i57G75Z6L44CCXG4gLSDjgJDlr7zlhaXjgJFcbiAgIC0g5b2T57G76Lev5b6E5ZyoXFxgc3JjL2xpYlxcYOebruW9leS4i+aXtu+8jOemgeatouWvuei/meS4quexu+S9v+eUqOWvvOWFpemHjeWRveWQjeaIluWIq+WQjeOAglxuIC0g44CQ5a+85Ye644CRXG4gICAtIOWcqOacque7p+aJv1xcYFBhZ2VcXGDmiJZcXGBCYXNlQXBpXFxg55qE5paH5Lu25Lit77yM5LiU57G75ZCN5LiN562J5LqOXFxgc3JjL2xpYlxcYOWSjFxcYHNyYy9saWIvdWlsaWJcXGDnm67lvZXkuIvnmoTnsbvlkI3jgIHkuJTkuI3kuLpcXGBBcHBsaWNhdGlvblxcYOaXtu+8jOS7heWFgeiuuFxcYGV4cG9ydCBkZWZhdWx0IGNsYXNzXFxg44CBXFxgZXhwb3J0IGNsYXNzXFxg44CBXFxgZXhwb3J0IGludGVyZmFjZVxcYO+8m+emgeatouWFtuS7luWvvOWHuuW9ouW8j+OAglxuIC0g44CQ5pa55rOV5LiO5Ye95pWw44CRXG4gICAtIOemgeatouS9v+eUqFxcYHNldEludGVydmFsXFxg44CBXFxgY2xlYXJJbnRlcnZhbFxcYOOAgVxcYHNldFRpbWVvdXRcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOWvueW6lOaWueazleOAglxuICAgLSDnpoHmraLkvb/nlKhcXGBsb2NhbFN0b3JhZ2Uvc2Vzc2lvblN0b3JhZ2VcXGDnmoRcXGBzZXRJdGVtL2dldEl0ZW1cXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOaVsOaNruW6k+aWueazleOAglxuICAgLSDnpoHmraJcXGBEYXRlLm5vdygpXFxg5LiOXFxgbmV3IERhdGUoKVxcYO+8m+S9v+eUqFxcYEFsbEZ1bmN0aW9uXFxg5pe26Ze05pa55rOV44CCXG4gICAtIOemgeatouWcqOWHveaVsOWGheWumuS5ieWGhemDqOWHveaVsO+8m+ivt+WumuS5ieS4uuexu+engeacieaWueazleOAglxuICAgLSDnpoHmraJcXGBKU09OLnN0cmluZ2lmeS9KU09OLnBhcnNlXFxg77yb5oyJ5LiK5LiL5paH5L2/55SoXFxgSnNvbkFycmF5LnN0cmluZ2lmeS9wYXJzZVxcYOaIllxcYEpzb25PYmplY3Quc3RyaW5naWZ5L3BhcnNlXFxg44CCXG4gICAtIFxcYEpzb25PYmplY3Quc3RyaW5naWZ5L3BhcnNlXFxg5LiOXFxgSnNvbkFycmF5LnN0cmluZ2lmeS9wYXJzZVxcYOeahOWPguaVsOemgeatouS8oOWFpVxcYGNsYXNzXFxg5a+56LGh44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTnsbvkuK3pnZnmgIHosIPnlKjnu6fmib9cXGBCYXNlQXBpXFxg55qE57G75pa55rOV5pe277ya5pa55rOV5ZCN5b+F6aG75Yy56YWNXFxgcmVxdWVzdF88MTDkvY3lrZfmr43mlbDlrZc+XFxg77yM5Y+C5pWw5b+F6aG75Li6M+S4qu+8jOS4lOesrDLjgIEz5Liq5Y+C5pWw57G75Z6L5LiN5b6X5Li6XFxgYW55XFxg5oiW5rOb5Z6L44CCXG4gICAtIOWcqOe7p+aJv1xcYEJhc2VBcGlcXGDnmoTnsbvkuK3vvIxcXGByZXF1ZXN0X1xcYOW8gOWktOeahOmdmeaAgeaWueazleWQjOagt+W/hemhu+a7oei2s+WRveWQjeS4jjPlj4Lop4TliJnjgIJcbiAgIC0g56aB5q2i5pa55rOV5YaF5bGA6YOo5Y+Y6YeP6YeN5ZCN44CCXG4gICAtIFxcYGZpbmRWaWV3QnlJZFxcYOS7heWFgeiuuOeUqOS6juexu+aIkOWRmOWPmOmHj+WIneWni+WMlu+8jOWmglxcYHRoaXMuZmluZFZpZXdCeUlkKCd4eHgnKSBhcyA85YW35L2T57G75Z6LPlxcYO+8m+WFtuS7luS9jee9ruemgeatouiwg+eUqOOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit56aB5q2i5L2/55SoXFxgQXJyYXkuaXNBcnJheSgpXFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb24uaXNBcnJheSgpXFxg44CCXG4gICAtIOWcqOacque7p+aJv1xcYFBhZ2VcXGDmiJZcXGBCYXNlQXBpXFxg55qE57G75Lit56aB5q2i5aOw5piO5pa55rOV77yIXFxgY29uc3RydWN0b3JcXGDpmaTlpJbvvInvvJvoi6XnsbvlkI3nrYnkuo5cXGBzcmMvbGliXFxg5ZKMXFxgc3JjL2xpYi91aWxpYlxcYOebruW9leS4i+eahOexu+WQjeWImeS4jeWPl+atpOmZkOOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE57G75Lit6LCD55SoXFxgZmluZFZpZXdCeUlkXFxg5pe277yM5Y+C5pWw5b+F6aG75a2Y5Zyo5LqO5ZCM55uu5b2V5ZCM5ZCN5aOw5piO5byPVUnnmoRcXGAuaWQoJy4uLicpXFxg5YiX6KGo44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3osIPnlKhcXGB3YXRjaFxcYO+8iOS9jeS6jlxcYFJlZi50c1xcYO+8ieaXtu+8jOesrOS4gOS4quWPguaVsOW/hemhu+aYr+Wtl+mdoumHj+aVsOe7hFxcYFtyZWYxLCByZWYyXVxcYO+8jOemgeatouWPmOmHj+S8oOmAkuOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit5a6a5LmJVUlMSULnsbvlnovmiJDlkZjlj5jph4/ml7bvvIzlv4Xpobvkvb/nlKhcXGB0aGlzLmZpbmRWaWV3QnlJZCgneHh4JykgYXMgWHh4XFxg5Yid5aeL5YyW44CCXG4gLSDjgJDmlbDnu4Tmlrnms5XjgJFcbiAgIC0g56aB5q2i5L2/55SoXFxgbWFwXFxg44CBXFxgZmlsdGVyXFxg44CBXFxgZmluZFxcYOOAgVxcYGZpbmRJbmRleFxcYOOAgVxcYHJlZHVjZVxcYOOAgVxcYHJlZHVjZVJpZ2h0XFxg44CBXFxgZXZlcnlcXGDjgIFcXGBzb21lXFxg44CBXFxgc29ydFxcYOOAgVxcYGZsYXRNYXBcXGDvvJvnu5/kuIDkvb/nlKhcXGBmb3ItaVxcYOWunueOsOOAglxuIC0g44CQ6K+t5rOV6ZmQ5Yi244CRXG4gICAtIOemgeatouS9v+eUqFxcYHx8XFxg6L+Q566X56ym6K6h566X54S25ZCO6L+b6KGM6LWL5YC844CB5Lyg5Y+C5oiW5Yid5aeL5YyW77yM5b+F6aG75pS555So5LiJ5YWD6KGo6L6+5byP55qE5YaZ5rOV5p2l5Luj5pu/77yM5q+U5aaC77yaXFxgY29uc3QgYSA9IGIgfHwgJ2RlZmF1bHQnXFxgIOaUueS4uiBcXGBjb25zdCBhID0gYiA/IGIgOiAnZGVmYXVsdCdcXGDjgIJcbiAgIC0g56aB5q2i5a+56LGh5bGV5byA6K+t5rOVXFxgLi4uXFxg5YWL6ZqG5a+56LGh77yb5pS555So5omL5Yqo6LWL5YC844CCXG4gICAtIOemgeatouexu+aIkOWRmOWPmOmHj+S4juaWueazleWFpeWPguWQjOWQje+8jOaIluS4juaWueazleWGheWxgOmDqOWPmOmHj+WQjOWQjeOAglxuICAgLSDnpoHmraLkvb/nlKhcXGB0cnkvY2F0Y2gvZmluYWxseVxcYOOAglxuICAgLSDnpoHmraLkvb/nlKjmraPliJnooajovr7lvI/vvIzmlLnkuLrkvb/nlKjlrZfnrKbkuLLmk43kvZzmlrnms5Xku6Pmm7/lrp7njrDjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouS9v+eUqFxcYHR5cGVvZlxcYO+8m+aUueeUqFxcYEFsbEZ1bmN0aW9uLmlzU3RyaW5nL2lzTnVtYmVyL2lzQm9vbGVhbi9pc09iamVjdFxcYOOAglxuICAgLSDnpoHmraLlr7nosaHlsZ7mgKfnroDlhpnvvIhcXGB7IGEgfVxcYO+8ie+8m+S9v+eUqOWujOaVtOWGmeazle+8iFxcYHsgYTogYSB9XFxg77yJ44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3vvIznpoHmraLlr7lVSUxJQuexu+Wei+WPmOmHj+i/m+ihjOecn+WAvOWIpOaWreOAglxuICAgLSDnpoHmraLkvb/nlKjpgLvovpHmiJbvvIhcXGB8fFxcYO+8ieefrei3r+axguWAvOeahOmTvuW8j+aTjeS9nO+8jOaUueS4uuS9v+eUqCBcXGBpZi9lbHNlXFxgIOWkhOeQhuOAglxuICAgLSDnpoHmraLkvb/nlKjnqbrlgLzlkIjlubbov5DnrpfnrKbvvIhcXGA/P1xcYO+8ie+8jOaUueS4uuS9v+eUqFxcYGlmL2Vsc2VcXGDlpITnkIbjgILkvovlpoLvvJpcXGBcXG5cXGDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXFxgXFxuXFxgXFxgXFxgXFxgIHR5cGVzY3JpcHQgXFxucHJpdmF0ZSBjdXM3MSgpIHsgXFxuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gdGhpcy5jdXM3MVN0cjEgPz8gdGhpcy5jdXM3MVN0cjIgPz8gJyc7IFxcbn0gXFxuXFxgXFxgXFxgIFxcYFxcblxcYOKchSDmraPnoa7nmoTlhpnms5XvvJogXFxgXFxuXFxgXFxgXFxgXFxgIHR5cGVzY3JpcHQgXFxucHJpdmF0ZSBjdXM3MSgpIHsgXFxuICAgIGxldCBkaXNwbGF5TmFtZTogc3RyaW5nOyBcXG4gICAgaWYgKHRoaXMuY3VzNzFTdHIxKSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmN1czcxU3RyMTsgXFxuICAgIH0gZWxzZSBpZiAodGhpcy5jdXM3MVN0cjIpIHsgXFxuICAgICAgICBkaXNwbGF5TmFtZSA9IHRoaXMuY3VzNzFTdHIyOyBcXG4gICAgfSBlbHNlIHsgXFxuICAgICAgICBkaXNwbGF5TmFtZSA9ICcnOyBcXG4gICAgfSBcXG59IFxcblxcYFxcYFxcYFxuIC0g44CQ6KGl5YWF55qE6aG555uu6KeE5YiZ44CRXG4gICAtIOemgeatouS9v+eUqFxcYGZvci4uLmluXFxg77yb5L2/55SoXFxgT2JqZWN0LmtleXNcXGArXFxgZm9yLWlcXGDjgIJcbiAgIC0g56aB5q2iXFxgYXN5bmMvUHJvbWlzZVxcYO+8iOWQq1xcYFByb21pc2UucmFjZS9Qcm9taXNlLmFsbFxcYO+8ie+8m+aJgOacieW8guatpeaTjeS9nOS9v+eUqOeureWktOWHveaVsOOAglxuICAgLSDnpoHmraLkvb/nlKjmtY/op4jlmajnjq/looPnmoRcXGBsaWIuZG9tLmQudHNcXGDmlrnms5Xkuo5Ob2Rl546v5aKD44CCXG4gICAtIOemgeatouS/ruaUueOAgeWinuWIoFxcYHNyYy9saWJcXGDlj4rlhbblrZDnm67lvZXkuK3nmoTmlofku7bjgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgQHRzLWlnbm9yZVxcYOi/meS6m1R5cGVTY3JpcHTms6jph4rmjIfku6TjgIJcbiAgIC0g56aB5q2i5re75Yqg5ZKM5L2/55SoXFxgc3JjL2xpYi91aWxpYlxcYOS4rVZpZXfkuI3lrZjlnKjnmoTmlrnms5XlkozlsZ7mgKfjgIJcblxuYDtcbiJdfQ==
@@ -1,2 +1,2 @@
1
- export declare const uiDesignPromptTemplate = "# UI\u8BBE\u8BA1\u89C4\u5219\uFF0C\u7279\u522B\u6CE8\u610F\u5FC5\u987B\u4F7F\u7528UI\u89C4\u8303`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`\u91CC\u9762\u9ED8\u8BA4\u7684\u4E3B\u9898\u76AE\u80A4\u6765\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u4F7F\u7528\u5176\u4ED6\u4E3B\u9898\u76AE\u80A4\u3002\n\n## \u4E00\u3001\u7981\u6B62\u7684\u4E8B\u60C5\n- \u7981\u6B62\u4F7F\u7528\u4EFB\u4F55\u524D\u7AEF\u6846\u67B6\uFF0C\u53EA\u4F7F\u7528 html+\u7C7B\u9009\u62E9\u5668\u6837\u5F0F+js \u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u62FC\u63A5html\u5B57\u7B26\u4E32\uFF0C\u5FC5\u987B\u5728body\u6807\u7B7E\u91CC\u9762\u76F4\u63A5\u5199html\u4EE3\u7801\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728html\u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\u3002\n- \u7981\u6B62\u4F7F\u7528\u6587\u672C\u6E10\u53D8\u8272\uFF0C\u5FC5\u987B\u4F7F\u7528\u7EAF\u8272\u6587\u672C\uFF0C\u4E5F\u5C31\u662F\u7981\u6B62\u4F7F\u7528`-webkit-text-fill-color`\u5C5E\u6027\u3002\n- \u7981\u6B62\u7ED9\u9875\u9762\u6DFB\u52A0`\u624B\u673A\u9876\u90E8\u72B6\u6001\u680F`\u3001`\u624B\u673A\u5E95\u90E8\u6307\u793A\u5668\u680F`\u4E24\u4E2A\u975E\u9875\u9762\u5185\u5BB9\u7684\u5143\u7D20\u8282\u70B9\uFF0C\u8FD9\u662F\u624B\u673A\u786C\u4EF6\u81EA\u5E26\u7684\u5143\u7D20\uFF0C\u4E0D\u80FD\u5728\u9875\u9762\u4E2D\u6DFB\u52A0\u3002\n- \u7981\u6B62\u4F7F\u7528`:before`\u3001`:after`\u4F2A\u5143\u7D20\uFF0C\u5FC5\u987B\u4F7F\u7528\u5176\u4ED6\u6807\u7B7E\u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528\u591A\u4E2Ap\u6807\u7B7E\u6216\u591A\u4E2A\u5176\u4ED6\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u4ECE\u7F51\u7EDC\u6216\u5176\u4ED6\u5730\u65B9\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\uFF0C\u6BD4\u5982\uFF1Adiv\u3001span\u7B49\uFF0C\u56E0\u4E3A\u7F51\u7EDC\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\u662F\u4E00\u4E2A\u6587\u672C\uFF0C\u65E0\u6CD5\u4F7F\u7528\u591A\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u3002\n- loading\u8282\u70B9\u7684\u5B9E\u73B0\u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u4E0E\u8FB9\u6846\u5C5E\u6027\u5B9E\u73B0\uFF0C\u5FC5\u987B\u4F7F\u7528\u56FE\u6807icon\u7684i\u6807\u7B7E\u6765\u5B9E\u73B0loading\u7684\u8282\u70B9\n- \u7981\u6B62\u4E3Ahtml\u6807\u7B7E\u8282\u70B9\u6DFB\u52A0\u52A8\u753B\u6216\u8FC7\u6E21\u6548\u679C\uFF0C\u9875\u9762\u8BBE\u8BA1\u4E0D\u9700\u8981\u4EFB\u4F55\u52A8\u753B\u548C\u8FC7\u6E21\u6548\u679C\uFF0C\u6BD4\u5982\u7981\u6B62\uFF1A@keyframes\u3001transition\u3001animation \u7B49\u3002\n- \u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u7B49\u5143\u7D20\u5FC5\u987B\u8981\u6709hover\u4E0E\u70B9\u51FB\u53CD\u9988\uFF0C\u70B9\u51FB\u53CD\u9988\u5FC5\u987B\u4F7F\u7528\u6D45\u8272\u7684\u80CC\u666F\u8272background\u6765\u53CD\u9988\u5C31\u884C\uFF0C\u4E25\u7981\u4F7F\u7528transform\u6548\u679C\n - \u274C \u9519\u8BEF\u7684\u7528\u6CD5\uFF1A \n ``` css\n .hot-sales-item:hover {\n transform: translateX(...px);\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u7528\u6CD5\uFF1A\n ``` css\n .hot-sales-item:hover {\n background: ...;\n }\n ```\n- \u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u6765\u5B9E\u73B0image\u56FE\u7247\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528img\u6807\u7B7E\u6765\u5B9E\u73B0\u56FE\u7247\u8282\u70B9\uFF0Cimg\u6807\u7B7E\u7684src\u5C5E\u6027\u5FC5\u987B\u8BBE\u7F6E\u4E3A\uFF1A`https://oss.bytefungo.com/f1/showImg1.jpg`\uFF0C\u5176\u4E2D\u91CC\u9762\u7684`showImg1`\u53EF\u4EE5\u6539\u4E3A1~30\u7684\u4EFB\u610F\u4E00\u4E2A\u6570\u5B57\uFF0C\u6BD4\u5982\uFF1A`showImg5`\u3002\n - \u274C\u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` html\n <div class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\">\n </div>\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` html\n <img class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\" src=\"https://oss.bytefungo.com/f1/showImg7.jpg\"> \n ```\n\n## \u4E8C\u3001\u6837\u5F0F\u89C4\u5219\n- \u6837\u5F0F\u4EE3\u7801\u5FC5\u987B\u4F7F\u7528\u7C7B\u9009\u62E9\u5668\u6837\u5F0FClass-based Style / Class Selector Style\u65B9\u5F0F\uFF0C\u4E0D\u5F97\u4F7F\u7528\u884C\u5185\u6837\u5F0FInline Style\u6216\u5916\u90E8\u6587\u4EF6\u3002\n- \u9075\u5FAA\u624B\u673A\u5C3A\u5BF8\u89C4\u683C(\u5BBD\u5EA6 393px \u9AD8\u5EA6 808px)\n- \u9996\u9875/\u63A8\u8350tab\u7684\u5206\u7C7B/\u529F\u80FD\u5404\u4E2A\u5165\u53E3\u7684\u56FE\u6807\u4E00\u822C\u9700\u8981\u4F7F\u7528\u4E0D\u4E00\u6837\u7684\u989C\u8272\uFF0C\u5F88\u5C11\u4F1A\u7EDF\u4E00\u5168\u90E8\u4F7F\u7528\u54C1\u724C\u4E3B\u9898\u8272\n- \u6240\u6709radio\u3001checkBox\u90FD\u5FC5\u987B\u4F7F\u7528i\u6807\u7B7E\u8BBE\u7F6EFontAwesome\u56FE\u6807\u6765\u5B9E\u73B0\uFF0C\u4E0D\u5F97\u4F7F\u7528\u7CFB\u7EDF\u7684input\u6807\u7B7E\u5B9E\u73B0\u3002\n- \u5982\u7528\u6237\u6CA1\u6709\u660E\u786E\u63CF\u8FF0\u8BF4\u660E\u9875\u9762\u80CC\u666F\u8272\uFF0C\u53EA\u6709\u95EA\u5C4F\u9875\u9762\u7684\u80CC\u666F\u8272\u5141\u8BB8\u8BBE\u7F6E\u54C1\u724C\u4E3B\u8272\u6216\u54C1\u724C\u4E3B\u8272\u4E0E\u54C1\u724C\u6B21\u8272\u7684\u6E10\u53D8\u8272\uFF0C\u5176\u4ED6\u9875\u9762\u5FC5\u987B\u4F7F\u7528\u975E \u54C1\u724C\u4E3B\u8272 \u4E0E\u975E \u54C1\u724C\u6B21\u8272 \u7684\u7EAF\u8272\u505A\u9875\u9762\u80CC\u666F\u8272\uFF0C\u6BD4\u5982\u4E00\u822C\u4F7F\u7528\u767D\u8272\u7CFB\uFF0C\u5982\u679C\u662F\u6697\u9ED1\u98CE\u90A3\u5C31\u662F\u9ED1\u8272\u7CFB\u3002\n- \u8F93\u5165\u6846`input`\u5982\u679C\u9700\u8981\u5C55\u793A\u6587\u5B57 label\uFF0C\u5C3D\u91CF\u4F7F\u7528 icon \u4EE3\u66FF\u6587\u5B57 label\uFF0C\u5E76\u4E14 icon \u91CD\u53E0\u5728\u8F93\u5165\u6846\u7684\u5DE6\u4FA7\uFF0C\u8FD9\u6837\u6574\u4E2A\u9875\u9762\u7684\u7A7A\u95F4\u5229\u7528\u7387\u9AD8\u3002\n- \u5982\u679C\u4E3B\u9898\u98CE\u683C\u662F\u6697\u9ED1\u98CE\u683C\u7684\u8BDD\uFF0C\u9ED8\u8BA4\u53EF\u4EE5\u7ED9\u6BCF\u4E2A\u9875\u9762\u6DFB\u52A0\u591A\u4E2A\u73BB\u7483\u6548\u679C\u7684\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u80CC\u666F\uFF0C\u7C7B\u4F3C\u8FD9\u6837\uFF1A`background: radial-gradient(circle, rgba(0, 242, 255, 0.1) 0%, rgba(0, 0, 0, 0) 70%);`\uFF0C\u91CC\u9762\u7684\u989C\u8272\u548C\u6E10\u53D8\u8303\u56F4\u53EF\u4EE5\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u8C03\u6574\u3002\n- \u80CC\u666F\u8272\u4E3A\u4E86\u589E\u5F3A\u5C42\u6B21\u611F\uFF0C\u6DFB\u52A0\u7684\u68A6\u5E7B\u6CE1\u6CE1\u6216\u8005\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u5143\u7D20\u7684div\uFF0C\u5FC5\u987B\u53EA\u80FD\u58F0\u660E\u4E3A`circle`\uFF0C\u5E76\u4E14\u4E00\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\uFF0C\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Abackground: radial-gradient(circle, rgba(0, 229, 255, 0.15) 0%, rgba(0, 0, 0, 0) 70%);\uFF0C\u5982\u679C\u9700\u8981\u591A\u4E2A`radial-gradient`\u5F84\u5411\u6E10\u53D8\u80CC\u666F\uFF0C\u6BCF\u4E2A\u5F84\u5411\u6E10\u53D8\u80CC\u666F\u90FD\u5FC5\u987B\u58F0\u660E\u4E3A\u4E00\u4E2Adiv\u8282\u70B9\uFF0C\u6BCF\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\u3002\n- \u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u7B49\u5143\u7D20\u5FC5\u987B\u8981\u6709\u4E00\u4E2Ahover\u540E\u6539\u53D8\u80CC\u666F\u8272\u7684\u53CD\u9988\u6548\u679C\uFF0C\u4E0D\u80FD\u4F7F\u7528transform\u6548\u679C\uFF0C\u53EA\u80FD\u4F7F\u7528\u80CC\u666F\u8272\u6548\u679C\u3002\n\n## \u4E09\u3001\u5FC5\u987B\u7ED9\u6BCF\u4E00\u4E2A\u8282\u70B9\u6DFB\u52A0id\u3001name\u3001nodeType\u5C5E\u6027\n- \u7279\u522B\u6CE8\u610F\uFF0C`i`\u548C`div`\u7B49\u6807\u7B7E\u4E5F\u5FC5\u987B\u6DFB\u52A0 id\u3001name\u3001nodeType \u5C5E\u6027\uFF0C\u6BCF\u4E00\u4E2A\u8282\u70B9\u90FD\u9700\u8981\u6DFB\u52A0\u8FD9\u4E09\u4E2A\u5C5E\u6027\uFF0C\u5343\u4E07\u522B\u6F0F\u6389\u4E86\uFF0C\u8FD9\u662F\u5FC5\u8981\u6761\u4EF6\n- id \u5C5E\u6027\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u82F1\u6587\u6216\u6570\u5B57\u7EC4\u6210\uFF0C\u4E14\u4E0D\u80FD\u4EE5\u6570\u5B57\u5F00\u5934\uFF0C\u5E76\u4E14\u6574\u4E2A\u9875\u9762 id \u5C5E\u6027\u7684\u503C\u5FC5\u987B\u552F\u4E00\uFF0C\u4F7F\u7528\u9A7C\u5CF0\u7684\u547D\u540D\u65B9\u5F0F\n- name \u5C5E\u6027\u5FC5\u987B\u662F\u4E2D\u6587\u6216\u6570\u5B57\uFF0C\u5E76\u4E14\u4E0D\u80FD\u5305\u542B\u7279\u6B8A\u5B57\u7B26\n- \u5982\u679C\u662F\u901A\u8FC7\u70B9\u51FBitem\u9879\u5207\u6362\u5C55\u793A\u5185\u5BB9\u7684\uFF0C\u90A3\u4E48item\u9879\u7684nodeType\u5FC5\u987B\u662F`tabMenuBarItem`\uFF0Ctab panel\u7684nodeType\u5FC5\u987B\u662F`tabPanel`\uFF0C`tabMenuBarItem`\u7684\u7236\u4EB2\u5BB9\u5668\u662F`tabMenuBar`\uFF0C\u4E0D\u5F97\u4F7F\u7528`horizontalListView`\u6765\u4EE3\u66FF`tabMenuBar`\n- \u9875\u9762\u7684header\u6807\u9898\u680FnodeType\u5FC5\u987B\u662F`titleBar`\u6216\u8005`topNavigateBar`\uFF0C\u800C\u4E0D\u662F`container`\n- nodeType \u5C5E\u6027\u7684\u503C\u5FC5\u987B\u662F`\u7EC4\u4EF6\u7C7B\u578B\u679A\u4E3E (nodeType)\u679A\u4E3E` \u4E2D\u7684\u4E00\u4E2A\uFF0C\u4E00\u4E9B\u5E03\u5C40\u5BB9\u5668\u9700\u8981\u9075\u5B88\u4EE5\u4E0B\u8BF4\u660E\u6765\u9009\u62E9\u6B63\u786E\u7684nodeType\uFF1A\n - \u5217\u8868\u5BB9\u5668\uFF1A`verticalListView`\u3001`horizontalListView`\u3001`listItemCard`\uFF0C\u7528\u4E8E\u5E03\u5C40\u591A\u4E2A\u5217\u8868\u9879\uFF0C\u6BD4\u5982\uFF1A\u5546\u54C1\u5217\u8868\u3001\u5206\u7C7B\u5217\u8868\u3001\u6807\u7B7E\u5217\u8868\u7B49\uFF0C\u53EF\u4EE5\u652F\u6301\u591A\u884C\u591A\u5217\u7684\u5217\u8868\u5E03\u5C40\n - \u5217\u8868\u9875\u811A\u5BB9\u5668\uFF1A`listFooterContainer`\uFF0C\u7528\u4E8E\u5E03\u5C40\u5217\u8868\u7684\u9875\u811A\uFF0C\u6BD4\u5982\uFF1A\u52A0\u8F7D\u66F4\u591A\u3001\u6CA1\u6709\u66F4\u591A\u4E86\u7B49\n - \u7F51\u683C\u5BB9\u5668\uFF1AgridContainer\u7528\u4E8E\u5E03\u5C40\u591A\u4E2A\u7F51\u683C\u9879\uFF0C\u91CC\u9762\u5305\u542BN\u4E2AgridItem\uFF0C\u6BD4\u5982\uFF1A\u5206\u7C7B\u7F51\u683C\u5165\u53E3\n - \u6D41\u5F0F\u5BB9\u5668\uFF1A\u7528\u4E8E\u5E03\u5C40\u591A\u4E2A\u5B50\u9879\uFF0C\u5B50\u9879\u53EF\u4EE5\u5728\u4E00\u884C\u663E\u793A\uFF0C\u5F53\u4F4D\u7F6E\u4E0D\u591F\u65F6\u5C31\u6362\u884C\u663E\u793A\uFF0C\u6BD4\u5982\uFF1A\u4E00\u7EC4\u6807\u7B7Etag\u7684\u6392\u7248\u5E03\u5C40\n - \u591A\u72B6\u6001\u5BB9\u5668\uFF1A`multiStateContainer`, `oneStateContentContainer`\uFF0C\u7528\u4E8E\u4E0D\u662F\u901A\u8FC7\u4EA4\u4E92\uFF0C\u800C\u662F\u901A\u8FC7\u903B\u8F91\u72B6\u6001\u53D8\u91CF\u53D8\u5316\u800C\u663E\u793A\u4E0D\u540C\u72B6\u6001\u7684\u5185\u5BB9\u5BB9\u5668\uFF0C\u6BD4\u5982\uFF1A\u767B\u5F55\u72B6\u6001\u548C\u672A\u767B\u5F55\u72B6\u6001\u5206\u522B\u663E\u793A\u4E0D\u540C\u7684\u5185\u5BB9\u3002\n- \u9AD8\u7EA7\u7EC4\u4EF6\u8282\u70B9\u7684nodeType\u7ED3\u6784\u89C4\u5219\uFF1A\n - tab \u9009\u9879\u5361\uFF1A`tabMenuBar`\u662Ftab\u9009\u9879\u5361\u83DC\u5355\u680F\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`tabMenuBarItem`\uFF0C`tabPanelFather`\u662Ftab\u9009\u9879\u5361\u5185\u5BB9\u5BB9\u5668\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`tabPanel`\uFF0C`tabMenuBar`\u548C`tabPanelFather`\u5FC5\u987B\u540C\u65F6\u5B58\u5728\uFF0C`tabPanel`\u7684\u6570\u91CF\u5FC5\u987B\u548C`tabMenuBarItem`\u7684\u6570\u91CF\u76F8\u540C\n - viewPager \u8F6E\u64AD\uFF1A`viewPager`\u662F\u8F6E\u64AD\u5BB9\u5668\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`viewPagerItem`\uFF0C`viewPagerIndicatorContainer`\u662F\u8F6E\u64AD\u6307\u793A\u5668\u5BB9\u5668\uFF0C`viewPager`\u4E0E`viewPagerIndicatorContainer`\u5FC5\u987B\u540C\u65F6\u5B58\u5728\n - \u4E00\u884C\u4E0D\u591F\u4F4D\u7F6E\u663E\u793A\u5C31\u6362\u884C\u7684\u5BB9\u5668\uFF1A`inlineBlockAndWrap`\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`blockItem`\uFF0C`blockItem`\u662F\u5B83\u7684\u5B50\u9879\n - \u591A\u72B6\u6001\u5BB9\u5668\uFF1A\u4E00\u4E2A`multiStateContainer`\u591A\u72B6\u6001\u5BB9\u5668\u5305\u542B\u591A\u4E2A`oneStateContentContainer`\n\n- \u7EC4\u4EF6\u7C7B\u578B\u679A\u4E3E (nodeType)\u679A\u4E3E\uFF1A\n\n - \u5F62\u72B6\uFF1A`rect`, `circle`, `line`\n - \u57FA\u7840\u7EC4\u4EF6\uFF1A`text`\u3001`button`\u3001`input`\u3001`icon`\u3001`image`\n - \u57FA\u7840\u5BB9\u5668\uFF1A`container`\n - \u7F51\u683C\u5BB9\u5668\uFF1A`gridContainer`\u3001`gridItem`\n - \u6D41\u5F0F\u5BB9\u5668\uFF1A`inlineBlockAndWrap`\u3001`blockItem`\n - \u5F00\u5173\uFF1A`switch`\n - \u5355\u9009\uFF1A`radioGroup`\u3001`radio`\n - \u591A\u9009\uFF1A`checkBoxGroup`\u3001`checkBox`\n - \u9876\u90E8\u5BFC\u822A\u680F\uFF1A`titleBar`\u3001`topNavigateBar`\n - \u5E95\u90E8\u64CD\u4F5C\u680F\uFF1A`bottomOperateBar`\n - \u591A\u72B6\u6001\u5BB9\u5668\uFF1A`multiStateContainer`, `oneStateContentContainer`\n - \u5217\u8868\uFF1A`verticalListView`, `horizontalListView`, `listItemCard`\u3001`listFooterContainer`\n - \u8F6E\u64AD\uFF1A`viewPager`, `viewPagerItem`, `viewPagerIndicatorContainer`\n - tab \u9009\u9879\u5361\uFF1A`tabPanelFather`, `tabPanel`, `tabMenuBar`, `tabMenuBarItem`\n - \u5E95\u90E8\u5BFC\u822A: `bottomTabContentContainer`, `subPage`, `bottomTabNavigateBar`, `bottomTabNavigateBarItem`\n - \u5BF9\u8BDD\u6846\uFF1A`dialogOverlay`, `dialogContent`\n - toast \u63D0\u793A\uFF1A`toast`\n - \u4E0B\u62C9\u83DC\u5355\uFF1A`dropDownMenu`\n - \u4FA7\u6ED1\u9762\u677F\uFF1A`sideSlidePanel`\n - \u624B\u673A\u786C\u4EF6\u5143\u7D20\uFF1A`phoneTopStatusBar`\u3001`phoneBottomIndicatorBar`\uFF0C\u8FD9\u4E24\u4E2A\u5143\u7D20\u662F\u624B\u673A\u786C\u4EF6\u81EA\u5E26\u7684\u5143\u7D20\uFF0C\u4E0D\u80FD\u5728\u9875\u9762\u4E2D\u6DFB\u52A0\u3002\n\n## \u56DB\u3001\u8F6E\u64AD\u4E0ETabs\u7EC4\u4EF6\u7684\u89C4\u5219\n- \u8F6E\u64AD\u7684\u6BCF\u4E00\u4E2ASlide\u548CTabs\u9009\u9879\u5361\u7EC4\u4EF6\u6BCF\u4E00\u4E2ATab Panel\u90FD\u5FC5\u987B\u4F7F\u7528`display: none`\u548C`display: block/flex`\u6765\u5B9E\u73B0\u9690\u85CF\u548C\u663E\u793A\u7684\u4E92\u65A5\u5207\u6362\n- \u8F6E\u64AD\u7684\u6BCF\u4E00\u4E2ASlide\u5FC5\u987B\u6709html\u4EE3\u7801\u5B9E\u73B0\uFF0C\u4E0D\u5F97\u53EA\u5199\u7B2C1\u4E2ASlide\u7684html\u4EE3\u7801\uFF0C\u5176\u4ED6Slide\u7684html\u4EE3\u7801\u4E5F\u5FC5\u987B\u8981\u5199\u3002\n- Tabs\u9009\u9879\u5361\u7EC4\u4EF6\u9700\u8981\u6DFB\u52A0\u70B9\u51FB\u5207\u6362Tab Panel\u7684\u529F\u80FD\uFF0C\u4E0D\u5F97\u53EA\u5199\u7B2C1\u4E2ATab Panel\u7684html\u4EE3\u7801\uFF0C\u5176\u4ED6Tab Panel\u7684html\u4EE3\u7801\u4E5F\u5FC5\u987B\u8981\u5199\u3002\n- Tabs\u9009\u9879\u5361\u7EC4\u4EF6\u6BCF\u4E00\u4E2ATab Panel\u90FD\u5FC5\u987B\u8981\u6709\u5185\u5BB9\uFF0C\u4E0D\u5F97\u6577\u884D\u5730\u5C55\u793A\u6CA1\u6709\u6570\u636E\u3001\u8054\u7F51\u5931\u8D25\u3001loading\u7684\u60C5\u51B5\uFF0C\u5FC5\u987B\u5C55\u793A\u6709\u6570\u636E\u7684\u5177\u4F53\u5185\u5BB9\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5077\u61D2\u6577\u884D\u3002\n- Tabs\u9009\u9879\u5361\u7EC4\u4EF6\u6BCF\u4E00\u4E2ATab Panel\u90FD\u5FC5\u987B\u8981\u6709html\u4EE3\u7801\u5B9E\u73B0\uFF0C\u4E0D\u5F97\u53EA\u5199\u7B2C1\u4E2ATab Panel\u7684html\u4EE3\u7801\uFF0C\u5176\u4ED6Tab Panel\u7684html\u4EE3\u7801\u4E5F\u5FC5\u987B\u8981\u5199\u3002\n\n## \u4E94\u3001\u56FE\u6807\u4E0E\u56FE\u7247\u7684\u89C4\u5219\n- \u5F53\u9700\u8981icon\u56FE\u6807\u65F6\u5FC5\u987B\u4F7F\u7528FontAwesome\u56FE\u6807\uFF0C\u6BD4\u5982\uFF1A`<i name=\"\u5FAE\u4FE1Icon\" vtype=\"icon\" id=\"wxIcon\" class=\"fab fa-weixin\"></i>`\uFF0C\u5E76\u4E14\u6CE8\u610F\u56FE\u6807\u7684\u989C\u8272\uFF0C\u6BD4\u5982\u5FAE\u4FE1\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u7EFF\u8272\u7CFB\uFF0CQQ\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u84DD\u8272\u7CFB\uFF0C\u5FAE\u535A\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u7EA2\u8272\u7CFB\uFF0C\u652F\u4ED8\u5B9D\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u6D45\u84DD\u8272\u7CFB\u7B49\u7B49\n- \u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528 emoji \u8868\u60C5\u7B26\u53F7\uFF0C\u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55 emoji \u8868\u60C5\u7B26\u53F7\uFF0C\u8BF7\u4F7F\u7528FontAwesome\u5B57\u4F53\u56FE\u6807\u6765\u4EE3\u66FF\u3002\n- LOGO\u56FE\u7247\u548C\u5F15\u5BFC\u9875\u7684\u5F15\u5BFC\u56FE\u7247\u5FC5\u987B\u4F7F\u7528`doc/res/svgMap.json`\u6587\u4EF6\u4E2Djson\u5BF9\u8C61\u6B63\u786E\u5B57\u6BB5\u7684https\u94FE\u63A5\u503C\uFF0C\u7981\u6B62\u4F7F\u7528\u672C\u5730\u56FE\u7247\u8DEF\u5F84`doc/res/logo.svg`\u6587\u4EF6\uFF0C\u800C\u662F\u4F7F\u7528\u7C7B\u4F3C\uFF1A`https://editor.bytefungo.com/dfile/img/xxxxx.svg`\u8FD9\u6837\u7684\u56FE\u7247\u94FE\u63A5\u5730\u5740\uFF0C\u6BD4\u5982\u95EA\u5C4F\u9875\u3001\u767B\u5F55\u9875\u3001\u6CE8\u518C\u9875\u7528\u5230\u7684LOGO\u56FE\u7247\uFF0C\u5F15\u5BFC\u9875\u7684\u5F15\u5BFC\u56FE\u7247\u7B49\u3002\n- jpg\u3001jpeg\u7C7B\u578B\u56FE\u7247\u5FC5\u987B\u4F7F\u7528\u56FE\u7247\u5730\u5740\uFF1A`https://oss.bytefungo.com/f1/showImg1.jpg`)\uFF0C\u5176\u4E2D\u7ED3\u5C3E\u7684\u2019showImg1'\u53EF\u4EE5\u6362\u4E3A\u4ECE 1 \u5230 30 \u7684\u6570\u5B57\uFF0C1~30 \u7684\u6570\u5B57\u5FC5\u987B\u968F\u673A\u6311\u9009\uFF0C\u4E0D\u5F97\u6BCF\u4E2A\u9875\u9762\u6BCF\u4E2A\u56FE\u7247\u90FD\u4F7F\u7528\u540C\u4E00\u4E2A\u6570\u5B57\u3002\u5199\u6CD5\u6BD4\u5982\uFF1A`<img src=\"https://oss.bytefungo.com/f1/showImg17.jpg\" alt=\"xxx\" class=\"xxx\" nodeType=\"image\">`\n\n## \u516D\u3001\u9996\u9875\u4E3B\u4F53\u9875\u4E0E\u5B50\u9875\u9762\u7684\u89C4\u5219\n- \u9996\u9875\u4E3B\u4F53\u9875\u5D4C\u5957\u4E86\u591A\u4E2A\u5B50\u9875\u9762\uFF0C\u6BCF\u4E00\u4E2A\u5B50\u9875\u9762\u90FD\u4E0D\u9700\u8981\u586B\u5145\u5185\u5BB9\uFF0C\u7A7A\u767D\u5C31\u884C\uFF0C\u540E\u9762\u4F1A\u6709\u4E13\u95E8\u7684\u4EFB\u52A1\u6765\u8BBE\u8BA1\u5177\u4F53\u7684\u5B50\u9875\u9762\u3002\n- \u4EFB\u4F55\u5B50\u9875\u9762\u90FD\u5FC5\u987B\u7981\u6B62\u6DFB\u52A0\u5E95\u90E8\u5BFC\u822A\u680F\u8282\u70B9\u5230\u9875\u9762\uFF0C\u56E0\u4E3A\u5B50\u9875\u9762\u662F\u5D4C\u5957\u5728\u9996\u9875\u4E3B\u4F53\u9875\u4E2D\u7684\uFF0C\u7236\u9875\u9762\u5DF2\u7ECF\u6709\u5E95\u90E8\u5BFC\u822A\u680F\u4E86\uFF0C\u5B50\u9875\u9762\u4E0D\u9700\u8981\u518D\u6DFB\u52A0\u5E95\u90E8\u5BFC\u822A\u680F\uFF0C\u4E5F\u4E0D\u5F97\u6DFB\u52A0\u4E8C\u7EA7\u9875\u9762\u7684\u6807\u9898\u680F\u5230\u5B50\u9875\u9762\u4E2D\uFF0C\u56E0\u4E3A\u5B50\u9875\u9762\u662F\u5D4C\u5957\u5728\u9996\u9875\u4E3B\u4F53\u9875\u4E2D\u7684\uFF0C\u9996\u9875\u4E3B\u4F53\u9875\u548C\u5B83\u7684\u5B50\u9875\u9762\u90FD\u662F\u4E00\u7EA7\u9875\u9762\uFF0C\u56E0\u6B64\u4E0D\u5F97\u6DFB\u52A0\u4E8C\u7EA7\u9875\u9762\u7684\u6807\u9898\u680F\u5230\u5B50\u9875\u9762\u4E2D\u3002\n\n## \u4E03\u3001\u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u8BE5\u9875\u9762\u8BBE\u8BA1\u9700\u6C42\uFF0C\u90A3\u5C31\u6309\u7167\u4EE5\u4E0B\u9875\u9762\u9ED8\u8BA4\u89C4\u5219\u8BBE\u8BA1\n- \u95EA\u5C4F\u9875\uFF1A\u7981\u6B62\u4F7F\u7528\u5168\u5C4F\u56FE\u7247\uFF0C\u4E00\u822C\u4F7F\u7528\u4E3B\u9898\u76F8\u5173\u7684\u6E10\u53D8\u8272\uFF0C\u7136\u540E\u5E26\u6709\u4E00\u4E9B\u989D\u5916\u7684\u80CC\u666F\u5143\u7D20\u589E\u5F3A\u754C\u9762\u5C42\u6B21\u611F\uFF0C\u6BD4\u5982\uFF1A\u68A6\u5E7B\u5706\u5708\u6CE1\u6CE1\u3001\u73BB\u7483\u6548\u679C\u7684\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u7B49\u7B49\u5143\u7D20\n- \u5F15\u5BFC\u9875\uFF1A\u5C3D\u91CF\u4E0D\u4F7F\u7528\u5168\u5C4F\u56FE\u7247\uFF0C\u4E00\u822C\u6BCF\u4E00\u9875\u5F15\u5BFC\u9875\u80CC\u666F\u8272\u4E5F\u53EF\u4EE5\u6E10\u53D8\uFF0C\u7136\u540E\u6BCF\u4E00\u9875\u529F\u80FD\u8BF4\u660E\u4E00\u822C\u6709\u975E\u5168\u5C4F\u56FE\u7247\u3001\u6807\u9898\u3001\u526F\u6807\u9898\u7B49\u7B49\uFF0C\u4F60\u53EF\u4EE5\u5E26\u5165\u5176\u4ED6\u5143\u7D20\uFF0C\u8BA9\u9875\u9762\u66F4\u52A0\u7F8E\u89C2\uFF0C\u5E76\u4E14\u5F15\u5BFC\u9875\u7684\u5F15\u5BFC\u56FE\u7247\u9700\u8981\u81EA\u5DF1\u7ED8\u5236svg\u56FE\u7247\uFF0C\u5E76\u5B58\u653E\u5728`doc/res`\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u5E76\u5728html\u4E2D\u4F7F\u7528\n- \u80CC\u666F\u8272\u4E3A\u4E86\u589E\u5F3A\u5C42\u6B21\u611F\uFF0C\u6DFB\u52A0\u7684\u68A6\u5E7B\u6CE1\u6CE1\u6216\u8005\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u5143\u7D20\u7684div\uFF0C\u5FC5\u987B\u53EA\u80FD\u58F0\u660E\u4E3A`circle`\uFF0C\u5E76\u4E14\u4E00\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\uFF0C\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Abackground: radial-gradient(circle, rgba(0, 229, 255, 0.15) 0%, rgba(0, 0, 0, 0) 70%);\uFF0C\u5982\u679C\u9700\u8981\u591A\u4E2A`radial-gradient`\u5F84\u5411\u6E10\u53D8\u80CC\u666F\uFF0C\u6BCF\u4E2A\u5F84\u5411\u6E10\u53D8\u80CC\u666F\u90FD\u5FC5\u987B\u58F0\u660E\u4E3A\u4E00\u4E2Adiv\u8282\u70B9\uFF0C\u6BCF\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\u3002\n";
1
+ export declare const uiDesignPromptTemplate = "# UI\u8BBE\u8BA1\u89C4\u5219\uFF0C\u7279\u522B\u6CE8\u610F\u5FC5\u987B\u4F7F\u7528UI\u89C4\u8303`.bytefun/UI\u8BBE\u8BA1\u89C4\u8303.md`\u91CC\u9762\u9ED8\u8BA4\u7684\u4E3B\u9898\u76AE\u80A4\u6765\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u4F7F\u7528\u5176\u4ED6\u4E3B\u9898\u76AE\u80A4\u3002\n\n## \u4E00\u3001\u7981\u6B62\u7684\u4E8B\u60C5\n- \u7981\u6B62\u4F7F\u7528\u4EFB\u4F55\u524D\u7AEF\u6846\u67B6\uFF0C\u53EA\u4F7F\u7528 html+\u7C7B\u9009\u62E9\u5668\u6837\u5F0F+js \u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u62FC\u63A5html\u5B57\u7B26\u4E32\uFF0C\u5FC5\u987B\u5728body\u6807\u7B7E\u91CC\u9762\u76F4\u63A5\u5199html\u4EE3\u7801\u3002\n- \u7981\u6B62\u4F7F\u7528js\u4EE3\u7801\u6765\u58F0\u660E\u4EFB\u4F55\u9875\u9762\u663E\u793A\u6240\u9700\u7684\u6570\u636E\uFF0C\u6240\u6709\u6570\u636E\u90FD\u5FC5\u987B\u5728html\u4EE3\u7801\u4E2D\u76F4\u63A5\u5199\u6B7B\u3002\n- \u7981\u6B62\u4F7F\u7528\u6587\u672C\u6E10\u53D8\u8272\uFF0C\u5FC5\u987B\u4F7F\u7528\u7EAF\u8272\u6587\u672C\uFF0C\u4E5F\u5C31\u662F\u7981\u6B62\u4F7F\u7528`-webkit-text-fill-color`\u5C5E\u6027\u3002\n- \u7981\u6B62\u7ED9\u9875\u9762\u6DFB\u52A0`\u624B\u673A\u9876\u90E8\u72B6\u6001\u680F`\u3001`\u624B\u673A\u5E95\u90E8\u6307\u793A\u5668\u680F`\u4E24\u4E2A\u975E\u9875\u9762\u5185\u5BB9\u7684\u5143\u7D20\u8282\u70B9\uFF0C\u8FD9\u662F\u624B\u673A\u786C\u4EF6\u81EA\u5E26\u7684\u5143\u7D20\uFF0C\u4E0D\u80FD\u5728\u9875\u9762\u4E2D\u6DFB\u52A0\u3002\n- \u7981\u6B62\u4F7F\u7528`:before`\u3001`:after`\u4F2A\u5143\u7D20\uFF0C\u5FC5\u987B\u4F7F\u7528\u5176\u4ED6\u6807\u7B7E\u6765\u5B9E\u73B0\u3002\n- \u7981\u6B62\u4F7F\u7528\u591A\u4E2Ap\u6807\u7B7E\u6216\u591A\u4E2A\u5176\u4ED6\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u4ECE\u7F51\u7EDC\u6216\u5176\u4ED6\u5730\u65B9\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\uFF0C\u6BD4\u5982\uFF1Adiv\u3001span\u7B49\uFF0C\u56E0\u4E3A\u7F51\u7EDC\u62C9\u53D6\u56DE\u6765\u7684\u957F\u6587\u672C\u662F\u4E00\u4E2A\u6587\u672C\uFF0C\u65E0\u6CD5\u4F7F\u7528\u591A\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u4E00\u4E2A\u6587\u672C\uFF0C\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u4E00\u4E2A\u6807\u7B7E\u6765\u663E\u793A\u3002\n- loading\u8282\u70B9\u7684\u5B9E\u73B0\u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u4E0E\u8FB9\u6846\u5C5E\u6027\u5B9E\u73B0\uFF0C\u5FC5\u987B\u4F7F\u7528\u56FE\u6807icon\u7684i\u6807\u7B7E\u6765\u5B9E\u73B0loading\u7684\u8282\u70B9\n- \u7981\u6B62\u4E3Ahtml\u6807\u7B7E\u8282\u70B9\u6DFB\u52A0\u52A8\u753B\u6216\u8FC7\u6E21\u6548\u679C\uFF0C\u9875\u9762\u8BBE\u8BA1\u4E0D\u9700\u8981\u4EFB\u4F55\u52A8\u753B\u548C\u8FC7\u6E21\u6548\u679C\uFF0C\u6BD4\u5982\u7981\u6B62\uFF1A@keyframes\u3001transition\u3001animation \u7B49\u3002\n- \u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u7B49\u5143\u7D20\u5FC5\u987B\u8981\u6709hover\u4E0E\u70B9\u51FB\u53CD\u9988\uFF0C\u70B9\u51FB\u53CD\u9988\u5FC5\u987B\u4F7F\u7528\u6D45\u8272\u7684\u80CC\u666F\u8272background\u6765\u53CD\u9988\u5C31\u884C\uFF0C\u4E25\u7981\u4F7F\u7528transform\u6548\u679C\n - \u274C \u9519\u8BEF\u7684\u7528\u6CD5\uFF1A \n ``` css\n .hot-sales-item:hover {\n transform: translateX(...px);\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u7528\u6CD5\uFF1A\n ``` css\n .hot-sales-item:hover {\n background: ...;\n }\n ```\n- \u7981\u6B62\u4F7F\u7528div\u6807\u7B7E\u6765\u5B9E\u73B0image\u56FE\u7247\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528img\u6807\u7B7E\u6765\u5B9E\u73B0\u56FE\u7247\u8282\u70B9\uFF0Cimg\u6807\u7B7E\u7684src\u5C5E\u6027\u5FC5\u987B\u8BBE\u7F6E\u4E3A\uFF1A`https://oss.bytefungo.com/f1/showImg1.jpg`\uFF0C\u5176\u4E2D\u91CC\u9762\u7684`showImg1`\u53EF\u4EE5\u6539\u4E3A1~30\u7684\u4EFB\u610F\u4E00\u4E2A\u6570\u5B57\uFF0C\u6BD4\u5982\uFF1A`showImg5`\u3002\n - \u274C\u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` html\n <div class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\">\n </div>\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` html\n <img class=\"bestseller-cover\" id=\"bestsellerCover1\" name=\"\u7545\u9500\u4E66\u7C4D\u5C01\u97621\" nodeType=\"image\" src=\"https://oss.bytefungo.com/f1/showImg7.jpg\"> \n ```\n\n## \u4E8C\u3001\u6837\u5F0F\u89C4\u5219\n- \u6837\u5F0F\u4EE3\u7801\u5FC5\u987B\u4F7F\u7528\u7C7B\u9009\u62E9\u5668\u6837\u5F0FClass-based Style / Class Selector Style\u65B9\u5F0F\uFF0C\u4E0D\u5F97\u4F7F\u7528\u884C\u5185\u6837\u5F0FInline Style\u6216\u5916\u90E8\u6587\u4EF6\u3002\n- \u9075\u5FAA\u624B\u673A\u5C3A\u5BF8\u89C4\u683C(\u5BBD\u5EA6 393px \u9AD8\u5EA6 808px)\n- \u9996\u9875/\u63A8\u8350tab\u7684\u5206\u7C7B/\u529F\u80FD\u5404\u4E2A\u5165\u53E3\u7684\u56FE\u6807\u4E00\u822C\u9700\u8981\u4F7F\u7528\u4E0D\u4E00\u6837\u7684\u989C\u8272\uFF0C\u5F88\u5C11\u4F1A\u7EDF\u4E00\u5168\u90E8\u4F7F\u7528\u54C1\u724C\u4E3B\u9898\u8272\n- \u6240\u6709radio\u3001checkBox\u90FD\u5FC5\u987B\u4F7F\u7528i\u6807\u7B7E\u8BBE\u7F6EFontAwesome\u56FE\u6807\u6765\u5B9E\u73B0\uFF0C\u4E0D\u5F97\u4F7F\u7528\u7CFB\u7EDF\u7684input\u6807\u7B7E\u5B9E\u73B0\u3002\n- \u5982\u7528\u6237\u6CA1\u6709\u660E\u786E\u63CF\u8FF0\u8BF4\u660E\u9875\u9762\u80CC\u666F\u8272\uFF0C\u53EA\u6709\u95EA\u5C4F\u9875\u9762\u7684\u80CC\u666F\u8272\u5141\u8BB8\u8BBE\u7F6E\u54C1\u724C\u4E3B\u8272\u6216\u54C1\u724C\u4E3B\u8272\u4E0E\u54C1\u724C\u6B21\u8272\u7684\u6E10\u53D8\u8272\uFF0C\u5176\u4ED6\u9875\u9762\u5FC5\u987B\u4F7F\u7528\u975E \u54C1\u724C\u4E3B\u8272 \u4E0E\u975E \u54C1\u724C\u6B21\u8272 \u7684\u7EAF\u8272\u505A\u9875\u9762\u80CC\u666F\u8272\uFF0C\u6BD4\u5982\u4E00\u822C\u4F7F\u7528\u767D\u8272\u7CFB\uFF0C\u5982\u679C\u662F\u6697\u9ED1\u98CE\u90A3\u5C31\u662F\u9ED1\u8272\u7CFB\u3002\n- \u8F93\u5165\u6846`input`\u5982\u679C\u9700\u8981\u5C55\u793A\u6587\u5B57 label\uFF0C\u5C3D\u91CF\u4F7F\u7528 icon \u4EE3\u66FF\u6587\u5B57 label\uFF0C\u5E76\u4E14 icon \u91CD\u53E0\u5728\u8F93\u5165\u6846\u7684\u5DE6\u4FA7\uFF0C\u8FD9\u6837\u6574\u4E2A\u9875\u9762\u7684\u7A7A\u95F4\u5229\u7528\u7387\u9AD8\u3002\n- \u5982\u679C\u4E3B\u9898\u98CE\u683C\u662F\u6697\u9ED1\u98CE\u683C\u7684\u8BDD\uFF0C\u9ED8\u8BA4\u53EF\u4EE5\u7ED9\u6BCF\u4E2A\u9875\u9762\u6DFB\u52A0\u591A\u4E2A\u73BB\u7483\u6548\u679C\u7684\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u80CC\u666F\uFF0C\u7C7B\u4F3C\u8FD9\u6837\uFF1A`background: radial-gradient(circle, rgba(0, 242, 255, 0.1) 0%, rgba(0, 0, 0, 0) 70%);`\uFF0C\u91CC\u9762\u7684\u989C\u8272\u548C\u6E10\u53D8\u8303\u56F4\u53EF\u4EE5\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u8C03\u6574\u3002\n- \u80CC\u666F\u8272\u4E3A\u4E86\u589E\u5F3A\u5C42\u6B21\u611F\uFF0C\u6DFB\u52A0\u7684\u68A6\u5E7B\u6CE1\u6CE1\u6216\u8005\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u5143\u7D20\u7684div\uFF0C\u5FC5\u987B\u53EA\u80FD\u58F0\u660E\u4E3A`circle`\uFF0C\u5E76\u4E14\u4E00\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\uFF0C\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Abackground: radial-gradient(circle, rgba(0, 229, 255, 0.15) 0%, rgba(0, 0, 0, 0) 70%);\uFF0C\u5982\u679C\u9700\u8981\u591A\u4E2A`radial-gradient`\u5F84\u5411\u6E10\u53D8\u80CC\u666F\uFF0C\u6BCF\u4E2A\u5F84\u5411\u6E10\u53D8\u80CC\u666F\u90FD\u5FC5\u987B\u58F0\u660E\u4E3A\u4E00\u4E2Adiv\u8282\u70B9\uFF0C\u6BCF\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\u3002\n- \u6309\u94AE\u3001\u5361\u7247\u3001item\u9879\u7B49\u5143\u7D20\u5FC5\u987B\u8981\u6709\u4E00\u4E2Ahover\u540E\u6539\u53D8\u80CC\u666F\u8272\u7684\u53CD\u9988\u6548\u679C\uFF0C\u4E0D\u80FD\u4F7F\u7528transform\u6548\u679C\uFF0C\u53EA\u80FD\u4F7F\u7528\u80CC\u666F\u8272\u6548\u679C\u3002\n- css\u6837\u5F0F\u91CC\u9762\u7684`background-image`\u5C5E\u6027\u7684\u503C\u5FC5\u987B\u662F\u8FDC\u7A0B\u56FE\u7247\uFF0C\u4E0D\u80FD\u8BBE\u7F6E\u4E0D\u662F\u8FDC\u7A0B\u56FE\u7247\u7684\u4EFB\u4F55\u503C\uFF0C\u6BD4\u5982\u4E0D\u80FD\u8BBE\u7F6E'base64'\u3001\u6E10\u53D8'radial-gradient'\u7B49\u3002\n\n## \u4E09\u3001\u5FC5\u987B\u7ED9\u6BCF\u4E00\u4E2A\u8282\u70B9\u6DFB\u52A0id\u3001name\u3001nodeType\u5C5E\u6027\n- \u7279\u522B\u6CE8\u610F\uFF0C`i`\u548C`div`\u7B49\u6807\u7B7E\u4E5F\u5FC5\u987B\u6DFB\u52A0 id\u3001name\u3001nodeType \u5C5E\u6027\uFF0C\u6BCF\u4E00\u4E2A\u8282\u70B9\u90FD\u9700\u8981\u6DFB\u52A0\u8FD9\u4E09\u4E2A\u5C5E\u6027\uFF0C\u5343\u4E07\u522B\u6F0F\u6389\u4E86\uFF0C\u8FD9\u662F\u5FC5\u8981\u6761\u4EF6\n- id \u5C5E\u6027\u5FC5\u987B\u53EA\u80FD\u4F7F\u7528\u82F1\u6587\u6216\u6570\u5B57\u7EC4\u6210\uFF0C\u4E14\u4E0D\u80FD\u4EE5\u6570\u5B57\u5F00\u5934\uFF0C\u5E76\u4E14\u6574\u4E2A\u9875\u9762 id \u5C5E\u6027\u7684\u503C\u5FC5\u987B\u552F\u4E00\uFF0C\u4F7F\u7528\u9A7C\u5CF0\u7684\u547D\u540D\u65B9\u5F0F\n- name \u5C5E\u6027\u5FC5\u987B\u662F\u4E2D\u6587\u6216\u6570\u5B57\uFF0C\u5E76\u4E14\u4E0D\u80FD\u5305\u542B\u7279\u6B8A\u5B57\u7B26\n- \u5982\u679C\u662F\u901A\u8FC7\u70B9\u51FBitem\u9879\u5207\u6362\u5C55\u793A\u5185\u5BB9\u7684\uFF0C\u90A3\u4E48item\u9879\u7684nodeType\u5FC5\u987B\u662F`tabMenuBarItem`\uFF0Ctab panel\u7684nodeType\u5FC5\u987B\u662F`tabPanel`\uFF0C`tabMenuBarItem`\u7684\u7236\u4EB2\u5BB9\u5668\u662F`tabMenuBar`\uFF0C\u4E0D\u5F97\u4F7F\u7528`horizontalListView`\u6765\u4EE3\u66FF`tabMenuBar`\n- \u9875\u9762\u7684header\u6807\u9898\u680FnodeType\u5FC5\u987B\u662F`titleBar`\u6216\u8005`topNavigateBar`\uFF0C\u800C\u4E0D\u662F`container`\n- nodeType \u5C5E\u6027\u7684\u503C\u5FC5\u987B\u662F`\u7EC4\u4EF6\u7C7B\u578B\u679A\u4E3E (nodeType)\u679A\u4E3E` \u4E2D\u7684\u4E00\u4E2A\uFF0C\u4E00\u4E9B\u5E03\u5C40\u5BB9\u5668\u9700\u8981\u9075\u5B88\u4EE5\u4E0B\u8BF4\u660E\u6765\u9009\u62E9\u6B63\u786E\u7684nodeType\uFF1A\n - \u5217\u8868\u5BB9\u5668\uFF1A`verticalListView`\u3001`horizontalListView`\u3001`listItemCard`\uFF0C\u7528\u4E8E\u5E03\u5C40\u591A\u4E2A\u5217\u8868\u9879\uFF0C\u6BD4\u5982\uFF1A\u5546\u54C1\u5217\u8868\u3001\u5206\u7C7B\u5217\u8868\u3001\u6807\u7B7E\u5217\u8868\u7B49\uFF0C\u53EF\u4EE5\u652F\u6301\u591A\u884C\u591A\u5217\u7684\u5217\u8868\u5E03\u5C40\n - \u5217\u8868\u9875\u811A\u5BB9\u5668\uFF1A`listFooterContainer`\uFF0C\u7528\u4E8E\u5E03\u5C40\u5217\u8868\u7684\u9875\u811A\uFF0C\u6BD4\u5982\uFF1A\u52A0\u8F7D\u66F4\u591A\u3001\u6CA1\u6709\u66F4\u591A\u4E86\u7B49\n - \u7F51\u683C\u5BB9\u5668\uFF1AgridContainer\u7528\u4E8E\u5E03\u5C40\u591A\u4E2A\u7F51\u683C\u9879\uFF0C\u91CC\u9762\u5305\u542BN\u4E2AgridItem\uFF0C\u6BD4\u5982\uFF1A\u5206\u7C7B\u7F51\u683C\u5165\u53E3\n - \u6D41\u5F0F\u5BB9\u5668\uFF1A\u7528\u4E8E\u5E03\u5C40\u591A\u4E2A\u5B50\u9879\uFF0C\u5B50\u9879\u53EF\u4EE5\u5728\u4E00\u884C\u663E\u793A\uFF0C\u5F53\u4F4D\u7F6E\u4E0D\u591F\u65F6\u5C31\u6362\u884C\u663E\u793A\uFF0C\u6BD4\u5982\uFF1A\u4E00\u7EC4\u6807\u7B7Etag\u7684\u6392\u7248\u5E03\u5C40\n - \u591A\u72B6\u6001\u5BB9\u5668\uFF1A`multiStateContainer`, `oneStateContentContainer`\uFF0C\u7528\u4E8E\u4E0D\u662F\u901A\u8FC7\u4EA4\u4E92\uFF0C\u800C\u662F\u901A\u8FC7\u903B\u8F91\u72B6\u6001\u53D8\u91CF\u53D8\u5316\u800C\u663E\u793A\u4E0D\u540C\u72B6\u6001\u7684\u5185\u5BB9\u5BB9\u5668\uFF0C\u6BD4\u5982\uFF1A\u767B\u5F55\u72B6\u6001\u548C\u672A\u767B\u5F55\u72B6\u6001\u5206\u522B\u663E\u793A\u4E0D\u540C\u7684\u5185\u5BB9\u3002\n- \u9AD8\u7EA7\u7EC4\u4EF6\u8282\u70B9\u7684nodeType\u7ED3\u6784\u89C4\u5219\uFF1A\n - tab \u9009\u9879\u5361\uFF1A`tabMenuBar`\u662Ftab\u9009\u9879\u5361\u83DC\u5355\u680F\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`tabMenuBarItem`\uFF0C`tabPanelFather`\u662Ftab\u9009\u9879\u5361\u5185\u5BB9\u5BB9\u5668\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`tabPanel`\uFF0C`tabMenuBar`\u548C`tabPanelFather`\u5FC5\u987B\u540C\u65F6\u5B58\u5728\uFF0C`tabPanel`\u7684\u6570\u91CF\u5FC5\u987B\u548C`tabMenuBarItem`\u7684\u6570\u91CF\u76F8\u540C\n - viewPager \u8F6E\u64AD\uFF1A`viewPager`\u662F\u8F6E\u64AD\u5BB9\u5668\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`viewPagerItem`\uFF0C`viewPagerIndicatorContainer`\u662F\u8F6E\u64AD\u6307\u793A\u5668\u5BB9\u5668\uFF0C`viewPager`\u4E0E`viewPagerIndicatorContainer`\u5FC5\u987B\u540C\u65F6\u5B58\u5728\n - \u4E00\u884C\u4E0D\u591F\u4F4D\u7F6E\u663E\u793A\u5C31\u6362\u884C\u7684\u5BB9\u5668\uFF1A`inlineBlockAndWrap`\uFF0C\u91CC\u9762\u5305\u542BN\u4E2A`blockItem`\uFF0C`blockItem`\u662F\u5B83\u7684\u5B50\u9879\n - \u591A\u72B6\u6001\u5BB9\u5668\uFF1A\u4E00\u4E2A`multiStateContainer`\u591A\u72B6\u6001\u5BB9\u5668\u5305\u542B\u591A\u4E2A`oneStateContentContainer`\n\n- \u7EC4\u4EF6\u7C7B\u578B\u679A\u4E3E (nodeType)\u679A\u4E3E\uFF1A\n\n - \u5F62\u72B6\uFF1A`rect`, `circle`, `line`\n - \u57FA\u7840\u7EC4\u4EF6\uFF1A`text`\u3001`button`\u3001`input`\u3001`icon`\u3001`image`\n - \u57FA\u7840\u5BB9\u5668\uFF1A`container`\n - \u7F51\u683C\u5BB9\u5668\uFF1A`gridContainer`\u3001`gridItem`\n - \u6D41\u5F0F\u5BB9\u5668\uFF1A`inlineBlockAndWrap`\u3001`blockItem`\n - \u5F00\u5173\uFF1A`switch`\n - \u5355\u9009\uFF1A`radioGroup`\u3001`radio`\n - \u591A\u9009\uFF1A`checkBoxGroup`\u3001`checkBox`\n - \u9876\u90E8\u5BFC\u822A\u680F\uFF1A`titleBar`\u3001`topNavigateBar`\n - \u5E95\u90E8\u64CD\u4F5C\u680F\uFF1A`bottomOperateBar`\n - \u591A\u72B6\u6001\u5BB9\u5668\uFF1A`multiStateContainer`, `oneStateContentContainer`\n - \u5217\u8868\uFF1A`verticalListView`, `horizontalListView`, `listItemCard`\u3001`listFooterContainer`\n - \u8F6E\u64AD\uFF1A`viewPager`, `viewPagerItem`, `viewPagerIndicatorContainer`\n - tab \u9009\u9879\u5361\uFF1A`tabPanelFather`, `tabPanel`, `tabMenuBar`, `tabMenuBarItem`\n - \u5E95\u90E8\u5BFC\u822A: `bottomTabContentContainer`, `subPage`, `bottomTabNavigateBar`, `bottomTabNavigateBarItem`\n - \u5BF9\u8BDD\u6846\uFF1A`dialogOverlay`, `dialogContent`\n - toast \u63D0\u793A\uFF1A`toast`\n - \u4E0B\u62C9\u83DC\u5355\uFF1A`dropDownMenu`\n - \u4FA7\u6ED1\u9762\u677F\uFF1A`sideSlidePanel`\n - \u624B\u673A\u786C\u4EF6\u5143\u7D20\uFF1A`phoneTopStatusBar`\u3001`phoneBottomIndicatorBar`\uFF0C\u8FD9\u4E24\u4E2A\u5143\u7D20\u662F\u624B\u673A\u786C\u4EF6\u81EA\u5E26\u7684\u5143\u7D20\uFF0C\u4E0D\u80FD\u5728\u9875\u9762\u4E2D\u6DFB\u52A0\u3002\n\n## \u56DB\u3001\u8F6E\u64AD\u4E0ETabs\u7EC4\u4EF6\u7684\u89C4\u5219\n- \u8F6E\u64AD\u7684\u6BCF\u4E00\u4E2ASlide\u548CTabs\u9009\u9879\u5361\u7EC4\u4EF6\u6BCF\u4E00\u4E2ATab Panel\u90FD\u5FC5\u987B\u4F7F\u7528`display: none`\u548C`display: block/flex`\u6765\u5B9E\u73B0\u9690\u85CF\u548C\u663E\u793A\u7684\u4E92\u65A5\u5207\u6362\n- \u8F6E\u64AD\u7684\u6BCF\u4E00\u4E2ASlide\u5FC5\u987B\u6709html\u4EE3\u7801\u5B9E\u73B0\uFF0C\u4E0D\u5F97\u53EA\u5199\u7B2C1\u4E2ASlide\u7684html\u4EE3\u7801\uFF0C\u5176\u4ED6Slide\u7684html\u4EE3\u7801\u4E5F\u5FC5\u987B\u8981\u5199\u3002\n- Tabs\u9009\u9879\u5361\u7EC4\u4EF6\u9700\u8981\u6DFB\u52A0\u70B9\u51FB\u5207\u6362Tab Panel\u7684\u529F\u80FD\uFF0C\u4E0D\u5F97\u53EA\u5199\u7B2C1\u4E2ATab Panel\u7684html\u4EE3\u7801\uFF0C\u5176\u4ED6Tab Panel\u7684html\u4EE3\u7801\u4E5F\u5FC5\u987B\u8981\u5199\u3002\n- Tabs\u9009\u9879\u5361\u7EC4\u4EF6\u6BCF\u4E00\u4E2ATab Panel\u90FD\u5FC5\u987B\u8981\u6709\u5185\u5BB9\uFF0C\u4E0D\u5F97\u6577\u884D\u5730\u5C55\u793A\u6CA1\u6709\u6570\u636E\u3001\u8054\u7F51\u5931\u8D25\u3001loading\u7684\u60C5\u51B5\uFF0C\u5FC5\u987B\u5C55\u793A\u6709\u6570\u636E\u7684\u5177\u4F53\u5185\u5BB9\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5077\u61D2\u6577\u884D\u3002\n- Tabs\u9009\u9879\u5361\u7EC4\u4EF6\u6BCF\u4E00\u4E2ATab Panel\u90FD\u5FC5\u987B\u8981\u6709html\u4EE3\u7801\u5B9E\u73B0\uFF0C\u4E0D\u5F97\u53EA\u5199\u7B2C1\u4E2ATab Panel\u7684html\u4EE3\u7801\uFF0C\u5176\u4ED6Tab Panel\u7684html\u4EE3\u7801\u4E5F\u5FC5\u987B\u8981\u5199\u3002\n\n## \u4E94\u3001\u56FE\u6807\u4E0E\u56FE\u7247\u7684\u89C4\u5219\n- \u5F53\u9700\u8981icon\u56FE\u6807\u65F6\u5FC5\u987B\u4F7F\u7528FontAwesome\u56FE\u6807\uFF0C\u6BD4\u5982\uFF1A`<i name=\"\u5FAE\u4FE1Icon\" vtype=\"icon\" id=\"wxIcon\" class=\"fab fa-weixin\"></i>`\uFF0C\u5E76\u4E14\u6CE8\u610F\u56FE\u6807\u7684\u989C\u8272\uFF0C\u6BD4\u5982\u5FAE\u4FE1\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u7EFF\u8272\u7CFB\uFF0CQQ\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u84DD\u8272\u7CFB\uFF0C\u5FAE\u535A\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u7EA2\u8272\u7CFB\uFF0C\u652F\u4ED8\u5B9D\u56FE\u6807\u4E00\u822C\u4F7F\u7528\u6D45\u84DD\u8272\u7CFB\u7B49\u7B49\n- \u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528 emoji \u8868\u60C5\u7B26\u53F7\uFF0C\u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55 emoji \u8868\u60C5\u7B26\u53F7\uFF0C\u8BF7\u4F7F\u7528FontAwesome\u5B57\u4F53\u56FE\u6807\u6765\u4EE3\u66FF\u3002\n- LOGO\u56FE\u7247\u548C\u5F15\u5BFC\u9875\u7684\u5F15\u5BFC\u56FE\u7247\u5FC5\u987B\u4F7F\u7528`doc/res/svgMap.json`\u6587\u4EF6\u4E2Djson\u5BF9\u8C61\u6B63\u786E\u5B57\u6BB5\u7684https\u94FE\u63A5\u503C\uFF0C\u7981\u6B62\u4F7F\u7528\u672C\u5730\u56FE\u7247\u8DEF\u5F84`doc/res/logo.svg`\u6587\u4EF6\uFF0C\u800C\u662F\u4F7F\u7528\u7C7B\u4F3C\uFF1A`https://editor.bytefungo.com/dfile/img/xxxxx.svg`\u8FD9\u6837\u7684\u56FE\u7247\u94FE\u63A5\u5730\u5740\uFF0C\u6BD4\u5982\u95EA\u5C4F\u9875\u3001\u767B\u5F55\u9875\u3001\u6CE8\u518C\u9875\u7528\u5230\u7684LOGO\u56FE\u7247\uFF0C\u5F15\u5BFC\u9875\u7684\u5F15\u5BFC\u56FE\u7247\u7B49\u3002\n- jpg\u3001jpeg\u7C7B\u578B\u56FE\u7247\u5FC5\u987B\u4F7F\u7528\u56FE\u7247\u5730\u5740\uFF1A`https://oss.bytefungo.com/f1/showImg1.jpg`)\uFF0C\u5176\u4E2D\u7ED3\u5C3E\u7684\u2019showImg1'\u53EF\u4EE5\u6362\u4E3A\u4ECE 1 \u5230 30 \u7684\u6570\u5B57\uFF0C1~30 \u7684\u6570\u5B57\u5FC5\u987B\u968F\u673A\u6311\u9009\uFF0C\u4E0D\u5F97\u6BCF\u4E2A\u9875\u9762\u6BCF\u4E2A\u56FE\u7247\u90FD\u4F7F\u7528\u540C\u4E00\u4E2A\u6570\u5B57\u3002\u5199\u6CD5\u6BD4\u5982\uFF1A`<img src=\"https://oss.bytefungo.com/f1/showImg17.jpg\" alt=\"xxx\" class=\"xxx\" nodeType=\"image\">`\n\n## \u516D\u3001\u9996\u9875\u4E3B\u4F53\u9875\u4E0E\u5B50\u9875\u9762\u7684\u89C4\u5219\n- \u9996\u9875\u4E3B\u4F53\u9875\u5D4C\u5957\u4E86\u591A\u4E2A\u5B50\u9875\u9762\uFF0C\u6BCF\u4E00\u4E2A\u5B50\u9875\u9762\u90FD\u4E0D\u9700\u8981\u586B\u5145\u5185\u5BB9\uFF0C\u7A7A\u767D\u5C31\u884C\uFF0C\u540E\u9762\u4F1A\u6709\u4E13\u95E8\u7684\u4EFB\u52A1\u6765\u8BBE\u8BA1\u5177\u4F53\u7684\u5B50\u9875\u9762\u3002\n- \u4EFB\u4F55\u5B50\u9875\u9762\u90FD\u5FC5\u987B\u7981\u6B62\u6DFB\u52A0\u5E95\u90E8\u5BFC\u822A\u680F\u8282\u70B9\u5230\u9875\u9762\uFF0C\u56E0\u4E3A\u5B50\u9875\u9762\u662F\u5D4C\u5957\u5728\u9996\u9875\u4E3B\u4F53\u9875\u4E2D\u7684\uFF0C\u7236\u9875\u9762\u5DF2\u7ECF\u6709\u5E95\u90E8\u5BFC\u822A\u680F\u4E86\uFF0C\u5B50\u9875\u9762\u4E0D\u9700\u8981\u518D\u6DFB\u52A0\u5E95\u90E8\u5BFC\u822A\u680F\uFF0C\u4E5F\u4E0D\u5F97\u6DFB\u52A0\u4E8C\u7EA7\u9875\u9762\u7684\u6807\u9898\u680F\u5230\u5B50\u9875\u9762\u4E2D\uFF0C\u56E0\u4E3A\u5B50\u9875\u9762\u662F\u5D4C\u5957\u5728\u9996\u9875\u4E3B\u4F53\u9875\u4E2D\u7684\uFF0C\u9996\u9875\u4E3B\u4F53\u9875\u548C\u5B83\u7684\u5B50\u9875\u9762\u90FD\u662F\u4E00\u7EA7\u9875\u9762\uFF0C\u56E0\u6B64\u4E0D\u5F97\u6DFB\u52A0\u4E8C\u7EA7\u9875\u9762\u7684\u6807\u9898\u680F\u5230\u5B50\u9875\u9762\u4E2D\u3002\n\n## \u4E03\u3001\u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u8BE5\u9875\u9762\u8BBE\u8BA1\u9700\u6C42\uFF0C\u90A3\u5C31\u6309\u7167\u4EE5\u4E0B\u9875\u9762\u9ED8\u8BA4\u89C4\u5219\u8BBE\u8BA1\n- \u95EA\u5C4F\u9875\uFF1A\u7981\u6B62\u4F7F\u7528\u5168\u5C4F\u56FE\u7247\uFF0C\u4E00\u822C\u4F7F\u7528\u4E3B\u9898\u76F8\u5173\u7684\u6E10\u53D8\u8272\uFF0C\u7136\u540E\u5E26\u6709\u4E00\u4E9B\u989D\u5916\u7684\u80CC\u666F\u5143\u7D20\u589E\u5F3A\u754C\u9762\u5C42\u6B21\u611F\uFF0C\u6BD4\u5982\uFF1A\u68A6\u5E7B\u5706\u5708\u6CE1\u6CE1\u3001\u73BB\u7483\u6548\u679C\u7684\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u7B49\u7B49\u5143\u7D20\n- \u5F15\u5BFC\u9875\uFF1A\u5C3D\u91CF\u4E0D\u4F7F\u7528\u5168\u5C4F\u56FE\u7247\uFF0C\u4E00\u822C\u6BCF\u4E00\u9875\u5F15\u5BFC\u9875\u80CC\u666F\u8272\u4E5F\u53EF\u4EE5\u6E10\u53D8\uFF0C\u7136\u540E\u6BCF\u4E00\u9875\u529F\u80FD\u8BF4\u660E\u4E00\u822C\u6709\u975E\u5168\u5C4F\u56FE\u7247\u3001\u6807\u9898\u3001\u526F\u6807\u9898\u7B49\u7B49\uFF0C\u4F60\u53EF\u4EE5\u5E26\u5165\u5176\u4ED6\u5143\u7D20\uFF0C\u8BA9\u9875\u9762\u66F4\u52A0\u7F8E\u89C2\uFF0C\u5E76\u4E14\u5F15\u5BFC\u9875\u7684\u5F15\u5BFC\u56FE\u7247\u9700\u8981\u81EA\u5DF1\u7ED8\u5236svg\u56FE\u7247\uFF0C\u5E76\u5B58\u653E\u5728`doc/res`\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u5E76\u5728html\u4E2D\u4F7F\u7528\n- \u80CC\u666F\u8272\u4E3A\u4E86\u589E\u5F3A\u5C42\u6B21\u611F\uFF0C\u6DFB\u52A0\u7684\u68A6\u5E7B\u6CE1\u6CE1\u6216\u8005\u5706\u5F62\u5F84\u5411\u6E10\u53D8\u5143\u7D20\u7684div\uFF0C\u5FC5\u987B\u53EA\u80FD\u58F0\u660E\u4E3A`circle`\uFF0C\u5E76\u4E14\u4E00\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\uFF0C\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Abackground: radial-gradient(circle, rgba(0, 229, 255, 0.15) 0%, rgba(0, 0, 0, 0) 70%);\uFF0C\u5982\u679C\u9700\u8981\u591A\u4E2A`radial-gradient`\u5F84\u5411\u6E10\u53D8\u80CC\u666F\uFF0C\u6BCF\u4E2A\u5F84\u5411\u6E10\u53D8\u80CC\u666F\u90FD\u5FC5\u987B\u58F0\u660E\u4E3A\u4E00\u4E2Adiv\u8282\u70B9\uFF0C\u6BCF\u4E2Adiv\u7684`background:`\u53EA\u80FD\u58F0\u660E\u4E00\u4E2A`radial-gradient`\u3002\n";
2
2
  //# sourceMappingURL=uiDesign.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uiDesign.d.ts","sourceRoot":"","sources":["../src/uiDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,0poBA6GlC,CAAA"}
1
+ {"version":3,"file":"uiDesign.d.ts","sourceRoot":"","sources":["../src/uiDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,88oBA8GlC,CAAA"}
package/build/uiDesign.js CHANGED
@@ -44,6 +44,7 @@ export const uiDesignPromptTemplate = `# UI设计规则,特别注意必须使
44
44
  - 如果主题风格是暗黑风格的话,默认可以给每个页面添加多个玻璃效果的圆形径向渐变背景,类似这样:\`background: radial-gradient(circle, rgba(0, 242, 255, 0.1) 0%, rgba(0, 0, 0, 0) 70%);\`,里面的颜色和渐变范围可以根据实际情况调整。
45
45
  - 背景色为了增强层次感,添加的梦幻泡泡或者圆形径向渐变元素的div,必须只能声明为\`circle\`,并且一个div的\`background:\`只能声明一个\`radial-gradient\`,比如正确的写法:background: radial-gradient(circle, rgba(0, 229, 255, 0.15) 0%, rgba(0, 0, 0, 0) 70%);,如果需要多个\`radial-gradient\`径向渐变背景,每个径向渐变背景都必须声明为一个div节点,每个div的\`background:\`只能声明一个\`radial-gradient\`。
46
46
  - 按钮、卡片、item项等元素必须要有一个hover后改变背景色的反馈效果,不能使用transform效果,只能使用背景色效果。
47
+ - css样式里面的\`background-image\`属性的值必须是远程图片,不能设置不是远程图片的任何值,比如不能设置'base64'、渐变'radial-gradient'等。
47
48
 
48
49
  ## 三、必须给每一个节点添加id、name、nodeType属性
49
50
  - 特别注意,\`i\`和\`div\`等标签也必须添加 id、name、nodeType 属性,每一个节点都需要添加这三个属性,千万别漏掉了,这是必要条件
@@ -108,4 +109,4 @@ export const uiDesignPromptTemplate = `# UI设计规则,特别注意必须使
108
109
  - 引导页:尽量不使用全屏图片,一般每一页引导页背景色也可以渐变,然后每一页功能说明一般有非全屏图片、标题、副标题等等,你可以带入其他元素,让页面更加美观,并且引导页的引导图片需要自己绘制svg图片,并存放在\`doc/res\`文件夹下面,并在html中使用
109
110
  - 背景色为了增强层次感,添加的梦幻泡泡或者圆形径向渐变元素的div,必须只能声明为\`circle\`,并且一个div的\`background:\`只能声明一个\`radial-gradient\`,比如正确的写法:background: radial-gradient(circle, rgba(0, 229, 255, 0.15) 0%, rgba(0, 0, 0, 0) 70%);,如果需要多个\`radial-gradient\`径向渐变背景,每个径向渐变背景都必须声明为一个div节点,每个div的\`background:\`只能声明一个\`radial-gradient\`。
110
111
  `;
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdWlEZXNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2R3JDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdWlEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIFVJ6K6+6K6h6KeE5YiZ77yM54m55Yir5rOo5oSP5b+F6aG75L2/55SoVUnop4TojINcXGAuYnl0ZWZ1bi9VSeiuvuiuoeinhOiMgy5tZFxcYOmHjOmdoum7mOiupOeahOS4u+mimOearuiCpOadpeiuvuiuoe+8jOS4jeW+l+S9v+eUqOWFtuS7luS4u+mimOearuiCpOOAglxuXG4jIyDkuIDjgIHnpoHmraLnmoTkuovmg4Vcbi0g56aB5q2i5L2/55So5Lu75L2V5YmN56uv5qGG5p6277yM5Y+q5L2/55SoIGh0bWwr57G76YCJ5oup5Zmo5qC35byPK2pzIOadpeWunueOsOOAglxuLSDnpoHmraLkvb/nlKhqc+S7o+eggeadpeaLvOaOpWh0bWzlrZfnrKbkuLLvvIzlv4XpobvlnKhib2R55qCH562+6YeM6Z2i55u05o6l5YaZaHRtbOS7o+eggeOAglxuLSDnpoHmraLkvb/nlKhqc+S7o+eggeadpeWjsOaYjuS7u+S9lemhtemdouaYvuekuuaJgOmcgOeahOaVsOaNru+8jOaJgOacieaVsOaNrumDveW/hemhu+WcqGh0bWzku6PnoIHkuK3nm7TmjqXlhpnmrbvjgIJcbi0g56aB5q2i5L2/55So5paH5pys5riQ5Y+Y6Imy77yM5b+F6aG75L2/55So57qv6Imy5paH5pys77yM5Lmf5bCx5piv56aB5q2i5L2/55SoXFxgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3JcXGDlsZ7mgKfjgIJcbi0g56aB5q2i57uZ6aG16Z2i5re75YqgXFxg5omL5py66aG26YOo54q25oCB5qCPXFxg44CBXFxg5omL5py65bqV6YOo5oyH56S65Zmo5qCPXFxg5Lik5Liq6Z2e6aG16Z2i5YaF5a6555qE5YWD57Sg6IqC54K577yM6L+Z5piv5omL5py656Gs5Lu26Ieq5bim55qE5YWD57Sg77yM5LiN6IO95Zyo6aG16Z2i5Lit5re75Yqg44CCXG4tIOemgeatouS9v+eUqFxcYDpiZWZvcmVcXGDjgIFcXGA6YWZ0ZXJcXGDkvKrlhYPntKDvvIzlv4Xpobvkvb/nlKjlhbbku5bmoIfnrb7mnaXlrp7njrDjgIJcbi0g56aB5q2i5L2/55So5aSa5LiqcOagh+etvuaIluWkmuS4quWFtuS7luagh+etvuadpeaYvuekuuS4gOS4quS7jue9kee7nOaIluWFtuS7luWcsOaWueaLieWPluWbnuadpeeahOmVv+aWh+acrO+8jOW/hemhu+WPquiDveS9v+eUqOS4gOS4quagh+etvuadpeaYvuekuu+8jOavlOWmgu+8mmRpduOAgXNwYW7nrYnvvIzlm6DkuLrnvZHnu5zmi4nlj5blm57mnaXnmoTplb/mlofmnKzmmK/kuIDkuKrmlofmnKzvvIzml6Dms5Xkvb/nlKjlpJrkuKrmoIfnrb7mnaXmmL7npLrkuIDkuKrmlofmnKzvvIzlv4Xpobvlj6rog73kvb/nlKjkuIDkuKrmoIfnrb7mnaXmmL7npLrjgIJcbi0gbG9hZGluZ+iKgueCueeahOWunueOsOemgeatouS9v+eUqGRpduagh+etvuS4jui+ueahhuWxnuaAp+WunueOsO+8jOW/hemhu+S9v+eUqOWbvuagh2ljb27nmoRp5qCH562+5p2l5a6e546wbG9hZGluZ+eahOiKgueCuVxuLSDnpoHmraLkuLpodG1s5qCH562+6IqC54K55re75Yqg5Yqo55S75oiW6L+H5rih5pWI5p6c77yM6aG16Z2i6K6+6K6h5LiN6ZyA6KaB5Lu75L2V5Yqo55S75ZKM6L+H5rih5pWI5p6c77yM5q+U5aaC56aB5q2i77yaQGtleWZyYW1lc+OAgXRyYW5zaXRpb27jgIFhbmltYXRpb24g562J44CCXG4tIOaMiemSruOAgeWNoeeJh+OAgWl0ZW3pobnnrYnlhYPntKDlv4XpobvopoHmnIlob3ZlcuS4jueCueWHu+WPjemmiO+8jOeCueWHu+WPjemmiOW/hemhu+S9v+eUqOa1heiJsueahOiDjOaZr+iJsmJhY2tncm91bmTmnaXlj43ppojlsLHooYzvvIzkuKXnpoHkvb/nlKh0cmFuc2Zvcm3mlYjmnpxcbiAgICAtIOKdjCDplJnor6/nmoTnlKjms5XvvJogXG4gICAgXFxgXFxgXFxgIGNzc1xuICAgIC5ob3Qtc2FsZXMtaXRlbTpob3ZlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCguLi5weCk7XG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4pyFIOato+ehrueahOeUqOazle+8mlxuICAgIFxcYFxcYFxcYCBjc3NcbiAgICAuaG90LXNhbGVzLWl0ZW06aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAuLi47XG4gICAgfVxuICAgIFxcYFxcYFxcYFxuLSDnpoHmraLkvb/nlKhkaXbmoIfnrb7mnaXlrp7njrBpbWFnZeWbvueJh++8jOW/hemhu+imgeS9v+eUqGltZ+agh+etvuadpeWunueOsOWbvueJh+iKgueCue+8jGltZ+agh+etvueahHNyY+WxnuaAp+W/hemhu+iuvue9ruS4uu+8mlxcYGh0dHBzOi8vb3NzLmJ5dGVmdW5nby5jb20vZjEvc2hvd0ltZzEuanBnXFxg77yM5YW25Lit6YeM6Z2i55qEXFxgc2hvd0ltZzFcXGDlj6/ku6XmlLnkuLoxfjMw55qE5Lu75oSP5LiA5Liq5pWw5a2X77yM5q+U5aaC77yaXFxgc2hvd0ltZzVcXGDjgIJcbiAgLSDinYzplJnor6/nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgaHRtbFxuICAgIDxkaXYgY2xhc3M9XCJiZXN0c2VsbGVyLWNvdmVyXCIgaWQ9XCJiZXN0c2VsbGVyQ292ZXIxXCIgbmFtZT1cIueVhemUgOS5puexjeWwgemdojFcIiBub2RlVHlwZT1cImltYWdlXCI+XG4gICAgPC9kaXY+XG4gICAgXFxgXFxgXFxgXG4gIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCBodG1sXG4gICAgPGltZyBjbGFzcz1cImJlc3RzZWxsZXItY292ZXJcIiBpZD1cImJlc3RzZWxsZXJDb3ZlcjFcIiBuYW1lPVwi55WF6ZSA5Lmm57GN5bCB6Z2iMVwiIG5vZGVUeXBlPVwiaW1hZ2VcIiBzcmM9XCJodHRwczovL29zcy5ieXRlZnVuZ28uY29tL2YxL3Nob3dJbWc3LmpwZ1wiPiAgXG4gICAgXFxgXFxgXFxgXG5cbiMjIOS6jOOAgeagt+W8j+inhOWImVxuLSDmoLflvI/ku6PnoIHlv4Xpobvkvb/nlKjnsbvpgInmi6nlmajmoLflvI9DbGFzcy1iYXNlZCBTdHlsZSAvIENsYXNzIFNlbGVjdG9yIFN0eWxl5pa55byP77yM5LiN5b6X5L2/55So6KGM5YaF5qC35byPSW5saW5lIFN0eWxl5oiW5aSW6YOo5paH5Lu244CCXG4tIOmBteW+quaJi+acuuWwuuWvuOinhOagvCjlrr3luqYgMzkzcHgg6auY5bqmIDgwOHB4KVxuLSDpppbpobUv5o6o6I2QdGFi55qE5YiG57G7L+WKn+iDveWQhOS4quWFpeWPo+eahOWbvuagh+S4gOiIrOmcgOimgeS9v+eUqOS4jeS4gOagt+eahOminOiJsu+8jOW+iOWwkeS8mue7n+S4gOWFqOmDqOS9v+eUqOWTgeeJjOS4u+mimOiJslxuLSDmiYDmnIlyYWRpb+OAgWNoZWNrQm946YO95b+F6aG75L2/55Soaeagh+etvuiuvue9rkZvbnRBd2Vzb21l5Zu+5qCH5p2l5a6e546w77yM5LiN5b6X5L2/55So57O757uf55qEaW5wdXTmoIfnrb7lrp7njrDjgIJcbi0g5aaC55So5oi35rKh5pyJ5piO56Gu5o+P6L+w6K+05piO6aG16Z2i6IOM5pmv6Imy77yM5Y+q5pyJ6Zeq5bGP6aG16Z2i55qE6IOM5pmv6Imy5YWB6K646K6+572u5ZOB54mM5Li76Imy5oiW5ZOB54mM5Li76Imy5LiO5ZOB54mM5qyh6Imy55qE5riQ5Y+Y6Imy77yM5YW25LuW6aG16Z2i5b+F6aG75L2/55So6Z2eIOWTgeeJjOS4u+iJsiDkuI7pnZ4g5ZOB54mM5qyh6ImyIOeahOe6r+iJsuWBmumhtemdouiDjOaZr+iJsu+8jOavlOWmguS4gOiIrOS9v+eUqOeZveiJsuezu++8jOWmguaenOaYr+aal+m7kemjjumCo+WwseaYr+m7keiJsuezu+OAglxuLSDovpPlhaXmoYZcXGBpbnB1dFxcYOWmguaenOmcgOimgeWxleekuuaWh+WtlyBsYWJlbO+8jOWwvemHj+S9v+eUqCBpY29uIOS7o+abv+aWh+WtlyBsYWJlbO+8jOW5tuS4lCBpY29uIOmHjeWPoOWcqOi+k+WFpeahhueahOW3puS+p++8jOi/meagt+aVtOS4qumhtemdoueahOepuumXtOWIqeeUqOeOh+mrmOOAglxuLSDlpoLmnpzkuLvpopjpo47moLzmmK/mmpfpu5Hpo47moLznmoTor53vvIzpu5jorqTlj6/ku6Xnu5nmr4/kuKrpobXpnaLmt7vliqDlpJrkuKrnjrvnkoPmlYjmnpznmoTlnIblvaLlvoTlkJHmuJDlj5jog4zmma/vvIznsbvkvLzov5nmoLfvvJpcXGBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDAsIDI0MiwgMjU1LCAwLjEpIDAlLCByZ2JhKDAsIDAsIDAsIDApIDcwJSk7XFxg77yM6YeM6Z2i55qE6aKc6Imy5ZKM5riQ5Y+Y6IyD5Zu05Y+v5Lul5qC55o2u5a6e6ZmF5oOF5Ya16LCD5pW044CCXG4tIOiDjOaZr+iJsuS4uuS6huWinuW8uuWxguasoeaEn++8jOa3u+WKoOeahOaipuW5u+azoeazoeaIluiAheWchuW9ouW+hOWQkea4kOWPmOWFg+e0oOeahGRpdu+8jOW/hemhu+WPquiDveWjsOaYjuS4ulxcYGNpcmNsZVxcYO+8jOW5tuS4lOS4gOS4qmRpdueahFxcYGJhY2tncm91bmQ6XFxg5Y+q6IO95aOw5piO5LiA5LiqXFxgcmFkaWFsLWdyYWRpZW50XFxg77yM5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgwLCAyMjksIDI1NSwgMC4xNSkgMCUsIHJnYmEoMCwgMCwgMCwgMCkgNzAlKTvvvIzlpoLmnpzpnIDopoHlpJrkuKpcXGByYWRpYWwtZ3JhZGllbnRcXGDlvoTlkJHmuJDlj5jog4zmma/vvIzmr4/kuKrlvoTlkJHmuJDlj5jog4zmma/pg73lv4Xpobvlo7DmmI7kuLrkuIDkuKpkaXboioLngrnvvIzmr4/kuKpkaXbnmoRcXGBiYWNrZ3JvdW5kOlxcYOWPquiDveWjsOaYjuS4gOS4qlxcYHJhZGlhbC1ncmFkaWVudFxcYOOAglxuLSDmjInpkq7jgIHljaHniYfjgIFpdGVt6aG5562J5YWD57Sg5b+F6aG76KaB5pyJ5LiA5LiqaG92ZXLlkI7mlLnlj5jog4zmma/oibLnmoTlj43ppojmlYjmnpzvvIzkuI3og73kvb/nlKh0cmFuc2Zvcm3mlYjmnpzvvIzlj6rog73kvb/nlKjog4zmma/oibLmlYjmnpzjgIJcblxuIyMg5LiJ44CB5b+F6aG757uZ5q+P5LiA5Liq6IqC54K55re75YqgaWTjgIFuYW1l44CBbm9kZVR5cGXlsZ7mgKdcbi0g54m55Yir5rOo5oSP77yMXFxgaVxcYOWSjFxcYGRpdlxcYOetieagh+etvuS5n+W/hemhu+a3u+WKoCBpZOOAgW5hbWXjgIFub2RlVHlwZSDlsZ7mgKfvvIzmr4/kuIDkuKroioLngrnpg73pnIDopoHmt7vliqDov5nkuInkuKrlsZ7mgKfvvIzljYPkuIfliKvmvI/mjonkuobvvIzov5nmmK/lv4XopoHmnaHku7Zcbi0gaWQg5bGe5oCn5b+F6aG75Y+q6IO95L2/55So6Iux5paH5oiW5pWw5a2X57uE5oiQ77yM5LiU5LiN6IO95Lul5pWw5a2X5byA5aS077yM5bm25LiU5pW05Liq6aG16Z2iIGlkIOWxnuaAp+eahOWAvOW/hemhu+WUr+S4gO+8jOS9v+eUqOmpvOWzsOeahOWRveWQjeaWueW8j1xuLSBuYW1lIOWxnuaAp+W/hemhu+aYr+S4reaWh+aIluaVsOWtl++8jOW5tuS4lOS4jeiDveWMheWQq+eJueauiuWtl+esplxuLSDlpoLmnpzmmK/pgJrov4fngrnlh7tpdGVt6aG55YiH5o2i5bGV56S65YaF5a6555qE77yM6YKj5LmIaXRlbemhueeahG5vZGVUeXBl5b+F6aG75pivXFxgdGFiTWVudUJhckl0ZW1cXGDvvIx0YWIgcGFuZWznmoRub2RlVHlwZeW/hemhu+aYr1xcYHRhYlBhbmVsXFxg77yMXFxgdGFiTWVudUJhckl0ZW1cXGDnmoTniLbkurLlrrnlmajmmK9cXGB0YWJNZW51QmFyXFxg77yM5LiN5b6X5L2/55SoXFxgaG9yaXpvbnRhbExpc3RWaWV3XFxg5p2l5Luj5pu/XFxgdGFiTWVudUJhclxcYFxuLSDpobXpnaLnmoRoZWFkZXLmoIfpopjmoI9ub2RlVHlwZeW/hemhu+aYr1xcYHRpdGxlQmFyXFxg5oiW6ICFXFxgdG9wTmF2aWdhdGVCYXJcXGDvvIzogIzkuI3mmK9cXGBjb250YWluZXJcXGBcbi0gbm9kZVR5cGUg5bGe5oCn55qE5YC85b+F6aG75pivXFxg57uE5Lu257G75Z6L5p6a5Li+IChub2RlVHlwZSnmnprkuL5cXGAg5Lit55qE5LiA5Liq77yM5LiA5Lqb5biD5bGA5a655Zmo6ZyA6KaB6YG15a6I5Lul5LiL6K+05piO5p2l6YCJ5oup5q2j56Gu55qEbm9kZVR5cGXvvJpcbiAgLSDliJfooajlrrnlmajvvJpcXGB2ZXJ0aWNhbExpc3RWaWV3XFxg44CBXFxgaG9yaXpvbnRhbExpc3RWaWV3XFxg44CBXFxgbGlzdEl0ZW1DYXJkXFxg77yM55So5LqO5biD5bGA5aSa5Liq5YiX6KGo6aG577yM5q+U5aaC77ya5ZWG5ZOB5YiX6KGo44CB5YiG57G75YiX6KGo44CB5qCH562+5YiX6KGo562J77yM5Y+v5Lul5pSv5oyB5aSa6KGM5aSa5YiX55qE5YiX6KGo5biD5bGAXG4gIC0g5YiX6KGo6aG16ISa5a655Zmo77yaXFxgbGlzdEZvb3RlckNvbnRhaW5lclxcYO+8jOeUqOS6juW4g+WxgOWIl+ihqOeahOmhteiEmu+8jOavlOWmgu+8muWKoOi9veabtOWkmuOAgeayoeacieabtOWkmuS6huetiVxuICAtIOe9keagvOWuueWZqO+8mmdyaWRDb250YWluZXLnlKjkuo7luIPlsYDlpJrkuKrnvZHmoLzpobnvvIzph4zpnaLljIXlkKtO5LiqZ3JpZEl0ZW3vvIzmr5TlpoLvvJrliIbnsbvnvZHmoLzlhaXlj6NcbiAgLSDmtYHlvI/lrrnlmajvvJrnlKjkuo7luIPlsYDlpJrkuKrlrZDpobnvvIzlrZDpobnlj6/ku6XlnKjkuIDooYzmmL7npLrvvIzlvZPkvY3nva7kuI3lpJ/ml7blsLHmjaLooYzmmL7npLrvvIzmr5TlpoLvvJrkuIDnu4TmoIfnrb50YWfnmoTmjpLniYjluIPlsYBcbiAgLSDlpJrnirbmgIHlrrnlmajvvJpcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxgLCBcXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDvvIznlKjkuo7kuI3mmK/pgJrov4fkuqTkupLvvIzogIzmmK/pgJrov4fpgLvovpHnirbmgIHlj5jph4/lj5jljJbogIzmmL7npLrkuI3lkIznirbmgIHnmoTlhoXlrrnlrrnlmajvvIzmr5TlpoLvvJrnmbvlvZXnirbmgIHlkozmnKrnmbvlvZXnirbmgIHliIbliKvmmL7npLrkuI3lkIznmoTlhoXlrrnjgIJcbi0g6auY57qn57uE5Lu26IqC54K555qEbm9kZVR5cGXnu5PmnoTop4TliJnvvJpcbiAgLSB0YWIg6YCJ6aG55Y2h77yaXFxgdGFiTWVudUJhclxcYOaYr3RhYumAiemhueWNoeiPnOWNleagj++8jOmHjOmdouWMheWQq07kuKpcXGB0YWJNZW51QmFySXRlbVxcYO+8jFxcYHRhYlBhbmVsRmF0aGVyXFxg5pivdGFi6YCJ6aG55Y2h5YaF5a655a655Zmo77yM6YeM6Z2i5YyF5ZCrTuS4qlxcYHRhYlBhbmVsXFxg77yMXFxgdGFiTWVudUJhclxcYOWSjFxcYHRhYlBhbmVsRmF0aGVyXFxg5b+F6aG75ZCM5pe25a2Y5Zyo77yMXFxgdGFiUGFuZWxcXGDnmoTmlbDph4/lv4XpobvlkoxcXGB0YWJNZW51QmFySXRlbVxcYOeahOaVsOmHj+ebuOWQjFxuICAtIHZpZXdQYWdlciDova7mkq3vvJpcXGB2aWV3UGFnZXJcXGDmmK/ova7mkq3lrrnlmajvvIzph4zpnaLljIXlkKtO5LiqXFxgdmlld1BhZ2VySXRlbVxcYO+8jFxcYHZpZXdQYWdlckluZGljYXRvckNvbnRhaW5lclxcYOaYr+i9ruaSreaMh+ekuuWZqOWuueWZqO+8jFxcYHZpZXdQYWdlclxcYOS4jlxcYHZpZXdQYWdlckluZGljYXRvckNvbnRhaW5lclxcYOW/hemhu+WQjOaXtuWtmOWcqFxuICAtIOS4gOihjOS4jeWkn+S9jee9ruaYvuekuuWwseaNouihjOeahOWuueWZqO+8mlxcYGlubGluZUJsb2NrQW5kV3JhcFxcYO+8jOmHjOmdouWMheWQq07kuKpcXGBibG9ja0l0ZW1cXGDvvIxcXGBibG9ja0l0ZW1cXGDmmK/lroPnmoTlrZDpoblcbiAgLSDlpJrnirbmgIHlrrnlmajvvJrkuIDkuKpcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxg5aSa54q25oCB5a655Zmo5YyF5ZCr5aSa5LiqXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxgXG5cbi0g57uE5Lu257G75Z6L5p6a5Li+IChub2RlVHlwZSnmnprkuL7vvJpcblxuICAtIOW9oueKtu+8mlxcYHJlY3RcXGAsIFxcYGNpcmNsZVxcYCwgXFxgbGluZVxcYFxuICAtIOWfuuehgOe7hOS7tu+8mlxcYHRleHRcXGDjgIFcXGBidXR0b25cXGDjgIFcXGBpbnB1dFxcYOOAgVxcYGljb25cXGDjgIFcXGBpbWFnZVxcYFxuICAtIOWfuuehgOWuueWZqO+8mlxcYGNvbnRhaW5lclxcYFxuICAtIOe9keagvOWuueWZqO+8mlxcYGdyaWRDb250YWluZXJcXGDjgIFcXGBncmlkSXRlbVxcYFxuICAtIOa1geW8j+WuueWZqO+8mlxcYGlubGluZUJsb2NrQW5kV3JhcFxcYOOAgVxcYGJsb2NrSXRlbVxcYFxuICAtIOW8gOWFs++8mlxcYHN3aXRjaFxcYFxuICAtIOWNlemAie+8mlxcYHJhZGlvR3JvdXBcXGDjgIFcXGByYWRpb1xcYFxuICAtIOWkmumAie+8mlxcYGNoZWNrQm94R3JvdXBcXGDjgIFcXGBjaGVja0JveFxcYFxuICAtIOmhtumDqOWvvOiIquagj++8mlxcYHRpdGxlQmFyXFxg44CBXFxgdG9wTmF2aWdhdGVCYXJcXGBcbiAgLSDlupXpg6jmk43kvZzmoI/vvJpcXGBib3R0b21PcGVyYXRlQmFyXFxgXG4gIC0g5aSa54q25oCB5a655Zmo77yaXFxgbXVsdGlTdGF0ZUNvbnRhaW5lclxcYCwgXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxgXG4gIC0g5YiX6KGo77yaXFxgdmVydGljYWxMaXN0Vmlld1xcYCwgXFxgaG9yaXpvbnRhbExpc3RWaWV3XFxgLCBcXGBsaXN0SXRlbUNhcmRcXGDjgIFcXGBsaXN0Rm9vdGVyQ29udGFpbmVyXFxgXG4gIC0g6L2u5pKt77yaXFxgdmlld1BhZ2VyXFxgLCBcXGB2aWV3UGFnZXJJdGVtXFxgLCBcXGB2aWV3UGFnZXJJbmRpY2F0b3JDb250YWluZXJcXGBcbiAgLSB0YWIg6YCJ6aG55Y2h77yaXFxgdGFiUGFuZWxGYXRoZXJcXGAsIFxcYHRhYlBhbmVsXFxgLCBcXGB0YWJNZW51QmFyXFxgLCBcXGB0YWJNZW51QmFySXRlbVxcYFxuICAtIOW6lemDqOWvvOiIqjogXFxgYm90dG9tVGFiQ29udGVudENvbnRhaW5lclxcYCwgXFxgc3ViUGFnZVxcYCwgXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJcXGAsIFxcYGJvdHRvbVRhYk5hdmlnYXRlQmFySXRlbVxcYFxuICAtIOWvueivneahhu+8mlxcYGRpYWxvZ092ZXJsYXlcXGAsIFxcYGRpYWxvZ0NvbnRlbnRcXGBcbiAgLSB0b2FzdCDmj5DnpLrvvJpcXGB0b2FzdFxcYFxuICAtIOS4i+aLieiPnOWNle+8mlxcYGRyb3BEb3duTWVudVxcYFxuICAtIOS+p+a7kemdouadv++8mlxcYHNpZGVTbGlkZVBhbmVsXFxgXG4gIC0g5omL5py656Gs5Lu25YWD57Sg77yaXFxgcGhvbmVUb3BTdGF0dXNCYXJcXGDjgIFcXGBwaG9uZUJvdHRvbUluZGljYXRvckJhclxcYO+8jOi/meS4pOS4quWFg+e0oOaYr+aJi+acuuehrOS7tuiHquW4pueahOWFg+e0oO+8jOS4jeiDveWcqOmhtemdouS4rea3u+WKoOOAglxuXG4jIyDlm5vjgIHova7mkq3kuI5UYWJz57uE5Lu255qE6KeE5YiZXG4tIOi9ruaSreeahOavj+S4gOS4qlNsaWRl5ZKMVGFic+mAiemhueWNoee7hOS7tuavj+S4gOS4qlRhYiBQYW5lbOmDveW/hemhu+S9v+eUqFxcYGRpc3BsYXk6IG5vbmVcXGDlkoxcXGBkaXNwbGF5OiBibG9jay9mbGV4XFxg5p2l5a6e546w6ZqQ6JeP5ZKM5pi+56S655qE5LqS5pal5YiH5o2iXG4tIOi9ruaSreeahOavj+S4gOS4qlNsaWRl5b+F6aG75pyJaHRtbOS7o+eggeWunueOsO+8jOS4jeW+l+WPquWGmeesrDHkuKpTbGlkZeeahGh0bWzku6PnoIHvvIzlhbbku5ZTbGlkZeeahGh0bWzku6PnoIHkuZ/lv4XpobvopoHlhpnjgIJcbi0gVGFic+mAiemhueWNoee7hOS7tumcgOimgea3u+WKoOeCueWHu+WIh+aNolRhYiBQYW5lbOeahOWKn+iDve+8jOS4jeW+l+WPquWGmeesrDHkuKpUYWIgUGFuZWznmoRodG1s5Luj56CB77yM5YW25LuWVGFiIFBhbmVs55qEaHRtbOS7o+eggeS5n+W/hemhu+imgeWGmeOAglxuLSBUYWJz6YCJ6aG55Y2h57uE5Lu25q+P5LiA5LiqVGFiIFBhbmVs6YO95b+F6aG76KaB5pyJ5YaF5a6577yM5LiN5b6X5pW36KGN5Zyw5bGV56S65rKh5pyJ5pWw5o2u44CB6IGU572R5aSx6LSl44CBbG9hZGluZ+eahOaDheWGte+8jOW/hemhu+WxleekuuacieaVsOaNrueahOWFt+S9k+WGheWuue+8jOe7neWvueS4jeiDveWBt+aHkuaVt+ihjeOAglxuLSBUYWJz6YCJ6aG55Y2h57uE5Lu25q+P5LiA5LiqVGFiIFBhbmVs6YO95b+F6aG76KaB5pyJaHRtbOS7o+eggeWunueOsO+8jOS4jeW+l+WPquWGmeesrDHkuKpUYWIgUGFuZWznmoRodG1s5Luj56CB77yM5YW25LuWVGFiIFBhbmVs55qEaHRtbOS7o+eggeS5n+W/hemhu+imgeWGmeOAglxuXG4jIyDkupTjgIHlm77moIfkuI7lm77niYfnmoTop4TliJlcbi0g5b2T6ZyA6KaBaWNvbuWbvuagh+aXtuW/hemhu+S9v+eUqEZvbnRBd2Vzb21l5Zu+5qCH77yM5q+U5aaC77yaXFxgPGkgbmFtZT1cIuW+ruS/oUljb25cIiB2dHlwZT1cImljb25cIiBpZD1cInd4SWNvblwiIGNsYXNzPVwiZmFiIGZhLXdlaXhpblwiPjwvaT5cXGDvvIzlubbkuJTms6jmhI/lm77moIfnmoTpopzoibLvvIzmr5TlpoLlvq7kv6Hlm77moIfkuIDoiKzkvb/nlKjnu7/oibLns7vvvIxRUeWbvuagh+S4gOiIrOS9v+eUqOiTneiJsuezu++8jOW+ruWNmuWbvuagh+S4gOiIrOS9v+eUqOe6ouiJsuezu++8jOaUr+S7mOWuneWbvuagh+S4gOiIrOS9v+eUqOa1heiTneiJsuezu+etieetiVxuLSDnu53lr7nkuI3og73kvb/nlKggZW1vamkg6KGo5oOF56ym5Y+377yM5LiN5b6X5L2/55So5Lu75L2VIGVtb2ppIOihqOaDheespuWPt++8jOivt+S9v+eUqEZvbnRBd2Vzb21l5a2X5L2T5Zu+5qCH5p2l5Luj5pu/44CCXG4tIExPR0/lm77niYflkozlvJXlr7zpobXnmoTlvJXlr7zlm77niYflv4Xpobvkvb/nlKhcXGBkb2MvcmVzL3N2Z01hcC5qc29uXFxg5paH5Lu25LitanNvbuWvueixoeato+ehruWtl+auteeahGh0dHBz6ZO+5o6l5YC877yM56aB5q2i5L2/55So5pys5Zyw5Zu+54mH6Lev5b6EXFxgZG9jL3Jlcy9sb2dvLnN2Z1xcYOaWh+S7tu+8jOiAjOaYr+S9v+eUqOexu+S8vO+8mlxcYGh0dHBzOi8vZWRpdG9yLmJ5dGVmdW5nby5jb20vZGZpbGUvaW1nL3h4eHh4LnN2Z1xcYOi/meagt+eahOWbvueJh+mTvuaOpeWcsOWdgO+8jOavlOWmgumXquWxj+mhteOAgeeZu+W9lemhteOAgeazqOWGjOmhteeUqOWIsOeahExPR0/lm77niYfvvIzlvJXlr7zpobXnmoTlvJXlr7zlm77niYfnrYnjgIJcbi0ganBn44CBanBlZ+exu+Wei+WbvueJh+W/hemhu+S9v+eUqOWbvueJh+WcsOWdgO+8mlxcYGh0dHBzOi8vb3NzLmJ5dGVmdW5nby5jb20vZjEvc2hvd0ltZzEuanBnXFxgKe+8jOWFtuS4ree7k+WwvueahOKAmXNob3dJbWcxJ+WPr+S7peaNouS4uuS7jiAxIOWIsCAzMCDnmoTmlbDlrZfvvIwxfjMwIOeahOaVsOWtl+W/hemhu+maj+acuuaMkemAie+8jOS4jeW+l+avj+S4qumhtemdouavj+S4quWbvueJh+mDveS9v+eUqOWQjOS4gOS4quaVsOWtl+OAguWGmeazleavlOWmgu+8mlxcYDxpbWcgc3JjPVwiaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMTcuanBnXCIgYWx0PVwieHh4XCIgY2xhc3M9XCJ4eHhcIiBub2RlVHlwZT1cImltYWdlXCI+XFxgXG5cbiMjIOWFreOAgemmlumhteS4u+S9k+mhteS4juWtkOmhtemdoueahOinhOWImVxuLSDpppbpobXkuLvkvZPpobXltYzlpZfkuoblpJrkuKrlrZDpobXpnaLvvIzmr4/kuIDkuKrlrZDpobXpnaLpg73kuI3pnIDopoHloavlhYXlhoXlrrnvvIznqbrnmb3lsLHooYzvvIzlkI7pnaLkvJrmnInkuJPpl6jnmoTku7vliqHmnaXorr7orqHlhbfkvZPnmoTlrZDpobXpnaLjgIJcbi0g5Lu75L2V5a2Q6aG16Z2i6YO95b+F6aG756aB5q2i5re75Yqg5bqV6YOo5a+86Iiq5qCP6IqC54K55Yiw6aG16Z2i77yM5Zug5Li65a2Q6aG16Z2i5piv5bWM5aWX5Zyo6aaW6aG15Li75L2T6aG15Lit55qE77yM54i26aG16Z2i5bey57uP5pyJ5bqV6YOo5a+86Iiq5qCP5LqG77yM5a2Q6aG16Z2i5LiN6ZyA6KaB5YaN5re75Yqg5bqV6YOo5a+86Iiq5qCP77yM5Lmf5LiN5b6X5re75Yqg5LqM57qn6aG16Z2i55qE5qCH6aKY5qCP5Yiw5a2Q6aG16Z2i5Lit77yM5Zug5Li65a2Q6aG16Z2i5piv5bWM5aWX5Zyo6aaW6aG15Li75L2T6aG15Lit55qE77yM6aaW6aG15Li75L2T6aG15ZKM5a6D55qE5a2Q6aG16Z2i6YO95piv5LiA57qn6aG16Z2i77yM5Zug5q2k5LiN5b6X5re75Yqg5LqM57qn6aG16Z2i55qE5qCH6aKY5qCP5Yiw5a2Q6aG16Z2i5Lit44CCXG5cbiMjIOS4g+OAgeWmguaenOeUqOaIt+ayoeacieaYjuehruivtOaYjuivpemhtemdouiuvuiuoemcgOaxgu+8jOmCo+WwseaMieeFp+S7peS4i+mhtemdoum7mOiupOinhOWImeiuvuiuoVxuLSDpl6rlsY/pobXvvJrnpoHmraLkvb/nlKjlhajlsY/lm77niYfvvIzkuIDoiKzkvb/nlKjkuLvpopjnm7jlhbPnmoTmuJDlj5joibLvvIznhLblkI7luKbmnInkuIDkupvpop3lpJbnmoTog4zmma/lhYPntKDlop7lvLrnlYzpnaLlsYLmrKHmhJ/vvIzmr5TlpoLvvJrmoqblubvlnIblnIjms6Hms6HjgIHnjrvnkoPmlYjmnpznmoTlnIblvaLlvoTlkJHmuJDlj5jnrYnnrYnlhYPntKBcbi0g5byV5a+86aG177ya5bC96YeP5LiN5L2/55So5YWo5bGP5Zu+54mH77yM5LiA6Iis5q+P5LiA6aG15byV5a+86aG16IOM5pmv6Imy5Lmf5Y+v5Lul5riQ5Y+Y77yM54S25ZCO5q+P5LiA6aG15Yqf6IO96K+05piO5LiA6Iis5pyJ6Z2e5YWo5bGP5Zu+54mH44CB5qCH6aKY44CB5Ymv5qCH6aKY562J562J77yM5L2g5Y+v5Lul5bim5YWl5YW25LuW5YWD57Sg77yM6K6p6aG16Z2i5pu05Yqg576O6KeC77yM5bm25LiU5byV5a+86aG155qE5byV5a+85Zu+54mH6ZyA6KaB6Ieq5bex57uY5Yi2c3Zn5Zu+54mH77yM5bm25a2Y5pS+5ZyoXFxgZG9jL3Jlc1xcYOaWh+S7tuWkueS4i+mdou+8jOW5tuWcqGh0bWzkuK3kvb/nlKhcbi0g6IOM5pmv6Imy5Li65LqG5aKe5by65bGC5qyh5oSf77yM5re75Yqg55qE5qKm5bm75rOh5rOh5oiW6ICF5ZyG5b2i5b6E5ZCR5riQ5Y+Y5YWD57Sg55qEZGl277yM5b+F6aG75Y+q6IO95aOw5piO5Li6XFxgY2lyY2xlXFxg77yM5bm25LiU5LiA5LiqZGl255qEXFxgYmFja2dyb3VuZDpcXGDlj6rog73lo7DmmI7kuIDkuKpcXGByYWRpYWwtZ3JhZGllbnRcXGDvvIzmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDAsIDIyOSwgMjU1LCAwLjE1KSAwJSwgcmdiYSgwLCAwLCAwLCAwKSA3MCUpO++8jOWmguaenOmcgOimgeWkmuS4qlxcYHJhZGlhbC1ncmFkaWVudFxcYOW+hOWQkea4kOWPmOiDjOaZr++8jOavj+S4quW+hOWQkea4kOWPmOiDjOaZr+mDveW/hemhu+WjsOaYjuS4uuS4gOS4qmRpduiKgueCue+8jOavj+S4qmRpdueahFxcYGJhY2tncm91bmQ6XFxg5Y+q6IO95aOw5piO5LiA5LiqXFxgcmFkaWFsLWdyYWRpZW50XFxg44CCXG5gIl19
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdWlEZXNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBOEdyQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHVpRGVzaWduUHJvbXB0VGVtcGxhdGUgPSBgIyBVSeiuvuiuoeinhOWIme+8jOeJueWIq+azqOaEj+W/hemhu+S9v+eUqFVJ6KeE6IyDXFxgLmJ5dGVmdW4vVUnorr7orqHop4TojIMubWRcXGDph4zpnaLpu5jorqTnmoTkuLvpopjnmq7ogqTmnaXorr7orqHvvIzkuI3lvpfkvb/nlKjlhbbku5bkuLvpopjnmq7ogqTjgIJcblxuIyMg5LiA44CB56aB5q2i55qE5LqL5oOFXG4tIOemgeatouS9v+eUqOS7u+S9leWJjeerr+ahhuaetu+8jOWPquS9v+eUqCBodG1sK+exu+mAieaLqeWZqOagt+W8jytqcyDmnaXlrp7njrDjgIJcbi0g56aB5q2i5L2/55SoanPku6PnoIHmnaXmi7zmjqVodG1s5a2X56ym5Liy77yM5b+F6aG75ZyoYm9keeagh+etvumHjOmdouebtOaOpeWGmWh0bWzku6PnoIHjgIJcbi0g56aB5q2i5L2/55SoanPku6PnoIHmnaXlo7DmmI7ku7vkvZXpobXpnaLmmL7npLrmiYDpnIDnmoTmlbDmja7vvIzmiYDmnInmlbDmja7pg73lv4XpobvlnKhodG1s5Luj56CB5Lit55u05o6l5YaZ5q2744CCXG4tIOemgeatouS9v+eUqOaWh+acrOa4kOWPmOiJsu+8jOW/hemhu+S9v+eUqOe6r+iJsuaWh+acrO+8jOS5n+WwseaYr+emgeatouS9v+eUqFxcYC13ZWJraXQtdGV4dC1maWxsLWNvbG9yXFxg5bGe5oCn44CCXG4tIOemgeatoue7memhtemdoua3u+WKoFxcYOaJi+acuumhtumDqOeKtuaAgeagj1xcYOOAgVxcYOaJi+acuuW6lemDqOaMh+ekuuWZqOagj1xcYOS4pOS4qumdnumhtemdouWGheWuueeahOWFg+e0oOiKgueCue+8jOi/meaYr+aJi+acuuehrOS7tuiHquW4pueahOWFg+e0oO+8jOS4jeiDveWcqOmhtemdouS4rea3u+WKoOOAglxuLSDnpoHmraLkvb/nlKhcXGA6YmVmb3JlXFxg44CBXFxgOmFmdGVyXFxg5Lyq5YWD57Sg77yM5b+F6aG75L2/55So5YW25LuW5qCH562+5p2l5a6e546w44CCXG4tIOemgeatouS9v+eUqOWkmuS4qnDmoIfnrb7miJblpJrkuKrlhbbku5bmoIfnrb7mnaXmmL7npLrkuIDkuKrku47nvZHnu5zmiJblhbbku5blnLDmlrnmi4nlj5blm57mnaXnmoTplb/mlofmnKzvvIzlv4Xpobvlj6rog73kvb/nlKjkuIDkuKrmoIfnrb7mnaXmmL7npLrvvIzmr5TlpoLvvJpkaXbjgIFzcGFu562J77yM5Zug5Li6572R57uc5ouJ5Y+W5Zue5p2l55qE6ZW/5paH5pys5piv5LiA5Liq5paH5pys77yM5peg5rOV5L2/55So5aSa5Liq5qCH562+5p2l5pi+56S65LiA5Liq5paH5pys77yM5b+F6aG75Y+q6IO95L2/55So5LiA5Liq5qCH562+5p2l5pi+56S644CCXG4tIGxvYWRpbmfoioLngrnnmoTlrp7njrDnpoHmraLkvb/nlKhkaXbmoIfnrb7kuI7ovrnmoYblsZ7mgKflrp7njrDvvIzlv4Xpobvkvb/nlKjlm77moIdpY29u55qEaeagh+etvuadpeWunueOsGxvYWRpbmfnmoToioLngrlcbi0g56aB5q2i5Li6aHRtbOagh+etvuiKgueCuea3u+WKoOWKqOeUu+aIlui/h+a4oeaViOaenO+8jOmhtemdouiuvuiuoeS4jemcgOimgeS7u+S9leWKqOeUu+WSjOi/h+a4oeaViOaenO+8jOavlOWmguemgeatou+8mkBrZXlmcmFtZXPjgIF0cmFuc2l0aW9u44CBYW5pbWF0aW9uIOetieOAglxuLSDmjInpkq7jgIHljaHniYfjgIFpdGVt6aG5562J5YWD57Sg5b+F6aG76KaB5pyJaG92ZXLkuI7ngrnlh7vlj43ppojvvIzngrnlh7vlj43ppojlv4Xpobvkvb/nlKjmtYXoibLnmoTog4zmma/oibJiYWNrZ3JvdW5k5p2l5Y+N6aaI5bCx6KGM77yM5Lil56aB5L2/55SodHJhbnNmb3Jt5pWI5p6cXG4gICAgLSDinYwg6ZSZ6K+v55qE55So5rOV77yaIFxuICAgIFxcYFxcYFxcYCBjc3NcbiAgICAuaG90LXNhbGVzLWl0ZW06aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLi4ucHgpO1xuICAgIH1cbiAgICBcXGBcXGBcXGBcbiAgICAtIOKchSDmraPnoa7nmoTnlKjms5XvvJpcbiAgICBcXGBcXGBcXGAgY3NzXG4gICAgLmhvdC1zYWxlcy1pdGVtOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogLi4uO1xuICAgIH1cbiAgICBcXGBcXGBcXGBcbi0g56aB5q2i5L2/55SoZGl25qCH562+5p2l5a6e546waW1hZ2Xlm77niYfvvIzlv4XpobvopoHkvb/nlKhpbWfmoIfnrb7mnaXlrp7njrDlm77niYfoioLngrnvvIxpbWfmoIfnrb7nmoRzcmPlsZ7mgKflv4Xpobvorr7nva7kuLrvvJpcXGBodHRwczovL29zcy5ieXRlZnVuZ28uY29tL2YxL3Nob3dJbWcxLmpwZ1xcYO+8jOWFtuS4remHjOmdoueahFxcYHNob3dJbWcxXFxg5Y+v5Lul5pS55Li6MX4zMOeahOS7u+aEj+S4gOS4quaVsOWtl++8jOavlOWmgu+8mlxcYHNob3dJbWc1XFxg44CCXG4gIC0g4p2M6ZSZ6K+v55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgIGh0bWxcbiAgICA8ZGl2IGNsYXNzPVwiYmVzdHNlbGxlci1jb3ZlclwiIGlkPVwiYmVzdHNlbGxlckNvdmVyMVwiIG5hbWU9XCLnlYXplIDkuabnsY3lsIHpnaIxXCIgbm9kZVR5cGU9XCJpbWFnZVwiPlxuICAgIDwvZGl2PlxuICAgIFxcYFxcYFxcYFxuICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgaHRtbFxuICAgIDxpbWcgY2xhc3M9XCJiZXN0c2VsbGVyLWNvdmVyXCIgaWQ9XCJiZXN0c2VsbGVyQ292ZXIxXCIgbmFtZT1cIueVhemUgOS5puexjeWwgemdojFcIiBub2RlVHlwZT1cImltYWdlXCIgc3JjPVwiaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nNy5qcGdcIj4gIFxuICAgIFxcYFxcYFxcYFxuXG4jIyDkuozjgIHmoLflvI/op4TliJlcbi0g5qC35byP5Luj56CB5b+F6aG75L2/55So57G76YCJ5oup5Zmo5qC35byPQ2xhc3MtYmFzZWQgU3R5bGUgLyBDbGFzcyBTZWxlY3RvciBTdHlsZeaWueW8j++8jOS4jeW+l+S9v+eUqOihjOWGheagt+W8j0lubGluZSBTdHlsZeaIluWklumDqOaWh+S7tuOAglxuLSDpgbXlvqrmiYvmnLrlsLrlr7jop4TmoLwo5a695bqmIDM5M3B4IOmrmOW6piA4MDhweClcbi0g6aaW6aG1L+aOqOiNkHRhYueahOWIhuexuy/lip/og73lkITkuKrlhaXlj6PnmoTlm77moIfkuIDoiKzpnIDopoHkvb/nlKjkuI3kuIDmoLfnmoTpopzoibLvvIzlvojlsJHkvJrnu5/kuIDlhajpg6jkvb/nlKjlk4HniYzkuLvpopjoibJcbi0g5omA5pyJcmFkaW/jgIFjaGVja0JveOmDveW/hemhu+S9v+eUqGnmoIfnrb7orr7nva5Gb250QXdlc29tZeWbvuagh+adpeWunueOsO+8jOS4jeW+l+S9v+eUqOezu+e7n+eahGlucHV05qCH562+5a6e546w44CCXG4tIOWmgueUqOaIt+ayoeacieaYjuehruaPj+i/sOivtOaYjumhtemdouiDjOaZr+iJsu+8jOWPquaciemXquWxj+mhtemdoueahOiDjOaZr+iJsuWFgeiuuOiuvue9ruWTgeeJjOS4u+iJsuaIluWTgeeJjOS4u+iJsuS4juWTgeeJjOasoeiJsueahOa4kOWPmOiJsu+8jOWFtuS7lumhtemdouW/hemhu+S9v+eUqOmdniDlk4HniYzkuLvoibIg5LiO6Z2eIOWTgeeJjOasoeiJsiDnmoTnuq/oibLlgZrpobXpnaLog4zmma/oibLvvIzmr5TlpoLkuIDoiKzkvb/nlKjnmb3oibLns7vvvIzlpoLmnpzmmK/mmpfpu5Hpo47pgqPlsLHmmK/pu5HoibLns7vjgIJcbi0g6L6T5YWl5qGGXFxgaW5wdXRcXGDlpoLmnpzpnIDopoHlsZXnpLrmloflrZcgbGFiZWzvvIzlsL3ph4/kvb/nlKggaWNvbiDku6Pmm7/mloflrZcgbGFiZWzvvIzlubbkuJQgaWNvbiDph43lj6DlnKjovpPlhaXmoYbnmoTlt6bkvqfvvIzov5nmoLfmlbTkuKrpobXpnaLnmoTnqbrpl7TliKnnlKjnjofpq5jjgIJcbi0g5aaC5p6c5Li76aKY6aOO5qC85piv5pqX6buR6aOO5qC855qE6K+d77yM6buY6K6k5Y+v5Lul57uZ5q+P5Liq6aG16Z2i5re75Yqg5aSa5Liq546755KD5pWI5p6c55qE5ZyG5b2i5b6E5ZCR5riQ5Y+Y6IOM5pmv77yM57G75Ly86L+Z5qC377yaXFxgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgwLCAyNDIsIDI1NSwgMC4xKSAwJSwgcmdiYSgwLCAwLCAwLCAwKSA3MCUpO1xcYO+8jOmHjOmdoueahOminOiJsuWSjOa4kOWPmOiMg+WbtOWPr+S7peagueaNruWunumZheaDheWGteiwg+aVtOOAglxuLSDog4zmma/oibLkuLrkuoblop7lvLrlsYLmrKHmhJ/vvIzmt7vliqDnmoTmoqblubvms6Hms6HmiJbogIXlnIblvaLlvoTlkJHmuJDlj5jlhYPntKDnmoRkaXbvvIzlv4Xpobvlj6rog73lo7DmmI7kuLpcXGBjaXJjbGVcXGDvvIzlubbkuJTkuIDkuKpkaXbnmoRcXGBiYWNrZ3JvdW5kOlxcYOWPquiDveWjsOaYjuS4gOS4qlxcYHJhZGlhbC1ncmFkaWVudFxcYO+8jOavlOWmguato+ehrueahOWGmeazle+8mmJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHJnYmEoMCwgMjI5LCAyNTUsIDAuMTUpIDAlLCByZ2JhKDAsIDAsIDAsIDApIDcwJSk777yM5aaC5p6c6ZyA6KaB5aSa5LiqXFxgcmFkaWFsLWdyYWRpZW50XFxg5b6E5ZCR5riQ5Y+Y6IOM5pmv77yM5q+P5Liq5b6E5ZCR5riQ5Y+Y6IOM5pmv6YO95b+F6aG75aOw5piO5Li65LiA5LiqZGl26IqC54K577yM5q+P5LiqZGl255qEXFxgYmFja2dyb3VuZDpcXGDlj6rog73lo7DmmI7kuIDkuKpcXGByYWRpYWwtZ3JhZGllbnRcXGDjgIJcbi0g5oyJ6ZKu44CB5Y2h54mH44CBaXRlbemhueetieWFg+e0oOW/hemhu+imgeacieS4gOS4qmhvdmVy5ZCO5pS55Y+Y6IOM5pmv6Imy55qE5Y+N6aaI5pWI5p6c77yM5LiN6IO95L2/55SodHJhbnNmb3Jt5pWI5p6c77yM5Y+q6IO95L2/55So6IOM5pmv6Imy5pWI5p6c44CCXG4tIGNzc+agt+W8j+mHjOmdoueahFxcYGJhY2tncm91bmQtaW1hZ2VcXGDlsZ7mgKfnmoTlgLzlv4XpobvmmK/ov5znqIvlm77niYfvvIzkuI3og73orr7nva7kuI3mmK/ov5znqIvlm77niYfnmoTku7vkvZXlgLzvvIzmr5TlpoLkuI3og73orr7nva4nYmFzZTY0J+OAgea4kOWPmCdyYWRpYWwtZ3JhZGllbnQn562J44CCXG5cbiMjIOS4ieOAgeW/hemhu+e7meavj+S4gOS4quiKgueCuea3u+WKoGlk44CBbmFtZeOAgW5vZGVUeXBl5bGe5oCnXG4tIOeJueWIq+azqOaEj++8jFxcYGlcXGDlkoxcXGBkaXZcXGDnrYnmoIfnrb7kuZ/lv4Xpobvmt7vliqAgaWTjgIFuYW1l44CBbm9kZVR5cGUg5bGe5oCn77yM5q+P5LiA5Liq6IqC54K56YO96ZyA6KaB5re75Yqg6L+Z5LiJ5Liq5bGe5oCn77yM5Y2D5LiH5Yir5ryP5o6J5LqG77yM6L+Z5piv5b+F6KaB5p2h5Lu2XG4tIGlkIOWxnuaAp+W/hemhu+WPquiDveS9v+eUqOiLseaWh+aIluaVsOWtl+e7hOaIkO+8jOS4lOS4jeiDveS7peaVsOWtl+W8gOWktO+8jOW5tuS4lOaVtOS4qumhtemdoiBpZCDlsZ7mgKfnmoTlgLzlv4XpobvllK/kuIDvvIzkvb/nlKjpqbzls7DnmoTlkb3lkI3mlrnlvI9cbi0gbmFtZSDlsZ7mgKflv4XpobvmmK/kuK3mlofmiJbmlbDlrZfvvIzlubbkuJTkuI3og73ljIXlkKvnibnmrorlrZfnrKZcbi0g5aaC5p6c5piv6YCa6L+H54K55Ye7aXRlbemhueWIh+aNouWxleekuuWGheWuueeahO+8jOmCo+S5iGl0ZW3pobnnmoRub2RlVHlwZeW/hemhu+aYr1xcYHRhYk1lbnVCYXJJdGVtXFxg77yMdGFiIHBhbmVs55qEbm9kZVR5cGXlv4XpobvmmK9cXGB0YWJQYW5lbFxcYO+8jFxcYHRhYk1lbnVCYXJJdGVtXFxg55qE54i25Lqy5a655Zmo5pivXFxgdGFiTWVudUJhclxcYO+8jOS4jeW+l+S9v+eUqFxcYGhvcml6b250YWxMaXN0Vmlld1xcYOadpeS7o+abv1xcYHRhYk1lbnVCYXJcXGBcbi0g6aG16Z2i55qEaGVhZGVy5qCH6aKY5qCPbm9kZVR5cGXlv4XpobvmmK9cXGB0aXRsZUJhclxcYOaIluiAhVxcYHRvcE5hdmlnYXRlQmFyXFxg77yM6ICM5LiN5pivXFxgY29udGFpbmVyXFxgXG4tIG5vZGVUeXBlIOWxnuaAp+eahOWAvOW/hemhu+aYr1xcYOe7hOS7tuexu+Wei+aemuS4viAobm9kZVR5cGUp5p6a5Li+XFxgIOS4reeahOS4gOS4qu+8jOS4gOS6m+W4g+WxgOWuueWZqOmcgOimgemBteWuiOS7peS4i+ivtOaYjuadpemAieaLqeato+ehrueahG5vZGVUeXBl77yaXG4gIC0g5YiX6KGo5a655Zmo77yaXFxgdmVydGljYWxMaXN0Vmlld1xcYOOAgVxcYGhvcml6b250YWxMaXN0Vmlld1xcYOOAgVxcYGxpc3RJdGVtQ2FyZFxcYO+8jOeUqOS6juW4g+WxgOWkmuS4quWIl+ihqOmhue+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOOAgeWIhuexu+WIl+ihqOOAgeagh+etvuWIl+ihqOetie+8jOWPr+S7peaUr+aMgeWkmuihjOWkmuWIl+eahOWIl+ihqOW4g+WxgFxuICAtIOWIl+ihqOmhteiEmuWuueWZqO+8mlxcYGxpc3RGb290ZXJDb250YWluZXJcXGDvvIznlKjkuo7luIPlsYDliJfooajnmoTpobXohJrvvIzmr5TlpoLvvJrliqDovb3mm7TlpJrjgIHmsqHmnInmm7TlpJrkuobnrYlcbiAgLSDnvZHmoLzlrrnlmajvvJpncmlkQ29udGFpbmVy55So5LqO5biD5bGA5aSa5Liq572R5qC86aG577yM6YeM6Z2i5YyF5ZCrTuS4qmdyaWRJdGVt77yM5q+U5aaC77ya5YiG57G7572R5qC85YWl5Y+jXG4gIC0g5rWB5byP5a655Zmo77ya55So5LqO5biD5bGA5aSa5Liq5a2Q6aG577yM5a2Q6aG55Y+v5Lul5Zyo5LiA6KGM5pi+56S677yM5b2T5L2N572u5LiN5aSf5pe25bCx5o2i6KGM5pi+56S677yM5q+U5aaC77ya5LiA57uE5qCH562+dGFn55qE5o6S54mI5biD5bGAXG4gIC0g5aSa54q25oCB5a655Zmo77yaXFxgbXVsdGlTdGF0ZUNvbnRhaW5lclxcYCwgXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxg77yM55So5LqO5LiN5piv6YCa6L+H5Lqk5LqS77yM6ICM5piv6YCa6L+H6YC76L6R54q25oCB5Y+Y6YeP5Y+Y5YyW6ICM5pi+56S65LiN5ZCM54q25oCB55qE5YaF5a655a655Zmo77yM5q+U5aaC77ya55m75b2V54q25oCB5ZKM5pyq55m75b2V54q25oCB5YiG5Yir5pi+56S65LiN5ZCM55qE5YaF5a6544CCXG4tIOmrmOe6p+e7hOS7tuiKgueCueeahG5vZGVUeXBl57uT5p6E6KeE5YiZ77yaXG4gIC0gdGFiIOmAiemhueWNoe+8mlxcYHRhYk1lbnVCYXJcXGDmmK90YWLpgInpobnljaHoj5zljZXmoI/vvIzph4zpnaLljIXlkKtO5LiqXFxgdGFiTWVudUJhckl0ZW1cXGDvvIxcXGB0YWJQYW5lbEZhdGhlclxcYOaYr3RhYumAiemhueWNoeWGheWuueWuueWZqO+8jOmHjOmdouWMheWQq07kuKpcXGB0YWJQYW5lbFxcYO+8jFxcYHRhYk1lbnVCYXJcXGDlkoxcXGB0YWJQYW5lbEZhdGhlclxcYOW/hemhu+WQjOaXtuWtmOWcqO+8jFxcYHRhYlBhbmVsXFxg55qE5pWw6YeP5b+F6aG75ZKMXFxgdGFiTWVudUJhckl0ZW1cXGDnmoTmlbDph4/nm7jlkIxcbiAgLSB2aWV3UGFnZXIg6L2u5pKt77yaXFxgdmlld1BhZ2VyXFxg5piv6L2u5pKt5a655Zmo77yM6YeM6Z2i5YyF5ZCrTuS4qlxcYHZpZXdQYWdlckl0ZW1cXGDvvIxcXGB2aWV3UGFnZXJJbmRpY2F0b3JDb250YWluZXJcXGDmmK/ova7mkq3mjIfnpLrlmajlrrnlmajvvIxcXGB2aWV3UGFnZXJcXGDkuI5cXGB2aWV3UGFnZXJJbmRpY2F0b3JDb250YWluZXJcXGDlv4XpobvlkIzml7blrZjlnKhcbiAgLSDkuIDooYzkuI3lpJ/kvY3nva7mmL7npLrlsLHmjaLooYznmoTlrrnlmajvvJpcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDvvIzph4zpnaLljIXlkKtO5LiqXFxgYmxvY2tJdGVtXFxg77yMXFxgYmxvY2tJdGVtXFxg5piv5a6D55qE5a2Q6aG5XG4gIC0g5aSa54q25oCB5a655Zmo77ya5LiA5LiqXFxgbXVsdGlTdGF0ZUNvbnRhaW5lclxcYOWkmueKtuaAgeWuueWZqOWMheWQq+WkmuS4qlxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYFxuXG4tIOe7hOS7tuexu+Wei+aemuS4viAobm9kZVR5cGUp5p6a5Li+77yaXG5cbiAgLSDlvaLnirbvvJpcXGByZWN0XFxgLCBcXGBjaXJjbGVcXGAsIFxcYGxpbmVcXGBcbiAgLSDln7rnoYDnu4Tku7bvvJpcXGB0ZXh0XFxg44CBXFxgYnV0dG9uXFxg44CBXFxgaW5wdXRcXGDjgIFcXGBpY29uXFxg44CBXFxgaW1hZ2VcXGBcbiAgLSDln7rnoYDlrrnlmajvvJpcXGBjb250YWluZXJcXGBcbiAgLSDnvZHmoLzlrrnlmajvvJpcXGBncmlkQ29udGFpbmVyXFxg44CBXFxgZ3JpZEl0ZW1cXGBcbiAgLSDmtYHlvI/lrrnlmajvvJpcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDjgIFcXGBibG9ja0l0ZW1cXGBcbiAgLSDlvIDlhbPvvJpcXGBzd2l0Y2hcXGBcbiAgLSDljZXpgInvvJpcXGByYWRpb0dyb3VwXFxg44CBXFxgcmFkaW9cXGBcbiAgLSDlpJrpgInvvJpcXGBjaGVja0JveEdyb3VwXFxg44CBXFxgY2hlY2tCb3hcXGBcbiAgLSDpobbpg6jlr7zoiKrmoI/vvJpcXGB0aXRsZUJhclxcYOOAgVxcYHRvcE5hdmlnYXRlQmFyXFxgXG4gIC0g5bqV6YOo5pON5L2c5qCP77yaXFxgYm90dG9tT3BlcmF0ZUJhclxcYFxuICAtIOWkmueKtuaAgeWuueWZqO+8mlxcYG11bHRpU3RhdGVDb250YWluZXJcXGAsIFxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYFxuICAtIOWIl+ihqO+8mlxcYHZlcnRpY2FsTGlzdFZpZXdcXGAsIFxcYGhvcml6b250YWxMaXN0Vmlld1xcYCwgXFxgbGlzdEl0ZW1DYXJkXFxg44CBXFxgbGlzdEZvb3RlckNvbnRhaW5lclxcYFxuICAtIOi9ruaSre+8mlxcYHZpZXdQYWdlclxcYCwgXFxgdmlld1BhZ2VySXRlbVxcYCwgXFxgdmlld1BhZ2VySW5kaWNhdG9yQ29udGFpbmVyXFxgXG4gIC0gdGFiIOmAiemhueWNoe+8mlxcYHRhYlBhbmVsRmF0aGVyXFxgLCBcXGB0YWJQYW5lbFxcYCwgXFxgdGFiTWVudUJhclxcYCwgXFxgdGFiTWVudUJhckl0ZW1cXGBcbiAgLSDlupXpg6jlr7zoiKo6IFxcYGJvdHRvbVRhYkNvbnRlbnRDb250YWluZXJcXGAsIFxcYHN1YlBhZ2VcXGAsIFxcYGJvdHRvbVRhYk5hdmlnYXRlQmFyXFxgLCBcXGBib3R0b21UYWJOYXZpZ2F0ZUJhckl0ZW1cXGBcbiAgLSDlr7nor53moYbvvJpcXGBkaWFsb2dPdmVybGF5XFxgLCBcXGBkaWFsb2dDb250ZW50XFxgXG4gIC0gdG9hc3Qg5o+Q56S677yaXFxgdG9hc3RcXGBcbiAgLSDkuIvmi4noj5zljZXvvJpcXGBkcm9wRG93bk1lbnVcXGBcbiAgLSDkvqfmu5HpnaLmnb/vvJpcXGBzaWRlU2xpZGVQYW5lbFxcYFxuICAtIOaJi+acuuehrOS7tuWFg+e0oO+8mlxcYHBob25lVG9wU3RhdHVzQmFyXFxg44CBXFxgcGhvbmVCb3R0b21JbmRpY2F0b3JCYXJcXGDvvIzov5nkuKTkuKrlhYPntKDmmK/miYvmnLrnoazku7boh6rluKbnmoTlhYPntKDvvIzkuI3og73lnKjpobXpnaLkuK3mt7vliqDjgIJcblxuIyMg5Zub44CB6L2u5pKt5LiOVGFic+e7hOS7tueahOinhOWImVxuLSDova7mkq3nmoTmr4/kuIDkuKpTbGlkZeWSjFRhYnPpgInpobnljaHnu4Tku7bmr4/kuIDkuKpUYWIgUGFuZWzpg73lv4Xpobvkvb/nlKhcXGBkaXNwbGF5OiBub25lXFxg5ZKMXFxgZGlzcGxheTogYmxvY2svZmxleFxcYOadpeWunueOsOmakOiXj+WSjOaYvuekuueahOS6kuaWpeWIh+aNolxuLSDova7mkq3nmoTmr4/kuIDkuKpTbGlkZeW/hemhu+aciWh0bWzku6PnoIHlrp7njrDvvIzkuI3lvpflj6rlhpnnrKwx5LiqU2xpZGXnmoRodG1s5Luj56CB77yM5YW25LuWU2xpZGXnmoRodG1s5Luj56CB5Lmf5b+F6aG76KaB5YaZ44CCXG4tIFRhYnPpgInpobnljaHnu4Tku7bpnIDopoHmt7vliqDngrnlh7vliIfmjaJUYWIgUGFuZWznmoTlip/og73vvIzkuI3lvpflj6rlhpnnrKwx5LiqVGFiIFBhbmVs55qEaHRtbOS7o+egge+8jOWFtuS7llRhYiBQYW5lbOeahGh0bWzku6PnoIHkuZ/lv4XpobvopoHlhpnjgIJcbi0gVGFic+mAiemhueWNoee7hOS7tuavj+S4gOS4qlRhYiBQYW5lbOmDveW/hemhu+imgeacieWGheWuue+8jOS4jeW+l+aVt+ihjeWcsOWxleekuuayoeacieaVsOaNruOAgeiBlOe9keWksei0peOAgWxvYWRpbmfnmoTmg4XlhrXvvIzlv4XpobvlsZXnpLrmnInmlbDmja7nmoTlhbfkvZPlhoXlrrnvvIznu53lr7nkuI3og73lgbfmh5LmlbfooY3jgIJcbi0gVGFic+mAiemhueWNoee7hOS7tuavj+S4gOS4qlRhYiBQYW5lbOmDveW/hemhu+imgeaciWh0bWzku6PnoIHlrp7njrDvvIzkuI3lvpflj6rlhpnnrKwx5LiqVGFiIFBhbmVs55qEaHRtbOS7o+egge+8jOWFtuS7llRhYiBQYW5lbOeahGh0bWzku6PnoIHkuZ/lv4XpobvopoHlhpnjgIJcblxuIyMg5LqU44CB5Zu+5qCH5LiO5Zu+54mH55qE6KeE5YiZXG4tIOW9k+mcgOimgWljb27lm77moIfml7blv4Xpobvkvb/nlKhGb250QXdlc29tZeWbvuagh++8jOavlOWmgu+8mlxcYDxpIG5hbWU9XCLlvq7kv6FJY29uXCIgdnR5cGU9XCJpY29uXCIgaWQ9XCJ3eEljb25cIiBjbGFzcz1cImZhYiBmYS13ZWl4aW5cIj48L2k+XFxg77yM5bm25LiU5rOo5oSP5Zu+5qCH55qE6aKc6Imy77yM5q+U5aaC5b6u5L+h5Zu+5qCH5LiA6Iis5L2/55So57u/6Imy57O777yMUVHlm77moIfkuIDoiKzkvb/nlKjok53oibLns7vvvIzlvq7ljZrlm77moIfkuIDoiKzkvb/nlKjnuqLoibLns7vvvIzmlK/ku5jlrp3lm77moIfkuIDoiKzkvb/nlKjmtYXok53oibLns7vnrYnnrYlcbi0g57ud5a+55LiN6IO95L2/55SoIGVtb2ppIOihqOaDheespuWPt++8jOS4jeW+l+S9v+eUqOS7u+S9lSBlbW9qaSDooajmg4XnrKblj7fvvIzor7fkvb/nlKhGb250QXdlc29tZeWtl+S9k+Wbvuagh+adpeS7o+abv+OAglxuLSBMT0dP5Zu+54mH5ZKM5byV5a+86aG155qE5byV5a+85Zu+54mH5b+F6aG75L2/55SoXFxgZG9jL3Jlcy9zdmdNYXAuanNvblxcYOaWh+S7tuS4rWpzb27lr7nosaHmraPnoa7lrZfmrrXnmoRodHRwc+mTvuaOpeWAvO+8jOemgeatouS9v+eUqOacrOWcsOWbvueJh+i3r+W+hFxcYGRvYy9yZXMvbG9nby5zdmdcXGDmlofku7bvvIzogIzmmK/kvb/nlKjnsbvkvLzvvJpcXGBodHRwczovL2VkaXRvci5ieXRlZnVuZ28uY29tL2RmaWxlL2ltZy94eHh4eC5zdmdcXGDov5nmoLfnmoTlm77niYfpk77mjqXlnLDlnYDvvIzmr5TlpoLpl6rlsY/pobXjgIHnmbvlvZXpobXjgIHms6jlhozpobXnlKjliLDnmoRMT0dP5Zu+54mH77yM5byV5a+86aG155qE5byV5a+85Zu+54mH562J44CCXG4tIGpwZ+OAgWpwZWfnsbvlnovlm77niYflv4Xpobvkvb/nlKjlm77niYflnLDlnYDvvJpcXGBodHRwczovL29zcy5ieXRlZnVuZ28uY29tL2YxL3Nob3dJbWcxLmpwZ1xcYCnvvIzlhbbkuK3nu5PlsL7nmoTigJlzaG93SW1nMSflj6/ku6XmjaLkuLrku44gMSDliLAgMzAg55qE5pWw5a2X77yMMX4zMCDnmoTmlbDlrZflv4Xpobvpmo/mnLrmjJHpgInvvIzkuI3lvpfmr4/kuKrpobXpnaLmr4/kuKrlm77niYfpg73kvb/nlKjlkIzkuIDkuKrmlbDlrZfjgILlhpnms5Xmr5TlpoLvvJpcXGA8aW1nIHNyYz1cImh0dHBzOi8vb3NzLmJ5dGVmdW5nby5jb20vZjEvc2hvd0ltZzE3LmpwZ1wiIGFsdD1cInh4eFwiIGNsYXNzPVwieHh4XCIgbm9kZVR5cGU9XCJpbWFnZVwiPlxcYFxuXG4jIyDlha3jgIHpppbpobXkuLvkvZPpobXkuI7lrZDpobXpnaLnmoTop4TliJlcbi0g6aaW6aG15Li75L2T6aG15bWM5aWX5LqG5aSa5Liq5a2Q6aG16Z2i77yM5q+P5LiA5Liq5a2Q6aG16Z2i6YO95LiN6ZyA6KaB5aGr5YWF5YaF5a6577yM56m655m95bCx6KGM77yM5ZCO6Z2i5Lya5pyJ5LiT6Zeo55qE5Lu75Yqh5p2l6K6+6K6h5YW35L2T55qE5a2Q6aG16Z2i44CCXG4tIOS7u+S9leWtkOmhtemdoumDveW/hemhu+emgeatoua3u+WKoOW6lemDqOWvvOiIquagj+iKgueCueWIsOmhtemdou+8jOWboOS4uuWtkOmhtemdouaYr+W1jOWll+WcqOmmlumhteS4u+S9k+mhteS4reeahO+8jOeItumhtemdouW3sue7j+acieW6lemDqOWvvOiIquagj+S6hu+8jOWtkOmhtemdouS4jemcgOimgeWGjea3u+WKoOW6lemDqOWvvOiIquagj++8jOS5n+S4jeW+l+a3u+WKoOS6jOe6p+mhtemdoueahOagh+mimOagj+WIsOWtkOmhtemdouS4re+8jOWboOS4uuWtkOmhtemdouaYr+W1jOWll+WcqOmmlumhteS4u+S9k+mhteS4reeahO+8jOmmlumhteS4u+S9k+mhteWSjOWug+eahOWtkOmhtemdoumDveaYr+S4gOe6p+mhtemdou+8jOWboOatpOS4jeW+l+a3u+WKoOS6jOe6p+mhtemdoueahOagh+mimOagj+WIsOWtkOmhtemdouS4reOAglxuXG4jIyDkuIPjgIHlpoLmnpznlKjmiLfmsqHmnInmmI7noa7or7TmmI7or6XpobXpnaLorr7orqHpnIDmsYLvvIzpgqPlsLHmjInnhafku6XkuIvpobXpnaLpu5jorqTop4TliJnorr7orqFcbi0g6Zeq5bGP6aG177ya56aB5q2i5L2/55So5YWo5bGP5Zu+54mH77yM5LiA6Iis5L2/55So5Li76aKY55u45YWz55qE5riQ5Y+Y6Imy77yM54S25ZCO5bim5pyJ5LiA5Lqb6aKd5aSW55qE6IOM5pmv5YWD57Sg5aKe5by655WM6Z2i5bGC5qyh5oSf77yM5q+U5aaC77ya5qKm5bm75ZyG5ZyI5rOh5rOh44CB546755KD5pWI5p6c55qE5ZyG5b2i5b6E5ZCR5riQ5Y+Y562J562J5YWD57SgXG4tIOW8leWvvOmhte+8muWwvemHj+S4jeS9v+eUqOWFqOWxj+WbvueJh++8jOS4gOiIrOavj+S4gOmhteW8leWvvOmhteiDjOaZr+iJsuS5n+WPr+S7pea4kOWPmO+8jOeEtuWQjuavj+S4gOmhteWKn+iDveivtOaYjuS4gOiIrOaciemdnuWFqOWxj+WbvueJh+OAgeagh+mimOOAgeWJr+agh+mimOetieetie+8jOS9oOWPr+S7peW4puWFpeWFtuS7luWFg+e0oO+8jOiuqemhtemdouabtOWKoOe+juingu+8jOW5tuS4lOW8leWvvOmhteeahOW8leWvvOWbvueJh+mcgOimgeiHquW3see7mOWItnN2Z+WbvueJh++8jOW5tuWtmOaUvuWcqFxcYGRvYy9yZXNcXGDmlofku7blpLnkuIvpnaLvvIzlubblnKhodG1s5Lit5L2/55SoXG4tIOiDjOaZr+iJsuS4uuS6huWinuW8uuWxguasoeaEn++8jOa3u+WKoOeahOaipuW5u+azoeazoeaIluiAheWchuW9ouW+hOWQkea4kOWPmOWFg+e0oOeahGRpdu+8jOW/hemhu+WPquiDveWjsOaYjuS4ulxcYGNpcmNsZVxcYO+8jOW5tuS4lOS4gOS4qmRpdueahFxcYGJhY2tncm91bmQ6XFxg5Y+q6IO95aOw5piO5LiA5LiqXFxgcmFkaWFsLWdyYWRpZW50XFxg77yM5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgwLCAyMjksIDI1NSwgMC4xNSkgMCUsIHJnYmEoMCwgMCwgMCwgMCkgNzAlKTvvvIzlpoLmnpzpnIDopoHlpJrkuKpcXGByYWRpYWwtZ3JhZGllbnRcXGDlvoTlkJHmuJDlj5jog4zmma/vvIzmr4/kuKrlvoTlkJHmuJDlj5jog4zmma/pg73lv4Xpobvlo7DmmI7kuLrkuIDkuKpkaXboioLngrnvvIzmr4/kuKpkaXbnmoRcXGBiYWNrZ3JvdW5kOlxcYOWPquiDveWjsOaYjuS4gOS4qlxcYHJhZGlhbC1ncmFkaWVudFxcYOOAglxuYCJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bytefun-ai-mcp",
3
- "version": "1.13.117",
3
+ "version": "1.13.119",
4
4
  "description": "ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发",
5
5
  "main": "build/index.js",
6
6
  "type": "module",