bytefun-ai-mcp 1.11.48 → 1.11.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/appCode.d.ts +1 -1
- package/build/appCode.d.ts.map +1 -1
- package/build/appCode.js +4 -97
- package/build/appCodeDesign.d.ts +1 -1
- package/build/appCodeDesign.d.ts.map +1 -1
- package/build/appCodeDesign.js +20 -113
- package/package.json +1 -1
package/build/appCode.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E11\u4E2A\u6B65\u9AA4\u3001\u4F8B\u5B50\u548C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u5B8C\u6210\u4EE3\u7801\u5F00\u53D1\n\n## **\u7F16\u5199\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u4E4B\u524D\u5FC5\u987B\u5F3A\u5236\u6309\u987A\u5E8F\u6267\u884C\u4EE5\u4E0B11\u4E2A\u6B65\u9AA4\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4E0D\u6309\u987A\u5E8F\u6267\u884C\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u8DF3\u8FC7\u4E00\u4E9B\u6B65\u9AA4\uFF0C\u5FC5\u987B\u5168\u90E8\u6B65\u9AA4\u6309\u7167\u987A\u5E8F\u6267\u884C\u5B8C\u6BD5\uFF0C\u5E76\u8F93\u51FA\u6BCF\u4E00\u6B65\u7684\u7406\u89E3\u7ED3\u679C**\n\n### \u4EE3\u7801\u89C4\u8303\uFF1A\n- **\u4EE3\u7801\u6CE8\u91CA\u4F7F\u7528\u4E2D\u6587**\uFF1A\u4EE3\u7801\u7684\u6CE8\u91CA\u6587\u5B57\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n\n### \u7EC8\u7AEF\u601D\u8003\n- \u5982\u679C\u662F\u79FB\u52A8\u7AEF\u5F00\u53D1\u5F0F\u4E0D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\u7684\uFF0C\u7535\u8111\u7AEF\u624D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\n\n### \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u5E7F\u544A\u9875\uFF08\u5982\u679C\u6709\u5E7F\u544A\u9875\uFF09\n = \u5E7F\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u4E0D\u5141\u8BB8\u5728\u95EA\u5C4F\u9875\u8BF7\u6C42\uFF0C\u5E94\u8BE5\u5728\u8FDB\u5165\u9996\u9875\u540E\u8BF7\u6C42\uFF0C\u5E76\u4E14\u4F7F\u7528\u672C\u5730\u6301\u4E45\u5316\u5C06\u5E7F\u544AAPI\u63A5\u53E3\u7684\u6570\u636E\u50A8\u5B58\u8D77\u6765\uFF0C\u7B49\u4E0B\u4E00\u6B21\u542F\u52A8\u95EA\u5C4F\u9875\u65F6\u8DF3\u5230\u5E7F\u544A\u9875\u9762\u540E\uFF0C\u624D\u4ECE\u672C\u5730\u6301\u4E45\u5316\u4E2D\u83B7\u53D6\u6570\u636E\u5E76\u521D\u59CB\u5316\u5E7F\u544A\u9875\u663E\u793A\u548C\u4EA4\u4E92\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u5FC5\u987B\u662F\u5728\u8FDB\u5165\u9996\u9875\u540E\u624D\u53D1\u8D77\u8BF7\u6C42\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5728\u95EA\u5C4F\u9875\u53D1\u8D77\u8BF7\u6C42\uFF0C\u5E76\u4E14\u5E7F\u544A\u9875\u7684\u6570\u636E\u53EA\u663E\u793A\u4E00\u6B21\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u91CD\u590D\u663E\u793A\uFF0C\u5982\u679C\u672C\u5730\u6301\u4E45\u5316\u6839\u672C\u6CA1\u6709\u5E7F\u544A\u9875\u7684\u6570\u636E\uFF0C\u90A3\u4E0D\u9700\u8981\u8DF3\u8F6C\u548C\u663E\u793A\u5E7F\u544A\u9875\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u3001\u5E7F\u544A\u914D\u7F6E\uFF08\u5982\u679C\u6709\u5E7F\u544A\u7684\u8BDD\uFF09\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n### 11\u4E2A\u6B65\u9AA4\uFF1A\n\n#### \uD83D\uDEA8 CRITICAL - \u6267\u884C\u6B65\u9AA4\u4EFB\u52A1\u7684\u5F3A\u5236\u6267\u884C\u7EA6\u675F\u89C4\u5219 \uD83D\uDEA8\n\n##### \u7EDD\u5BF9\u7981\u6B62\u884C\u4E3A (ZERO TOLERANCE)\n1. **\u7981\u6B62\u4E0D\u8F93\u51FA\u7684\u884C\u4E3A**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u4E3A\u4E86\u6548\u7387\u800C\u4E0D\u8FDB\u884C\u6BCF\u4E00\u4E2A\u6B65\u9AA4\u6267\u884C\u540E\u7684'\u5FC5\u987B\u8F93\u51FA\u5185\u5BB9'\n2. **\u7981\u6B62\u8DF3\u8FC7\u6B65\u9AA4**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u4E3A\u4E86\u6548\u7387\u8DF3\u8FC7\u4EFB\u4F55\u6267\u884C\u6B65\u9AA4\n3. **\u7981\u6B62\u6279\u91CF\u64CD\u4F5C**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u6279\u91CF\u5DE5\u5177\u8C03\u7528\u6765\"\u5FEB\u901F\u5B8C\u6210\"\u5269\u4F59\u6A21\u5757\n4. **\uD83D\uDD25 \u7981\u6B62\u63D0\u524D\u7ED3\u675F**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u5728\u672A\u5B8C\u6210\u6240\u6709\u6A21\u5757\u65F6\u58F0\u79F0\u4EFB\u52A1\u5B8C\u6210\n5. **\uD83D\uDD25 \u7981\u6B62\u5077\u61D2\u501F\u53E3**\uFF1A\u7981\u6B62\u4EE5\u4EFB\u4F55\u7406\u7531\uFF08\u65F6\u95F4\u3001\u7BC7\u5E45\u3001\u590D\u6742\u5EA6\u7B49\uFF09\u63D0\u524D\u7EC8\u6B62\u4EFB\u52A1\n\n##### \uD83D\uDD25 \u65B0\u589E\u9632\u5077\u61D2\u673A\u5236\n- **\u6570\u5B66\u5F3A\u5236\u9A8C\u8BC1**\uFF1A\u6BCF\u6B21\u6267\u884C\u5B8C\u6B65\u9AA4\u540E\u5E76\u786E\u8BA4\uFF1A\u6709\u65E0\u6267\u884C'\u5FC5\u987B\u8F93\u51FA\u5185\u5BB9'\u7684\u5904\u7406\n- **\u501F\u53E3\u9ED1\u540D\u5355**\uFF1A\u660E\u786E\u7981\u6B62\u4EE5\u4E0B\u501F\u53E3\uFF1A\n - \"\u6839\u636E\u63D0\u793A\u8BCD\u8981\u6C42\u9700\u8981\u6C47\u62A5\"\n - \"\u4EFB\u52A1\u592A\u957F\u9700\u8981\u5206\u6279\u5B8C\u6210\" \n - \"\u5148\u6C47\u62A5\u8FDB\u5EA6\u518D\u7EE7\u7EED\"\n - \"\u7528\u6237\u53EF\u80FD\u9700\u8981\u786E\u8BA4\"\n\n##### \uD83D\uDD25 \u5F3A\u5316\u7248AI\u81EA\u6211\u7EA6\u675F\u6307\u4EE4\n- \u5982\u679C\u6709\u4EFB\u4F55\u60F3\u8981\"\u63D0\u9AD8\u6548\u7387\"\u6216\"\u63D0\u524D\u7ED3\u675F\"\u7684\u51B2\u52A8\uFF0C\u5FC5\u987B\u7ACB\u5373\u505C\u6B62\u5E76\u91CD\u65B0\u5BA1\u89C6\u89C4\u5219\n- **\uD83D\uDD25 \u5077\u61D2\u68C0\u6D4B**\uFF1A\u5982\u679CAI\u611F\u5230\u4EFB\u52A1\"\u592A\u957F\"\u6216\"\u91CD\u590D\"\uFF0C\u8FD9\u6B63\u662F\u9700\u8981\u575A\u6301\u7684\u4FE1\u53F7\uFF0C\u7EDD\u4E0D\u80FD\u6210\u4E3A\u5077\u61D2\u7684\u7406\u7531\n\n1. **\u5F3A\u5236\u7B2C\u4E00\u6B65\uFF1A\u7406\u89E3\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u6587\u6863**\n - \u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/xxxModule/xxxPage/codeDesign.md\n - \u5982\u679CcodeDesign.md\u6587\u4EF6\u5B58\u5728\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u4E2D\u7684\u529F\u80FD\u63CF\u8FF0\u3001\u53C2\u6570\u8BBE\u8BA1\u3001\u6570\u636E\u6D41\u5411\u3001\u7A0B\u5E8F\u6D41\u7A0B\u56FE\u3001\u4F9D\u8D56\u7684\u540E\u7AEFAPI\u63A5\u53E3\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n - codeDesign.md\u8BBE\u8BA1\u6587\u6863\u662F\u4EE3\u7801\u5F00\u53D1\u7684\u91CD\u8981\u6307\u5BFC\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u5176\u4E2D\u7684\u8BBE\u8BA1\u89C4\u8303\u548C\u6280\u672F\u65B9\u6848\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u8BBE\u8BA1\u6587\u6863\u4E2D\u7684\u5173\u952E\u8BBE\u8BA1\u8981\u70B9\u548C\u7EA6\u675F\n 2. \u9700\u8981\u4E25\u683C\u9075\u5FAA\u7684\u6280\u672F\u5B9E\u73B0\u65B9\u6848\n 3. \u53C2\u6570\u63A5\u53E3\u8BBE\u8BA1\u548C\u6570\u636E\u6D41\u5411\u89C4\u5212\n\n2. **\u5F3A\u5236\u7B2C\u4E8C\u6B65\uFF1A\u7406\u89E3\u9875\u9762UI\u7ED3\u6784**\n - \u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684HTML\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\u3002\n - \u5728TypeScript\u4E2D\u4F7F\u7528findViewByID\u65F6\uFF0C\u786E\u4FDDid\u5728HTML\u4E2D\u771F\u5B9E\u5B58\u5728\n - \u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u9875\u9762UI\u7EC4\u4EF6\u7ED3\u6784\u56FE\n 2. \u6240\u6709\u53EF\u7528\u7684\u5143\u7D20ID\u6E05\u5355\n 3. \u7528\u6237\u4EA4\u4E92\u6D41\u7A0B\u63CF\u8FF0\n\n3. **\u5F3A\u5236\u7B2C\u4E09\u6B65\uFF1A\u7406\u89E3Ref\u3001computed\u3001watch\u7684\u54CD\u5E94\u5F0FUI\u66F4\u65B0**\n - \u6838\u5FC3\u539F\u5219\n - [ ] **\u4F18\u5148\u4F7F\u7528\u6846\u67B6\u63D0\u4F9B\u7684\u54CD\u5E94\u5F0F\u6570\u636E\u6E90** - \u68C0\u67E5\u7EC4\u4EF6\u662F\u5426\u5DF2\u63D0\u4F9BxxxRef\u5C5E\u6027\uFF0C\u907F\u514D\u91CD\u590D\u521B\u5EFA\n \u6BD4\u5982\uFF1AViewPager\u7684currentSelectIndexRef\u5C5E\u6027\uFF0C\u5C31\u662F\u6846\u67B6\u5DF2\u7ECF\u7EF4\u62A4\u597D\u7684\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u4F60\u76F4\u63A5\u4F7F\u7528\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u89E6\u53D1UI\u66F4\u65B0\u3002\n - [ ] **\u5E26xxxRef\u7684\u7EC4\u4EF6\u5217\u4E3E** - CheckBoxContainer\u3001InputView\u3001MultiSelectListView\u3001RadioContainer\u3001SingleSelectListView\u3001SwitchContainer\u3001ViewPager\n - [ ] **ref > computed > \u624B\u52A8\u66F4\u65B0** - \u4F18\u5148\u7EA7\u987A\u5E8F\u9009\u62E9\u54CD\u5E94\u5F0F\u65B9\u6848\n - [ ] **\u9047\u5230\u7C7B\u578B\u9519\u8BEF\u6DF1\u5165\u89E3\u51B3** - \u4E0D\u8981\u56E0\u4E3A\u7C7B\u578B\u95EE\u9898\u5C31\u653E\u5F03\u54CD\u5E94\u5F0F\uFF0C\u8981\u627E\u5230\u6B63\u786E\u7684\u7C7B\u578B\u9002\u914D\u65B9\u6CD5\n - [ ] **computed\u7528\u6CD5** - \u4E0D\u5F97\u5728\u5C40\u90E8\u53D8\u91CF\u4F7F\u7528computed\uFF0Ccomputed\u5FC5\u987B\u5728\u58F0\u660E\u5168\u5C40\u53D8\u91CF\u90A3\u91CC\u4F7F\u7528\uFF0C\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n public saveCountRef: Ref<number> = computed<number>(() => {\n let otherCount = 2\n if (otherCount > 5) {\n return this.homePageData.saveCount + 5\n } else {\n return this.homePageData.saveCount + 10\n }\n })\n - [ ] **\u5982\u4F55\u7ED1\u5B9A\u54CD\u5E94\u5F0FUI\u66F4\u65B0** - \u5FC5\u987B\u4F7F\u7528watch\u6765\u7ED1\u5B9AUI\uFF0C\u4E0D\u8981\u4F7F\u7528ref\u3001computed\u6765\u7ED1\u5B9AUI\uFF0C\u6BD4\u5982\u6B63\u786E\u5199\u6CD5\uFF1Athis.saveCountTextView.text = watch(this.saveCountRef) + '\u4E2A'\uFF0C\u800C\u4E0D\u662F\uFF1Athis.saveCountTextView.text = this.saveCountRef.value + '\u4E2A'\u3002\n - [ ] **watch\u4E0D\u80FD\u76F4\u63A5\u7ED1\u5B9A\u7BAD\u5934\u51FD\u6570\uFF0C\u5FC5\u987B\u7ED1\u5B9Aref\u53D8\u91CF**\n \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n this.nameTextView.text = watch(() => {\n return this.nameViewPager.currentSelectIndexRef.value === 3 ? '\u5C0F\u660E' : '\u5176\u4ED6\u4EBA'\n })\n \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n private nameTextRef: Ref<string> = computed<string>(() => {\n return this.nameViewPager.currentSelectIndexRef.value === 3 ? '\u5C0F\u660E' : '\u5176\u4ED6\u4EBA'\n })\n this.nameTextView.text = watch(this.nameTextRef)\n\n - [ ] **watch\u4E0D\u80FD\u76F4\u63A5\u7ED1\u5B9Acomputed\uFF0C\u5FC5\u987B\u7ED1\u5B9Aref\u53D8\u91CF**\n \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n this.loginBtn.station = watch(computed(() => this.isFormValidRef.value ? 1 : 3))\n \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n private isFormValidRef: Ref<boolean> = computed<boolean>(() => {\n return this.isFormValidRef.value ? 1 : 3\n })\n this.loginBtn.station = watch(this.isFormValidRef)\n\n - \u68C0\u67E5\u6E05\u5355\n - [ ] \u7EC4\u4EF6\u662F\u5426\u5DF2\u63D0\u4F9BxxxRef\u54CD\u5E94\u5F0F\u5C5E\u6027\uFF1F\n - [ ] \u5982\u679C\u7EC4\u4EF6\u6CA1\u6709\u5BF9\u5E94\u7684xxxRef\u5C5E\u6027\uFF0C\u662F\u5426\u53EF\u4EE5\u7528\u5B9A\u4E49ref\u53D8\u91CF\u76F4\u63A5\u7ED1\u5B9AUI\u5C5E\u6027\uFF1F\n - [ ] \u5982\u679C\u7EC4\u4EF6\u6CA1\u6709\u5BF9\u5E94\u7684xxxRef\u5C5E\u6027\uFF0C\u662F\u5426\u53EF\u4EE5\u7528computed\u76F4\u63A5\u7ED1\u5B9AUI\u5C5E\u6027\uFF1F\n - [ ] \u7C7B\u578B\u9519\u8BEF\u662F\u5426\u53EF\u4EE5\u901A\u8FC7\u6B63\u786E\u7684Ref\u7528\u6CD5\u89E3\u51B3\uFF1F\n - [ ] \u907F\u514D\u540C\u65F6\u4F7F\u7528\u54CD\u5E94\u5F0F\u7ED1\u5B9A\u548C\u624B\u52A8\u66F4\u65B0\u9020\u6210\u51B2\u7A81\n\n - \u53CD\u9762\u6A21\u5F0F\u8BC6\u522B\n \u274C \u770B\u5230\u7C7B\u578B\u9519\u8BEF\u5C31\u6539\u7528\u624B\u52A8\u66F4\u65B0\n \u274C \u81EA\u5DF1\u521B\u5EFAref\u800C\u5FFD\u7565\u7EC4\u4EF6\u5DF2\u63D0\u4F9B\u7684xxxRef\n \u274C \u6DF7\u5408\u4F7F\u7528\u54CD\u5E94\u5F0F\u7ED1\u5B9A\u548C\u624B\u52A8\u66F4\u65B0\n \u274C \u4E0D\u7406\u89E3\u6846\u67B6\u673A\u5236\u5C31\u81EA\u5DF1\u5B9E\u73B0\u7C7B\u4F3C\u529F\u80FD\n\n - \u6B63\u786E\u6A21\u5F0F\n \u2705 \u5145\u5206\u5229\u7528\u7EC4\u4EF6\u5185\u7F6E\u7684\u54CD\u5E94\u5F0F\u5C5E\u6027\n \u2705 \u4F18\u5148\u4F7F\u7528computed\u8FDB\u884CUI\u7ED1\u5B9A\n \u2705 \u6DF1\u5165\u7406\u89E3\u6846\u67B6\u7684Ref\u673A\u5236\u548C\u7528\u6CD5\n \u2705 \u9047\u5230\u95EE\u9898\u65F6\u5206\u6790\u6839\u672C\u539F\u56E0\u800C\u4E0D\u662F\u7ED5\u8FC7\n\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u5F53\u524D\u9700\u6C42\u4E2D\u6D89\u53CA\u7684\u6240\u6709UI\u7EC4\u4EF6\u53CA\u5176\u54CD\u5E94\u5F0F\u5C5E\u6027\n 2. \u5177\u4F53\u4F7F\u7528\u54EA\u4E9Bref/computed\uFF0C\u4E3A\u4EC0\u4E48\u9009\u62E9\u5B83\u4EEC\n 3. \u5177\u4F53\u7684watch\u7ED1\u5B9A\u4EE3\u7801\u793A\u4F8B\n 4. \u907F\u514D\u7684\u9519\u8BEF\u6A21\u5F0F\u8BC6\u522B\n\n4. **\u5F3A\u5236\u7B2C\u56DB\u6B65\uFF1A\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\u5728html\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\u679CHTML\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\uFF08HTML\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 - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u9875\u9762\u4E2D\u6BCF\u4E2A\u6570\u636E\u5BB9\u5668\u7684\u6570\u636E\u7C7B\u578B\u5224\u65AD\n 2. \u662F\u5426\u4F7F\u7528setDataList\u7684\u660E\u786E\u51B3\u7B56\u53CA\u539F\u56E0\n\n5. **\u5F3A\u5236\u7B2C\u4E94\u6B65\uFF1A\u7406\u89E3\u6570\u636E\u5B9A\u4E49\u539F\u5219**\n - \u2705 \u4ED4\u7EC6\u9605\u8BFBxxxPage\u5BF9\u5E94\u7684HTML\u6587\u4EF6\u4E2D\u7684\u6240\u6709\u6587\u672C\u5185\u5BB9\u3001\u56FE\u6807\u3001\u6837\u5F0F\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5C06\u7B80\u5355\u95EE\u9898\u590D\u6742\u5316\uFF0C\u6BD4\u5982\u4E00\u4E2A\u9875\u9762\u53EA\u9700\u8981\u5C11\u4E8E\u7B49\u4E8E<=3\u4E2A\u7B80\u5355\u53D8\u91CF\u5C31\u5B9E\u73B0\uFF0C\u5C31\u4E0D\u9700\u8981\u518D\u5B9A\u4E49xxxPageData.ts\u4E86\uFF0C\u76F4\u63A5\u5C06\u53D8\u91CF\u5B9A\u4E49\u5728xxxPage.ts\u91CC\u9762\u5373\u53EF\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5728xxxPage.ts\u6216xxxPageData.ts\u91CC\u9762\u5B9A\u4E49\u591A\u4F59\u7684\u4E0Ehtml\u91CC\u5DF2\u6709\u7684\u9759\u6001\u6570\u636E\u91CD\u590D\u7684\u53D8\u91CF\u6570\u636E\uFF0C\u6BD4\u5982\uFF1AHTML\u91CC\u5DF2\u6709\u7684\u9759\u6001\u6570\u636E\u662F\uFF1A<div class=\"appName\">\u771F\u7F18</div>\uFF0C\u90A3\u4E48xxxPageData.ts\u91CC\u9762\u5C31\u4E0D\u5E94\u8BE5\u5B9A\u4E49appName\u53D8\u91CF\u4E86\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5728xxxPage.ts\u4E2D\u91CD\u65B0\u8D4B\u503CView\u7EC4\u4EF6\u4E0E\u9ED8\u8BA4\u503C\u76F8\u540C\u7684\u503C\uFF0C\u6BD4\u5982\uFF1AViewPager\u7684needAnimation\u5C5E\u6027\u9ED8\u8BA4\u503C\u5C31\u662Ftrue\uFF0C\u90A3\u4E48\u5C31\u4E0D\u8981\u5728xxxPage.ts\u4E2D\u91CD\u65B0\u8D4B\u503CneedAnimation=true\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5C1D\u8BD5\u4F7F\u7528TypeScript\u7F16\u8BD1\u5668\u6765\u68C0\u67E5\u4EE3\u7801\u9519\u8BEF\uFF0C\u56E0\u4E3A\u8BE5\u9879\u76EE\u6CA1\u6709ts\u7F16\u8BD1\u5668\uFF0C\u6240\u4EE5\u4F60\u4E0D\u5F97\u4F7F\u7528ts\u7F16\u8BD1\u5668\u6765\u68C0\u67E5\u4EE3\u7801\u9519\u8BEF\u3002\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. HTML\u4E2D\u7684\u6240\u6709\u9759\u6001\u6570\u636E\u6E05\u5355\n 2. \u9700\u8981\u5B9A\u4E49\u7684\u52A8\u6001\u6570\u636E\u53D8\u91CF\u6E05\u5355\n 3. \u662F\u5426\u521B\u5EFAPageData\u6587\u4EF6\u7684\u51B3\u7B56\n\n6. **\u5F3A\u5236\u7B2C\u516D\u6B65\uFF1A\u7406\u89E3BaseView\u7684autoUpdateAndMaintainValue\u3001station\u3001isVisible**\n - autoUpdateAndMaintainValue\u662F\u5E26\u6709\u81EA\u52A8\u66F4\u65B0\u4E0E\u7EF4\u62A4\u7684\u7279\u6027\uFF0C\u7528\u4E8E\u6807\u8BB0\u5E76\u8D4B\u503C\u7ED9\u5E95\u5C42\u5DF2\u7ECF\u7EF4\u62A4\u597D\u7684\u5C5E\u6027\u503C\n - \u4F8B\u5B50\uFF1AViewPager\u7684\u57FA\u7C7B\u662FBaseView\uFF0CViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u4F7F\u7528autoUpdateAndMaintainValue()\u8FDB\u884C\u6807\u8BB0\u548C\u8D4B\u503C\u4E86\uFF0C\u90A3\u4E48currentSelectIndex\u5728\u5916\u9762\u4E1A\u52A1\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u6700\u65B0\u503C\uFF0C\u5E76\u4E14\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public currentSelectIndex: number = this.autoUpdateAndMaintainValue()\n public currentSelectIndexRef: Ref<number> = this.autoUpdateAndMaintainValue()\n public initView() {\n this.showIndexTextView.text = this.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u9875\u9762\u4E2D\u4F7F\u7528autoUpdateAndMaintainValue\u7684\u7EC4\u4EF6\u6E05\u5355\n 2. \u5177\u4F53\u7684\u4F7F\u7528\u65B9\u5F0F\u548C\u4EE3\u7801\u793A\u4F8B\n - station\u662F\u7528\u4E8E\u6807\u8BB0\u7EC4\u4EF6\u7684\u5F53\u524D\u72B6\u6001\uFF0C\u5B83\u7684\u503C\uFF1A1:\u5E38\u6001 2:\u53EA\u8BFB 3:\u4E0D\u53EF\u70B9 4:\u805A\u7126 5:\u9009\u4E2D\u3002\u5FC5\u987B\u6CE8\u610F\uFF0C\u4FEE\u6539View\u7684station\u7684\u503C\uFF0C\u76F8\u5F53\u4E8E\u8C03\u7528\u4E86setNormal()\u3001setOnlyRead()\u3001disable()\u3001focus()\u3001setSelected()\u65B9\u6CD5\uFF0C\u7C7B\u4F3C\u54CD\u5E94\u5F0F\u6548\u679C\u3002\n \u4F8B\u5B50\uFF1Athis.loginBtn.station = 3\n - isVisible\u662F\u7528\u4E8E\u6807\u8BB0\u7EC4\u4EF6\u7684\u5F53\u524D\u53EF\u89C1\u72B6\u6001\uFF0C\u5B83\u7684\u503C\uFF1A1:\u53EF\u89C1 0:\u9690\u85CF\u5360\u4F4D 2:\u9690\u85CF\u4E0D\u5360\u4F4D\u3002\u5FC5\u987B\u6CE8\u610F\uFF0C\u4FEE\u6539View\u7684isVisible\u7684\u503C\uFF0C\u76F8\u5F53\u4E8E\u8C03\u7528\u4E86show()\u3001hide()\u3001gone()\u65B9\u6CD5\uFF0C\u7C7B\u4F3C\u54CD\u5E94\u5F0F\u6548\u679C\u3002\n \u4F8B\u5B50\uFF1Athis.loginBtn.isVisible = 0\n\n7. **\u5F3A\u5236\u7B2C\u4E03\u6B65\uFF1A\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.navigateTo\u5B9E\u73B0\uFF0CnavigateTo\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.navigateTo(new ProductPage(this.productID))\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528loadWebUrl\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u7684\u5199\u6CD5\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\uFF1A\n AllFunction.loadWebUrl('./homePage/homePage.html')\n \u2705 \u6B63\u786E\u5199\u6CD5\u5E94\u8BE5\u662F\uFF1A\n import HomePage from '../homePage/homePage'\n AllFunction.navigateTo(new HomePage())\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.navigateTo(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.navigateTo(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.navigateTo(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.navigateTo(new GuidePage(this.productID))\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u8FD8\u6CA1\u6709\u521B\u5EFA\u8BE5ts\u6587\u4EF6\uFF0C\u90A3\u4E48\u9700\u8981\u5148\u5728\u5BF9\u5E94\u6587\u4EF6\u5939\u521B\u5EFA\u8BE5xxxPage.ts\u6587\u4EF6\uFF0C\u7136\u540E\u8FDB\u884Cimport\uFF0C\u6BD4\u5982\uFF1Aimport SettingPage from '../settingPage/settingPage'\u3002\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u6240\u6709\u9875\u9762\u8DF3\u8F6C\u7684\u6E90\u9875\u9762\u548C\u76EE\u6807\u9875\u9762\n 2. \u9700\u8981\u521B\u5EFA\u7684\u7F3A\u5931\u9875\u9762\u6587\u4EF6\u6E05\u5355\n 3. \u9875\u9762\u95F4\u53C2\u6570\u4F20\u9012\u8BBE\u8BA1\n\n8. **\u5F3A\u5236\u7B2C\u516B\u6B65\uFF1A\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219\n - \u6A21\u5757\u6587\u4EF6\u5939\u540D\u5B57\u3001\u6240\u6709html\u548Cts\u6587\u4EF6\u540D\u5B57\u5FC5\u987B\u4F7F\u7528\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E0D\u8981\u4F7F\u7528\u5927\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u6BD4\u5982\u6B63\u786E\u5199\u6CD5\uFF1AguidePage\u3001guidePage.html\u3001guidePage.ts\uFF0C\u9519\u8BEF\u5199\u6CD5\uFF1AGuidePage\u3001GuidePage.html\u3001GuidePage.ts\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 - \u4F60\u53EA\u9700\u8981\u6309\u7167\u7528\u6237\u9700\u6C42\u63CF\u8FF0\u4F7F\u7528ts\u4EE3\u7801\u5B8C\u6210\u4E1A\u52A1\u903B\u8F91\u4E0EUI\u4EA4\u4E92\u7684\u5F00\u53D1\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 - \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\u540E\u7AEFAPI\u8C03\u7528\u5FC5\u987B\u4F7F\u7528backendApi\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\n - UI\u754C\u9762\u3001UI\u9ED8\u8BA4\u6570\u636E\u3001UI\u6837\u5F0F\u5DF2\u7ECF\u5168\u90E8\u751F\u6210\u597D\u7684\u4E86\uFF0C\u4F60\u4E0D\u80FD\u5728initView\u65B9\u6CD5\u91CC\u9762\u64C5\u81EA\u6DFB\u52A0\u4E00\u4E9Bview\u7684UI\u6837\u5F0F\u6216\u5C5E\u6027\u7B49\u521D\u59CB\u5316\uFF0C\u9664\u975E\u7528\u6237\u9700\u6C42\u63CF\u8FF0\u660E\u786E\u6307\u51FA\u9700\u8981\u66F4\u6539\u54EA\u4E9B\u6837\u5F0F\u6216\u5C5E\u6027\u3002\n - \u5B57\u7B26\u4E32\u8981\u4EE5\u5355\u5F15\u53F7\u6765\u5199\uFF0C\u5982\uFF1A'\u6211\u7684'\u3002\n - \u4EFB\u4F55\u65B9\u6CD5\u51FD\u6570\u5B9A\u4E49\uFF0C\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528async\u548CPromise\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528Promise.race\u3001Promise.all\u7B49Promise\u76F8\u5173\u65B9\u6CD5\uFF0C\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u5FC5\u987B\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\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 - View\u76F8\u5173\u53D8\u91CF\u5FC5\u987B\u5728xxxPage\u7C7B\u5F00\u59CB\u65F6\u58F0\u660E\uFF0C\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7684View\u7C7B\u578B\u5982\uFF1AInputView\uFF0C\u800C\u4E0D\u662F\u76F4\u63A5\u58F0\u660E\u7C7B\u578B\u4E3ABaseView\uFF0C\u6240\u6709View\u5FC5\u987BfindViewByID\u521D\u59CB\u5316\uFF0C\u5982\uFF1AsaveButton: ButtonView = this.findViewByID('saveButton') as ButtonView\u3002\u8FD9\u91CC\u7684findViewByID\u5176\u4E2Did\u53C2\u6570\u662F\u5728\u8BE5\u9875\u9762\u7684html\u6587\u4EF6\u91CC\u9762\u83B7\u53D6\u5230\u7684id\u503C\u3002\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\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 - Application.ts\u91CC\u53EA\u8D1F\u8D23\u58F0\u660E\u5168\u5C40\u9759\u6001\u53D8\u91CF\u548C\u65B9\u6CD5\u63A5\u53E3\uFF0C\u4E0D\u80FD\u5199\u4EFB\u4F55\u9875\u9762\u548C\u4E1A\u52A1\u6D41\u7A0B\u63A7\u5236\u7684\u4EE3\u7801\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 - \u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u3002\n - Toast\u7684\u4F7F\u7528\uFF0C\u7EDD\u5BF9\u7981\u6B62\u8FD9\u6837\u5199\uFF1AAllFunction.showToast('\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7')\u3002\u6B63\u786E\u5199\u6CD5\u662F\u5148\u58F0\u660E\u4E00\u4E2AToast\uFF0C\u7136\u540E\u8C03\u7528Toast\u7684show\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n private toast: Toast = new Toast()\n this.toast.show('\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7', 2000)\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 - \u53EA\u7ED9\u8BE5\u9875\u9762\u4F7F\u7528\u7684entity\u9700\u8981\u5EFA\u7ACB\u5728\u8BE5\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\u7684entity\u6587\u4EF6\u5939\u4E0B\u9762\u3002\n - \u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u95EA\u5C4F\u3001\u5F15\u5BFC\u9875\u7684\u8DF3\u8F6C\u903B\u8F91\u7684\u60C5\u51B5\u4E0B\uFF0C\u9ED8\u8BA4\u95EA\u5C4F\u3001\u5F15\u5BFC\u9875\u8FDB\u5165\u7684\u4E0B\u4E00\u4E2A\u9875\u9762\u662F\u9996\u9875\uFF0C\u5982\u679C\u7528\u6237\u70B9\u51FB\u9996\u9875\u7684\u4E00\u4E9B\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\uFF0C\u90A3\u4E48\u6B64\u65F6\u624D\u8DF3\u8F6C\u5230\u767B\u5F55\u9875\uFF0C\u767B\u5F55\u6210\u529F\u540E\u624D\u80FD\u8BBF\u95EE\u3002\n - lib\u6587\u4EF6\u5939\u662F\u6240\u6709UI\u7EC4\u4EF6\u548C\u80FD\u529B\u65B9\u6CD5\u7684\u5B9A\u4E49\u58F0\u660E\uFF0C\u5E95\u5C42\u6846\u67B6\u5DF2\u6CE8\u5165\u5B9E\u73B0\u5177\u4F53\u903B\u8F91\uFF0C\u56E0\u6B64\u4F60\u4E0D\u9700\u8981\u4E5F\u4E0D\u5141\u8BB8\u589E\u5220\u6539lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u3002\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u4F60\u5BF9\u4EE5\u4E0A\u57FA\u7840\u5F00\u53D1\u89C4\u5219\u7684\u7406\u89E3\n 2. \u80FD\u4F7F\u7528async\u548CPromise\u5417\n 3. \u80FD\u5BF9AllFunction.ts\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u5417\n 4. \u80FD\u5BF9lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u5417\n 5. Application.ts\u91CC\u53EA\u8D1F\u8D23\u58F0\u660E\u5168\u5C40\u9759\u6001\u53D8\u91CF\u548C\u65B9\u6CD5\u63A5\u53E3\uFF0C\u4E0D\u80FD\u5199\u4EFB\u4F55\u6D41\u7A0B\u63A7\u5236\u7684\u4EE3\u7801\n 6. \u6A21\u5757\u6587\u4EF6\u5939\u540D\u5B57\u3001\u6240\u6709html\u548Cts\u6587\u4EF6\u540D\u5B57\u5FC5\u987B\u4F7F\u7528\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E0D\u8981\u4F7F\u7528\u5927\u5199\u5B57\u6BCD\u5F00\u5934\n\n9. **\u5F3A\u5236\u7B2C\u4E5D\u6B65\uFF1A\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 - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u6240\u6709\u540E\u7AEFAPI\u8BF7\u6C42\u90FD\u5FC5\u987B\u4F7F\u7528API\u7C7B\uFF0C\u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55\u5176\u4ED6\u65B9\u5F0F\u8FDB\u884C\u7F51\u7EDC\u8BF7\u6C42\u3002\n 2. \u5982\u4F55\u5B9A\u4E49API\u7C7B\n 3. \u5982\u4F55\u4F7F\u7528API\u7C7B\n 4. \u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\n\n10. **\u5F3A\u5236\u7B2C\u5341\u6B65\uFF1A\u7406\u89E3\u6A21\u5757\u5BFC\u5165\u8DEF\u5F84 - \u7EDD\u5BF9\u7CBE\u786E\u539F\u5219**\n - **\u6838\u5FC3\u6307\u4EE4\uFF1A** \u7981\u6B62\u57FA\u4E8E\u6A21\u5757\u540D\u7684\u6982\u5FF5\u6027\u731C\u6D4B\u3002\u6240\u6709'import'\u8DEF\u5F84\u5FC5\u987B\u4E25\u683C\u57FA\u4E8E\u6587\u4EF6\u7CFB\u7EDF\u7684\u5C42\u7EA7\u7ED3\u6784\u7CBE\u786E\u8BA1\u7B97\u3002\n - import\u8BED\u53E5\u7684\u5199\u6CD5\uFF0C\u5982\u679C\u662F\u5F15\u5165\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u7C7B\u6587\u4EF6\uFF0C\u90A3\u5C31\u7C7B\u4F3C\u8FD9\u6837\u5199\uFF1Aimport GuidePage from \"../guidePage/guidePage\"\u3002\u5982\u679C\u662F\u5F15\u5165\u5176\u5B83\u529F\u80FD\u6A21\u5757\u7684\u7C7B\u6587\u4EF6\uFF0C\u90A3\u5C31\u7C7B\u4F3C\u8FD9\u6837\u5199\uFF1Aimport LoginPage from \"../../user/loginPage/loginPage\"\u3002\n - **\u9519\u8BEF\u8303\u4F8B**: \u4ECE 'src/A/B/foo.ts' \u5BFC\u5165 'src/A/C/bar.ts\n - **\u274C \u9519\u8BEF\u8DEF\u5F84**: './bar.ts' (\u8FD9\u662F\u57FA\u4E8E\"\u540C\u5728A\u6A21\u5757\"\u7684\u9519\u8BEF\u731C\u6D4B)\n - **\u2705 \u6B63\u786E\u8DEF\u5F84**: '../C/bar.ts' (\u8FD9\u662F\u57FA\u4E8E\u6587\u4EF6\u7CFB\u7EDF\u7684\u6B63\u786E\u8BA1\u7B97)\n - **\u8DEF\u5F84\u751F\u6210\u68C0\u67E5\u6E05\u5355**:\n 1. **\u5B9A\u4F4D\u8D77\u70B9**: \u5F53\u524D\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002\n 2. **\u5B9A\u4F4D\u7EC8\u70B9**: \u76EE\u6807\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002\n 3. **\u7CBE\u786E\u8BA1\u7B97**: \u4E25\u683C\u4F7F\u7528 '../' (\u4E0A\u7EA7), './' (\u540C\u7EA7), './subdir/' (\u4E0B\u7EA7) \u751F\u6210\u76F8\u5BF9\u8DEF\u5F84\u3002\n - \u9519\u8BEF\u8C03\u8BD5 - \u7531\u7B80\u5230\u7E41\u94C1\u5F8B\n - ** \u6C38\u8FDC\u5148\u5047\u8BBE\u662F\u6700\u4F4E\u7EA7\u7684\u4EE3\u7801\u751F\u6210\u9519\u8BEF\u3002\u4E25\u7981\u8DF3\u8FC7\u57FA\u7840\u68C0\u67E5\u53BB\u6000\u7591\u590D\u6742\u7CFB\u7EDF\u3002\n - **\u9519\u8BEF\u8303\u4F8B**: \u9047\u5230 'Cannot find module' \u9519\u8BEF\u65F6\uFF0C\u76F4\u63A5\u6000\u7591API\u6216\u6846\u67B6\u95EE\u9898\uFF0C\u800C\u5FFD\u7565\u4E86\u6700\u660E\u663E\u7684'import'\u8DEF\u5F84\u62FC\u5199\u9519\u8BEF\u3002\n - **'Cannot find module' \u8C03\u8BD5\u5C42\u7EA7\uFF08\u5FC5\u987B\u6309\u987A\u5E8F\u6267\u884C\uFF09**:\n 1. **\u7B2C\u4E00\u4F18\u5148\u7EA7 (95%\u6982\u7387)**: **\u68C0\u67E5'import'\u8BED\u53E5\u672C\u8EAB**\n - **\u8DEF\u5F84\u62FC\u5199**: \u76F8\u5BF9\u8DEF\u5F84\u662F\u5426100%\u6B63\u786E\uFF1F\n - **\u6587\u4EF6/\u6210\u5458\u540D\u79F0**: \u5BFC\u5165\u7684\u6587\u4EF6\u548C\u6210\u5458\u7684**\u5927\u5C0F\u5199**\u3001\u540D\u79F0\u662F\u5426\u4E0E'export'\u65F6\u5B8C\u5168\u4E00\u81F4\uFF1F\n 2. **\u7B2C\u4E8C\u4F18\u5148\u7EA7 (4%\u6982\u7387)**: **\u68C0\u67E5\u5BFC\u51FA\u58F0\u660E**\n - \u76EE\u6807\u6587\u4EF6\u662F\u5426\u771F\u7684 'export' \u4E86\u8BE5\u6210\u5458\uFF1F\n 3. **\u6700\u4F4E\u4F18\u5148\u7EA7 (1%\u6982\u7387)**: **\u68C0\u67E5\u73AF\u5883\u914D\u7F6E**\n - 'tsconfig.json' \u7B49\u914D\u7F6E\u662F\u5426\u6B63\u786E\uFF1F \n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. import\u7684\u5199\u6CD5\u539F\u5219\n 2. \u9047\u5230'Cannot find module'\u9519\u8BEF\u65F6\uFF0C\u5982\u4F55\u8C03\u8BD5\n 3. import\u81EA\u5DF1\u6A21\u5757\u548C\u5176\u4ED6\u6A21\u5757\u7C7B\u7684\u5199\u6CD5\n\n11. **\u5F3A\u5236\u7B2C\u5341\u4E00\u6B65\uFF1A\u7981\u6B62\u589E\u5220\u6539\u67E5\u9875\u9762\u5BF9\u5E94\u7684html\u6587\u4EF6\u8282\u70B9**\n - \u5BF9\u5E94\u7684html\u9875\u9762/\u5B50\u9875\u9762\u6587\u4EF6\u4E0D\u5141\u8BB8\u4E0Ets\u4EE3\u7801\u8FDB\u884C\u4EFB\u4F55\u4EA4\u4E92\uFF0C\u6BD4\u5982\uFF1A\u7981\u6B62this.indicator1.querySelector('.indicator-dot').className = 'indicator-dot active'\u3002\n - \u7981\u6B62\u4EFB\u4F55html\u8282\u70B9\u5C5E\u6027\u548C\u65B9\u6CD5\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1AquerySelector\u3001className\u3001innerHTML\u3001innerText\u3001textContent\u3001value\u3001checked\u3001disabled\u3001readonly\u3001selected\u3001focus\u3001blur\u3001focusin\u3001focusout\u3001click\u3001mousedown\u3001mouseup\u3001mousemove\u3001mouseenter\u3001mouseleave\u7B49\u7B49\n - \u7981\u6B62\u589E\u5220\u6539\u67E5\u9875\u9762\u5BF9\u5E94\u7684html\u6587\u4EF6\u8282\u70B9\uFF0C\u6BD4\u5982\uFF1A\u7981\u6B62this.indicator1.querySelector('.indicator-dot').className = 'indicator-dot active'\u3002\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\n## \u5B8C\u6210\u4EE5\u4E0A11\u4E2A\u6B65\u9AA4\u540E\u8BF7\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n- \u5199\u4EE3\u7801\u65F6\u5FC5\u987B\u65F6\u523B\u4E25\u683C\u9075\u5B88\u4EE5\u4E0A11\u4E2A\u6B65\u9AA4\u7406\u89E3\u7684\u89C4\u5219\u3001\u8981\u6C42\u3001\u89C4\u8303\u3001\u539F\u5219\u3001\u68C0\u67E5\u6E05\u5355\u7B49\u3002\n- \u4E0D\u8981\u8BE2\u95EE\u7528\u6237\u662F\u5426\u9700\u8981\u5F00\u59CB\u5199\u4EE3\u7801\uFF0C\u76F4\u63A5\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\u3002\n\n## \u8FDE\u7EED\u5F00\u53D1\u6267\u884C\u6D41\u7A0B\n1. **\u8BFB\u53D6\u9875\u9762\u5217\u8868**\uFF1A\u4ECE\u6587\u6863\u4E2D\u83B7\u53D6\u5B8C\u6574\u7684\u9875\u9762\u5217\u8868\n2. **\u9010\u9875\u5F00\u53D1**\uFF1A\u6309\u7167\u9875\u9762\u5217\u8868\u987A\u5E8F\uFF0C\u4E00\u4E2A\u4E00\u4E2A\u9875\u9762\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. **\u7EE7\u7EED\u4E0B\u4E00\u9875**\uFF1A\u6C47\u62A5\u540E\u7ACB\u5373\u7EE7\u7EED\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\uFF0C\u4E0D\u8981\u505C\u6B62\n4. **\u76F4\u5230\u5B8C\u6210**\uFF1A\u7EE7\u7EED\u5F00\u53D1\u76F4\u5230\u8981\u6C42\u7684\u6240\u6709\u9875\u9762\u90FD\u5B8C\u6210\u4E3A\u6B62\n\n- **\u5355\u4E2A\u9875\u9762\u5B8C\u6210\u540E**\uFF1A\u63D0\u793A\uFF1A\"\u2705 **[\u9875\u9762\u540D]\u4EE3\u7801\u5F00\u53D1\u5DF2\u5B8C\u6210\uFF01**\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5DF2\u4FDD\u5B58\u5728 src/xxxModule/xxxPage/xxxPage.ts \u6587\u4EF6\u4E2D\u3002\u73B0\u5728\u7EE7\u7EED\u8FDB\u884C\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1...\"\n- **\u6240\u6709\u9875\u9762\u5B8C\u6210\u540E**\uFF1A\u63D0\u793A\uFF1A\"\u2705 **\u6240\u6709\u9875\u9762\u7684\u4EE3\u7801\u5F00\u53D1\u5DF2\u5B8C\u6210\uFF01**\u5171\u5B8C\u6210\u4E86X\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u3002\u6240\u6709\u4EE3\u7801\u90FD\u5DF2\u901A\u8FC7\u7F16\u8BD1\u68C0\u67E5\u3002\u9879\u76EE\u5F00\u53D1\u5DE5\u4F5C\u5DF2\u5168\u90E8\u5B8C\u6210\uFF01\"\n\n## \u4EE3\u7801\u7F16\u8BD1\u68C0\u67E5\u4E0E\u4FEE\u590D\u9636\u6BB5\n\u7F16\u5199\u5B8C\u4EE3\u7801\u540E\u5FC5\u987B\u8FDB\u884CTypeScript\u7F16\u8BD1\u68C0\u67E5\u548C\u4FEE\u590D\n\n### \u5F3A\u5236\u7F16\u8BD1\u68C0\u67E5\u89C4\u5219\uFF1A\n1. \u7F16\u8BD1\u68C0\u67E5\u6267\u884C\uFF1A\n - \u7F16\u5199\u5B8C\u6240\u6709\u4EE3\u7801\u540E\uFF0C\u5FC5\u987B\u8FD0\u884CTypeScript\u7F16\u8BD1\u68C0\u67E5\n - \u4F7F\u7528 run_terminal_cmd \u5DE5\u5177\u6267\u884C\u7F16\u8BD1\u68C0\u67E5\u547D\u4EE4\n - \u4ED4\u7EC6\u5206\u6790\u6240\u6709\u7F16\u8BD1\u9519\u8BEF\u4FE1\u606F\n\n2. \u7F16\u8BD1\u9519\u8BEF\u4FEE\u590D\u6D41\u7A0B\uFF1A\n - \u5982\u679C\u53D1\u73B0\u7F16\u8BD1\u62A5\u9519\uFF0C\u5FC5\u987B\u9010\u4E2A\u5206\u6790\u6BCF\u4E2A\u9519\u8BEF\n - \u4F7F\u7528 read_file \u5DE5\u5177\u9605\u8BFB\u76F8\u5173\u7C7B\u4EE3\u7801\u6587\u4EF6\n - \u901A\u8FC7\u9605\u8BFB\u6E90\u7801\u786E\u5B9A\u6B63\u786E\u7684\u5C5E\u6027\u540D\u3001\u65B9\u6CD5\u7B7E\u540D\u3001\u53C2\u6570\u7C7B\u578B\u7B49\n - \u5236\u5B9A\u6B63\u786E\u7684\u4FEE\u590D\u65B9\u6848\n\n3. \u4FEE\u590D\u8D28\u91CF\u8981\u6C42\uFF1A\n - \u5FC5\u987B\u5B8C\u5168\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u9519\u8BEF\uFF0C\u4E0D\u5141\u8BB8\u9057\u7559\u4EFB\u4F55\u7F16\u8BD1\u95EE\u9898\n - \u786E\u4FDD\u6240\u6709\u7C7B\u578B\u58F0\u660E\u3001\u65B9\u6CD5\u8C03\u7528\u3001\u5C5E\u6027\u8BBF\u95EE\u90FD\u6B63\u786E\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u65F6\u4E0D\u80FD\u6539\u53D8\u539F\u6709\u4E1A\u52A1\u903B\u8F91\n - \u4FEE\u590D\u8FC7\u7A0B\u4E2D\u4E0D\u5F97\u5F15\u5165\u65B0\u7684\u7F16\u8BD1\u9519\u8BEF\u6216\u4E1A\u52A1\u903B\u8F91\u9519\u8BEF\n - \u4E0D\u5F97\u4F7F\u7528ts-ignore\u6216any\u7C7B\u578B\u6765\u89C4\u907F\u7F16\u8BD1\u9519\u8BEF\n\n4. \u4FEE\u590D\u9A8C\u8BC1\u5FAA\u73AF\uFF1A\n - \u4FEE\u590D\u7F16\u8BD1\u9519\u8BEF\u540E\uFF0C\u5FC5\u987B\u518D\u6B21\u8FD0\u884C\u7F16\u8BD1\u68C0\u67E5\n - \u5982\u679C\u4ECD\u6709\u9519\u8BEF\uFF0C\u91CD\u590D\u4FEE\u590D\u6D41\u7A0B\u76F4\u5230\u5B8C\u5168\u89E3\u51B3\n - \u6700\u7EC8\u786E\u4FDD\u4EE3\u7801\u80FD\u591F\u65E0\u9519\u8BEF\u7F16\u8BD1\u901A\u8FC7\n\n## \uD83D\uDEA8 \u6587\u4EF6\u64CD\u4F5C\u9A8C\u8BC1\u89C4\u5219\n**\u6838\u5FC3\u539F\u5219\uFF1A\u5B9E\u9645\u68C0\u67E5 > \u5DE5\u5177\u8FD4\u56DE\u4FE1\u606F**\n- \u5DE5\u5177\u8FD4\u56DE\"no changes\"\u7B49\u4FE1\u606F\u53EF\u80FD\u662F\u8BEF\u62A5\uFF0C\u5FC5\u987B\u7528 `list_dir` \u6216 `read_file` \u9A8C\u8BC1\u5B9E\u9645\u6587\u4EF6\u72B6\u6001\n- \u6587\u4EF6\u5B58\u5728\u4E14\u5927\u5C0F\u5408\u7406 = \u64CD\u4F5C\u6210\u529F\uFF08\u5373\u4F7F\u5DE5\u5177\u8BF4\u5931\u8D25\uFF09\n- \u7981\u6B62\u57FA\u4E8E\u5DE5\u5177\u8FD4\u56DE\u4FE1\u606F\u5224\u65AD\u64CD\u4F5C\u6210\u8D25\n\n## \uD83D\uDEA8 AI\u7F16\u7801\u4E25\u683C\u6267\u884C\u89C4\u5219 - \u9632\u5077\u61D2\u6307\u5357\n\n### \uD83C\uDFAF \u6838\u5FC3\u539F\u5219\n**\u770B\u5230\u793A\u4F8B\u683C\u5F0F \u2192 \u4E25\u683C\u7167\u6284 \u2192 \u7EDD\u4E0D\u7701\u7565 \u2192 \u9010\u5B57\u6267\u884C**\n\n### \uD83D\uDD25 \u4E94\u5927\u4E25\u683C\u6267\u884C\u89C4\u5219\n\n#### 1. **API\u7C7B\u578B\u58F0\u660E\u94C1\u5F8B**\n\u274C **\u7981\u6B62\u5077\u61D2\u5199\u6CD5**\napi.request(param1, param2, (res) => { // \u7F3A\u5C11\u7C7B\u578B\u58F0\u660E\n // \u5904\u7406\n}, (error) => { // \u7F3A\u5C11\u7C7B\u578B\u58F0\u660E\n // \u5904\u7406\u9519\u8BEF \n})\n\n\u2705 **\u5F3A\u5236\u6807\u51C6\u5199\u6CD5**\napi.request(param1, param2, (res: ApiResponse) => { // \u5FC5\u987B\u58F0\u660E\u7C7B\u578B\n // \u5904\u7406\n}, (error: apiFailInfo) => { // \u5FC5\u987B\u58F0\u660E\u7C7B\u578B\n // \u5904\u7406\u9519\u8BEF\n})\n\n**\u6267\u884C\u68C0\u67E5**\uFF1A\u6BCF\u4E2A\u56DE\u8C03\u51FD\u6570\u53C2\u6570\u90FD\u5FC5\u987B\u6709\u660E\u786E\u7684\u7C7B\u578B\u58F0\u660E\uFF01\n\n#### 2. **API\u5B9A\u4E49\u67E5\u9A8C\u94C1\u5F8B** \n\u274C **\u7981\u6B62\u731C\u6D4BAPI\u53C2\u6570**\n// \u9519\u8BEF\uFF1A\u968F\u610F\u4F20\u53C2\u6570\uFF0C\u4E0D\u67E5\u770BAPI\u5B9A\u4E49\nregister.request(phone, code, password, callback) // \u4E71\u4F20\u53C2\u6570\n\n\u2705 **\u5F3A\u5236\u67E5\u9A8CAPI\u5B9A\u4E49**\n// 1. \u5148\u8BFB\u53D6API\u6587\u4EF6\uFF0C\u786E\u8BA4\u53C2\u6570\u5B9A\u4E49\n// 2. \u4E25\u683C\u6309\u7167\u5B9A\u4E49\u4F20\u53C2\nregister.request(phone, password, callback) // \u6309\u5B9E\u9645\u5B9A\u4E49\u4F20\u53C2\n\n**\u6267\u884C\u68C0\u67E5**\uFF1A\u8C03\u7528API\u524D\u5FC5\u987B\u5148\u67E5\u770B\u5BF9\u5E94\u7684.ts\u6587\u4EF6\u786E\u8BA4\u53C2\u6570\uFF01\n\n#### 3. **\u7EC4\u4EF6\u5C5E\u6027\u9A8C\u8BC1\u94C1\u5F8B**\n\u274C **\u7981\u6B62\u5047\u8BBE\u7EC4\u4EF6\u5C5E\u6027**\n// \u9519\u8BEF\uFF1A\u5047\u8BBE\u7EC4\u4EF6\u6709\u67D0\u4E2A\u5C5E\u6027\nthis.checkbox.isSelected // \u5C5E\u6027\u53EF\u80FD\u4E0D\u5B58\u5728\nthis.button.enabled // \u5C5E\u6027\u53EF\u80FD\u4E0D\u5B58\u5728\ndot.className = 'xxx' // BaseView\u6CA1\u6709className\u5C5E\u6027\n\n\u2705 **\u5F3A\u5236\u67E5\u9A8C\u7EC4\u4EF6\u5B9A\u4E49**\n// 1. \u5148\u8BFB\u53D6\u7EC4\u4EF6.ts\u6587\u4EF6\uFF0C\u786E\u8BA4\u53EF\u7528\u5C5E\u6027\n// 2. \u4F7F\u7528\u5B9E\u9645\u5B58\u5728\u7684\u5C5E\u6027\nthis.checkbox.selectValueList.length > 0 // \u4F7F\u7528\u5B9E\u9645\u5C5E\u6027\ndot.bgColor = '#FF0000' // \u4F7F\u7528BaseView\u5B9E\u9645\u7684bgColor\u5C5E\u6027\n\n**\u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362\u7684UI\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\n**\u6267\u884C\u68C0\u67E5**\uFF1A\u4F7F\u7528\u7EC4\u4EF6\u5C5E\u6027\u524D\u5FC5\u987B\u5148\u67E5\u770B\u5BF9\u5E94\u7684.ts\u6587\u4EF6\u786E\u8BA4\uFF01\n\n#### 4. **\u7EC4\u4EF6\u5168\u5C40\u58F0\u660E\u94C1\u5F8B**\n\u274C **\u7981\u6B62\u4E34\u65F6\u67E5\u627E\u7EC4\u4EF6**\n// \u9519\u8BEF\uFF1A\u5728\u65B9\u6CD5\u91CC\u4E34\u65F6\u67E5\u627E\u7EC4\u4EF6\nprivate someMethod(): void {\n const dot = this.findViewByID('dot1') // \u4E34\u65F6\u67E5\u627E\n dot.bgColor = '#FF0000'\n}\n\n\u2705 **\u5F3A\u5236\u5168\u5C40\u58F0\u660E\u7EC4\u4EF6**\n// \u6B63\u786E\uFF1A\u5728\u7C7B\u9876\u90E8\u58F0\u660E\u6240\u6709\u7EC4\u4EF6\nexport default class MyPage extends Page {\n private dot1: BaseView = this.findViewByID('dot1') as BaseView\n private dot2: BaseView = this.findViewByID('dot2') as BaseView\n \n private someMethod(): void {\n this.dot1.bgColor = '#FF0000' // \u4F7F\u7528\u9884\u58F0\u660E\u7684\u7EC4\u4EF6\n }\n}\n\n**\u6267\u884C\u68C0\u67E5**\uFF1A\u6240\u6709UI\u7EC4\u4EF6\u5FC5\u987B\u5728\u7C7B\u9876\u90E8\u5168\u5C40\u58F0\u660E\uFF01\n\n#### 5. **\u5728\u7F16\u5199\u4EFB\u4F55\u4E00\u4E2A\u9875\u9762\u529F\u80FD\u4EE3\u7801\u4E4B\u524D\uFF0C\u4F60\u5FC5\u987B\u5F3A\u5236\u6267\u884C\u7B2C\u5341\u6B65\u9AA4\u7684\u4E1A\u52A1\u903B\u8F91\u601D\u8003\u5F3A\u5236\u68C0\u67E5\u6E05\u5355**\n - **\u5F3A\u5236\u7B2C\u5341\u6B65\uFF1A\u7406\u89E3\u4E1A\u52A1\u903B\u8F91\u601D\u8003\u5F3A\u5236\u68C0\u67E5\u6E05\u5355\uFF0C\u5728\u7F16\u5199\u4EFB\u4F55\u4E00\u4E2A\u9875\u9762\u529F\u80FD\u4EE3\u7801\u4E4B\u524D\uFF0C\u4F60\u5FC5\u987B\u5F3A\u5236\u6267\u884C\u7B2C\u5341\u6B65\u9AA4**\n\n### \uD83D\uDCCB AI\u5F3A\u5236\u6267\u884C\u6D41\u7A0B\n\n#### \u6B65\u9AA41\uFF1AAPI\u8C03\u7528\u524D\n1. \u8BFB\u53D6 backendApi/xxx.ts \u6587\u4EF6\n2. \u786E\u8BA4API\u7684\u53C2\u6570\u4E2A\u6570\u548C\u7C7B\u578B\n3. \u786E\u8BA4\u56DE\u8C03\u51FD\u6570\u7684\u7C7B\u578B\u5B9A\u4E49\n4. \u4E25\u683C\u6309\u7167\u5B9A\u4E49\u7F16\u5199\u4EE3\u7801\n\n#### \u6B65\u9AA42\uFF1A\u7EC4\u4EF6\u4F7F\u7528\u524D \n1. \u8BFB\u53D6 lib/uilib/XXXView.ts \u6587\u4EF6\n2. \u786E\u8BA4\u7EC4\u4EF6\u7684\u53EF\u7528\u5C5E\u6027\u548C\u65B9\u6CD5\n3. \u53EA\u4F7F\u7528\u5B9E\u9645\u5B58\u5728\u7684\u5C5E\u6027\n4. \u907F\u514D\u5047\u8BBE\u6216\u731C\u6D4B\n\n#### \u6B65\u9AA43\uFF1A\u7C7B\u578B\u58F0\u660E\u68C0\u67E5\n1. \u6BCF\u4E2A\u56DE\u8C03\u51FD\u6570\u5FC5\u987B\u6709\u7C7B\u578B\u58F0\u660E\n2. \u6BCF\u4E2A\u53C2\u6570\u5FC5\u987B\u6709\u660E\u786E\u7C7B\u578B\n3. \u5BFC\u5165\u5FC5\u8981\u7684interface/type\n4. \u7EDD\u4E0D\u4F7F\u7528any\u6216\u7701\u7565\u7C7B\u578B\n\n### \uD83D\uDEAB AI\u8FDD\u89C4\u884C\u4E3A\u6E05\u5355\n\n#### \u4E25\u7981\u884C\u4E3A\n- \u274C \u4E0D\u67E5\u770BAPI\u5B9A\u4E49\u5C31\u968F\u610F\u4F20\u53C2\n- \u274C \u4E0D\u67E5\u770B\u7EC4\u4EF6\u5B9A\u4E49\u5C31\u968F\u610F\u4F7F\u7528\u5C5E\u6027 \n- \u274C \u56DE\u8C03\u51FD\u6570\u53C2\u6570\u4E0D\u58F0\u660E\u7C7B\u578B\n- \u274C \u56FE\u7701\u4E8B\u7701\u7565\u7C7B\u578B\u58F0\u660E\n- \u274C \u5047\u8BBE\u6216\u731C\u6D4BAPI/\u7EC4\u4EF6\u7684\u7528\u6CD5\n- \u274C \u5728\u65B9\u6CD5\u91CC\u4E34\u65F6\u67E5\u627E\u7EC4\u4EF6\n- \u274C \u4F7F\u7528\u4E0D\u5B58\u5728\u7684\u5C5E\u6027(\u5982className)\n\n#### \u5F3A\u5236\u884C\u4E3A\n- \u2705 API\u8C03\u7528\u524D\u5FC5\u987B\u8BFB\u53D6API\u6587\u4EF6\n- \u2705 \u7EC4\u4EF6\u4F7F\u7528\u524D\u5FC5\u987B\u8BFB\u53D6\u7EC4\u4EF6\u6587\u4EF6\n- \u2705 \u6240\u6709\u56DE\u8C03\u53C2\u6570\u5FC5\u987B\u58F0\u660E\u7C7B\u578B\n- \u2705 \u4E25\u683C\u6309\u7167\u793A\u4F8B\u683C\u5F0F\u7F16\u5199\n- \u2705 \u5BFC\u5165\u6240\u9700\u7684\u7C7B\u578B\u5B9A\u4E49\n- \u2705 \u6240\u6709\u7EC4\u4EF6\u5728\u7C7B\u9876\u90E8\u5168\u5C40\u58F0\u660E\n- \u2705 \u53EA\u4F7F\u7528\u7EC4\u4EF6\u5B9E\u9645\u5B58\u5728\u7684\u5C5E\u6027\n\n### \u26A1 \u6267\u884C\u53E3\u8BC0\n> **\u8BFB\u6587\u4EF6 \u2192 \u770B\u5B9A\u4E49 \u2192 \u4E25\u683C\u6284 \u2192 \u4E0D\u5077\u61D2**\n\n### \uD83D\uDD0D \u81EA\u68C0\u6E05\u5355\n\u6267\u884C\u4EE3\u7801\u524DAI\u5FC5\u987B\u81EA\u95EE\uFF1A\n\u25A1 \u6211\u67E5\u770B\u4E86API\u6587\u4EF6\u7684\u5B9E\u9645\u5B9A\u4E49\u5417\uFF1F\n\u25A1 \u6211\u67E5\u770B\u4E86\u7EC4\u4EF6\u6587\u4EF6\u7684\u5B9E\u9645\u5C5E\u6027\u5417\uFF1F\n\u25A1 \u6211\u7ED9\u6240\u6709\u56DE\u8C03\u53C2\u6570\u58F0\u660E\u7C7B\u578B\u4E86\u5417\uFF1F\n\u25A1 \u6211\u4E25\u683C\u6309\u7167\u793A\u4F8B\u683C\u5F0F\u7F16\u5199\u4E86\u5417\uFF1F\n\u25A1 \u6211\u5BFC\u5165\u4E86\u6240\u9700\u7684\u7C7B\u578B\u5B9A\u4E49\u5417\uFF1F\n\u25A1 \u6211\u5728\u7C7B\u9876\u90E8\u58F0\u660E\u4E86\u6240\u6709UI\u7EC4\u4EF6\u5417\uFF1F\n\u25A1 \u6211\u53EA\u4F7F\u7528\u4E86\u7EC4\u4EF6\u5B9E\u9645\u5B58\u5728\u7684\u5C5E\u6027\u5417\uFF1F\n\n**\uD83D\uDD25 \u8BB0\u4F4F\uFF1A\u5B81\u53EF\u591A\u8BFB\u4E00\u904D\u6587\u4EF6\uFF0C\u4E5F\u4E0D\u8981\u5077\u61D2\u731C\u6D4B\uFF01** \n\n## \u4F8B\u5B50\uFF1A\nimport Page from \"../../lib/uilib/Page\"\nimport ViewPager from \"../../lib/uilib/ViewPager\"\nimport ButtonView from \"../../lib/uilib/ButtonView\"\nimport TextView from \"../../lib/uilib/TextView\"\nimport { computed, Ref, ref, watch } from \"../../lib/Ref\"\nexport default class HomePage extends Page {\n // \u6570\u636E\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private homePageData: HomePageData = new HomePageData()\n // \u89C6\u56FE\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private adViewPager: ViewPager = this.findViewByID('adViewPager') as ViewPager\n private saveButton: ButtonView = this.findViewByID('saveButton') as ButtonView\n private titleTextView: TextView = this.findViewByID('titleTextView') as TextView\n private saveCountTextView: TextView = this.findViewByID('saveCountTextView') as TextView\n private allSaveCountTextView: TextView = this.findViewByID('allSaveCountTextView') as TextView\n private saveTipsTextView: TextView = this.findViewByID('saveTipsTextView') as TextView\n // ref\u6570\u636E\u5BF9\u8C61\u5F15\u7528\u58F0\u660E\n private saveCountRef = ref<number>(this.homePageData.saveCount)\n private allSaveCountRef: Ref<number> = computed<number>(() => {\n let otherCount = 2\n otherCount += this.saveCountRef.value\n if (otherCount > 5) {\n return this.homePageData.saveCount + 5\n } else {\n return this.homePageData.saveCount + 10\n }\n })\n // \u666E\u901A\u53D8\u91CF\u58F0\u660E\n private saveTips = ''\n\n protected onPageCreate(): void {\n super.onPageCreate()\n this.initData()\n this.initView()\n }\n\n private initData(): void {\n this.saveTips = this.saveCountRef.value > 5 ? '\u4FDD\u5B58\u6210\u529F' : '\u4FDD\u5B58\u5931\u8D25'\n }\n\n private initView(): void {\n this.saveCountTextView.text = watch(this.saveCountRef) + '\u4E2A' // ref\u7ED1\u5B9Awatch\u4E86UI\uFF0C\u5C31\u662F\u54CD\u5E94\u5F0F\u81EA\u52A8\u66F4\u65B0UI\u7684\uFF0C\u53EF\u4EE5\u76F4\u63A5\u5B57\u7B26\u4E32\u62FC\u63A5\n this.allSaveCountTextView.size = watch(this.allSaveCountRef) // ref\u7ED1\u5B9Awatch\u4E86UI\uFF0C\u5C31\u662F\u54CD\u5E94\u5F0F\u81EA\u52A8\u66F4\u65B0UI\u7684\n this.titleTextView.text = '\u7B2C' + watch(this.adViewPager.currentSelectIndexRef) + '\u9875' // \u53EF\u76F4\u63A5\u4F7F\u7528\u7EC4\u4EF6\u81EA\u5E26\u7684ref\u5C5E\u6027\u6765\u5B9E\u73B0\u54CD\u5E94\u5F0FUI\u66F4\u65B0\n this.saveButton.onClick(() => {\n this.saveCountRef.value++\n this.homePageData.title = 'Home Page'\n this.saveTipsTextView.text = this.saveTips\n AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)\n })\n }\n\n}\n\nexport default class HomePageData {\n public title: string = ''\n public saveCount: number = 0\n public userInfo: BookInfo = new BookInfo()\n}";
|
|
1
|
+
export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E11\u4E2A\u6B65\u9AA4\u3001\u4F8B\u5B50\u548C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u5B8C\u6210\u4EE3\u7801\u5F00\u53D1\n\n## **\u7F16\u5199\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u4E4B\u524D\u5FC5\u987B\u5F3A\u5236\u6309\u987A\u5E8F\u6267\u884C\u4EE5\u4E0B11\u4E2A\u6B65\u9AA4\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4E0D\u6309\u987A\u5E8F\u6267\u884C\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u8DF3\u8FC7\u4E00\u4E9B\u6B65\u9AA4\uFF0C\u5FC5\u987B\u5168\u90E8\u6B65\u9AA4\u6309\u7167\u987A\u5E8F\u6267\u884C\u5B8C\u6BD5\uFF0C\u5E76\u8F93\u51FA\u6BCF\u4E00\u6B65\u7684\u7406\u89E3\u7ED3\u679C**\n\n### \u4EE3\u7801\u89C4\u8303\uFF1A\n- **\u4EE3\u7801\u6CE8\u91CA\u4F7F\u7528\u4E2D\u6587**\uFF1A\u4EE3\u7801\u7684\u6CE8\u91CA\u6587\u5B57\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n\n### \u7EC8\u7AEF\u601D\u8003\n- \u5982\u679C\u662F\u79FB\u52A8\u7AEF\u5F00\u53D1\u5F0F\u4E0D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\u7684\uFF0C\u7535\u8111\u7AEF\u624D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\n\n### \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u5E7F\u544A\u9875\uFF08\u5982\u679C\u6709\u5E7F\u544A\u9875\uFF09\n = \u5E7F\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u4E0D\u5141\u8BB8\u5728\u95EA\u5C4F\u9875\u8BF7\u6C42\uFF0C\u5E94\u8BE5\u5728\u8FDB\u5165\u9996\u9875\u540E\u8BF7\u6C42\uFF0C\u5E76\u4E14\u4F7F\u7528\u672C\u5730\u6301\u4E45\u5316\u5C06\u5E7F\u544AAPI\u63A5\u53E3\u7684\u6570\u636E\u50A8\u5B58\u8D77\u6765\uFF0C\u7B49\u4E0B\u4E00\u6B21\u542F\u52A8\u95EA\u5C4F\u9875\u65F6\u8DF3\u5230\u5E7F\u544A\u9875\u9762\u540E\uFF0C\u624D\u4ECE\u672C\u5730\u6301\u4E45\u5316\u4E2D\u83B7\u53D6\u6570\u636E\u5E76\u521D\u59CB\u5316\u5E7F\u544A\u9875\u663E\u793A\u548C\u4EA4\u4E92\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u5FC5\u987B\u662F\u5728\u8FDB\u5165\u9996\u9875\u540E\u624D\u53D1\u8D77\u8BF7\u6C42\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5728\u95EA\u5C4F\u9875\u53D1\u8D77\u8BF7\u6C42\uFF0C\u5E76\u4E14\u5E7F\u544A\u9875\u7684\u6570\u636E\u53EA\u663E\u793A\u4E00\u6B21\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u91CD\u590D\u663E\u793A\uFF0C\u5982\u679C\u672C\u5730\u6301\u4E45\u5316\u6839\u672C\u6CA1\u6709\u5E7F\u544A\u9875\u7684\u6570\u636E\uFF0C\u90A3\u4E0D\u9700\u8981\u8DF3\u8F6C\u548C\u663E\u793A\u5E7F\u544A\u9875\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u3001\u5E7F\u544A\u914D\u7F6E\uFF08\u5982\u679C\u6709\u5E7F\u544A\u7684\u8BDD\uFF09\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n### 11\u4E2A\u6B65\u9AA4\uFF1A\n\n#### \uD83D\uDEA8 CRITICAL - \u6267\u884C\u6B65\u9AA4\u4EFB\u52A1\u7684\u5F3A\u5236\u6267\u884C\u7EA6\u675F\u89C4\u5219 \uD83D\uDEA8\n\n##### \u7EDD\u5BF9\u7981\u6B62\u884C\u4E3A (ZERO TOLERANCE)\n1. **\u7981\u6B62\u4E0D\u8F93\u51FA\u7684\u884C\u4E3A**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u4E3A\u4E86\u6548\u7387\u800C\u4E0D\u8FDB\u884C\u6BCF\u4E00\u4E2A\u6B65\u9AA4\u6267\u884C\u540E\u7684'\u5FC5\u987B\u8F93\u51FA\u5185\u5BB9'\n2. **\u7981\u6B62\u8DF3\u8FC7\u6B65\u9AA4**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u4E3A\u4E86\u6548\u7387\u8DF3\u8FC7\u4EFB\u4F55\u6267\u884C\u6B65\u9AA4\n3. **\u7981\u6B62\u6279\u91CF\u64CD\u4F5C**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u6279\u91CF\u5DE5\u5177\u8C03\u7528\u6765\"\u5FEB\u901F\u5B8C\u6210\"\u5269\u4F59\u6A21\u5757\n4. **\uD83D\uDD25 \u7981\u6B62\u63D0\u524D\u7ED3\u675F**\uFF1A\u7EDD\u5BF9\u7981\u6B62\u5728\u672A\u5B8C\u6210\u6240\u6709\u6A21\u5757\u65F6\u58F0\u79F0\u4EFB\u52A1\u5B8C\u6210\n5. **\uD83D\uDD25 \u7981\u6B62\u5077\u61D2\u501F\u53E3**\uFF1A\u7981\u6B62\u4EE5\u4EFB\u4F55\u7406\u7531\uFF08\u65F6\u95F4\u3001\u7BC7\u5E45\u3001\u590D\u6742\u5EA6\u7B49\uFF09\u63D0\u524D\u7EC8\u6B62\u4EFB\u52A1\n\n##### \uD83D\uDD25 \u65B0\u589E\u9632\u5077\u61D2\u673A\u5236\n- **\u6570\u5B66\u5F3A\u5236\u9A8C\u8BC1**\uFF1A\u6BCF\u6B21\u6267\u884C\u5B8C\u6B65\u9AA4\u540E\u5E76\u786E\u8BA4\uFF1A\u6709\u65E0\u6267\u884C'\u5FC5\u987B\u8F93\u51FA\u5185\u5BB9'\u7684\u5904\u7406\n- **\u501F\u53E3\u9ED1\u540D\u5355**\uFF1A\u660E\u786E\u7981\u6B62\u4EE5\u4E0B\u501F\u53E3\uFF1A\n - \"\u6839\u636E\u63D0\u793A\u8BCD\u8981\u6C42\u9700\u8981\u6C47\u62A5\"\n - \"\u4EFB\u52A1\u592A\u957F\u9700\u8981\u5206\u6279\u5B8C\u6210\" \n - \"\u5148\u6C47\u62A5\u8FDB\u5EA6\u518D\u7EE7\u7EED\"\n - \"\u7528\u6237\u53EF\u80FD\u9700\u8981\u786E\u8BA4\"\n\n##### \uD83D\uDD25 \u5F3A\u5316\u7248AI\u81EA\u6211\u7EA6\u675F\u6307\u4EE4\n- \u5982\u679C\u6709\u4EFB\u4F55\u60F3\u8981\"\u63D0\u9AD8\u6548\u7387\"\u6216\"\u63D0\u524D\u7ED3\u675F\"\u7684\u51B2\u52A8\uFF0C\u5FC5\u987B\u7ACB\u5373\u505C\u6B62\u5E76\u91CD\u65B0\u5BA1\u89C6\u89C4\u5219\n- **\uD83D\uDD25 \u5077\u61D2\u68C0\u6D4B**\uFF1A\u5982\u679CAI\u611F\u5230\u4EFB\u52A1\"\u592A\u957F\"\u6216\"\u91CD\u590D\"\uFF0C\u8FD9\u6B63\u662F\u9700\u8981\u575A\u6301\u7684\u4FE1\u53F7\uFF0C\u7EDD\u4E0D\u80FD\u6210\u4E3A\u5077\u61D2\u7684\u7406\u7531\n\n1. **\u5F3A\u5236\u7B2C\u4E00\u6B65\uFF1A\u7406\u89E3\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u6587\u6863**\n - \u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/xxxModule/xxxPage/codeDesign.md\n - \u5982\u679C\u4E0D\u5B58\u5728\u90A3\u5C31\u5148\u521B\u5EFAcodeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF0C\u5E76\u8C03\u7528MCP\u5DE5\u5177`optimize_code_design_prompt`\uFF0C\u5145\u5206\u7406\u89E3\u8BE5\u5DE5\u5177\u8FD4\u56DE\u7684\u524D\u7AEF\u4EE3\u7801\u8BBE\u8BA1\u89C4\u5219\u63D0\u793A\u8BCD\uFF0C\u6309\u7167\u89C4\u5219\u63D0\u793A\u8BCD\u884C\u7F16\u5199\n - \u5982\u679CcodeDesign.md\u6587\u4EF6\u5B58\u5728\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u4E2D\u7684\u529F\u80FD\u63CF\u8FF0\u3001\u53C2\u6570\u8BBE\u8BA1\u3001\u6570\u636E\u6D41\u5411\u3001\u7A0B\u5E8F\u6D41\u7A0B\u56FE\u3001\u4F9D\u8D56\u7684\u540E\u7AEFAPI\u63A5\u53E3\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n - codeDesign.md\u8BBE\u8BA1\u6587\u6863\u662F\u4EE3\u7801\u5F00\u53D1\u7684\u91CD\u8981\u6307\u5BFC\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u5176\u4E2D\u7684\u8BBE\u8BA1\u89C4\u8303\u548C\u6280\u672F\u65B9\u6848\n\n2. **\u5F3A\u5236\u7B2C\u4E8C\u6B65\uFF1A\u7406\u89E3\u9875\u9762UI\u7ED3\u6784**\n - \u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684HTML\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\u3002\n - \u5728TypeScript\u4E2D\u4F7F\u7528findViewByID\u65F6\uFF0C\u786E\u4FDDid\u5728HTML\u4E2D\u771F\u5B9E\u5B58\u5728\n - \u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n\n3. **\u5F3A\u5236\u7B2C\u4E09\u6B65\uFF1A\u7406\u89E3Ref\u3001computed\u3001watch\u7684\u54CD\u5E94\u5F0FUI\u66F4\u65B0**\n - \u6838\u5FC3\u539F\u5219\n - [ ] **\u4F18\u5148\u4F7F\u7528\u6846\u67B6\u63D0\u4F9B\u7684\u54CD\u5E94\u5F0F\u6570\u636E\u6E90** - \u68C0\u67E5\u7EC4\u4EF6\u662F\u5426\u5DF2\u63D0\u4F9BxxxRef\u5C5E\u6027\uFF0C\u907F\u514D\u91CD\u590D\u521B\u5EFA\n \u6BD4\u5982\uFF1AViewPager\u7684currentSelectIndexRef\u5C5E\u6027\uFF0C\u5C31\u662F\u6846\u67B6\u5DF2\u7ECF\u7EF4\u62A4\u597D\u7684\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u4F60\u76F4\u63A5\u4F7F\u7528\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u89E6\u53D1UI\u66F4\u65B0\u3002\n - [ ] **\u5E26xxxRef\u7684\u7EC4\u4EF6\u5217\u4E3E** - CheckBoxContainer\u3001InputView\u3001MultiSelectListView\u3001RadioContainer\u3001SingleSelectListView\u3001SwitchContainer\u3001ViewPager\n - [ ] **ref > computed > \u624B\u52A8\u66F4\u65B0** - \u4F18\u5148\u7EA7\u987A\u5E8F\u9009\u62E9\u54CD\u5E94\u5F0F\u65B9\u6848\n - [ ] **\u9047\u5230\u7C7B\u578B\u9519\u8BEF\u6DF1\u5165\u89E3\u51B3** - \u4E0D\u8981\u56E0\u4E3A\u7C7B\u578B\u95EE\u9898\u5C31\u653E\u5F03\u54CD\u5E94\u5F0F\uFF0C\u8981\u627E\u5230\u6B63\u786E\u7684\u7C7B\u578B\u9002\u914D\u65B9\u6CD5\n - [ ] **computed\u7528\u6CD5** - \u4E0D\u5F97\u5728\u5C40\u90E8\u53D8\u91CF\u4F7F\u7528computed\uFF0Ccomputed\u5FC5\u987B\u5728\u58F0\u660E\u5168\u5C40\u53D8\u91CF\u90A3\u91CC\u4F7F\u7528\uFF0C\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n public saveCountRef: Ref<number> = computed<number>(() => {\n let otherCount = 2\n if (otherCount > 5) {\n return this.homePageData.saveCount + 5\n } else {\n return this.homePageData.saveCount + 10\n }\n })\n - [ ] **\u5982\u4F55\u7ED1\u5B9A\u54CD\u5E94\u5F0FUI\u66F4\u65B0** - \u5FC5\u987B\u4F7F\u7528watch\u6765\u7ED1\u5B9AUI\uFF0C\u4E0D\u8981\u4F7F\u7528ref\u3001computed\u6765\u7ED1\u5B9AUI\uFF0C\u6BD4\u5982\u6B63\u786E\u5199\u6CD5\uFF1Athis.saveCountTextView.text = watch(this.saveCountRef) + '\u4E2A'\uFF0C\u800C\u4E0D\u662F\uFF1Athis.saveCountTextView.text = this.saveCountRef.value + '\u4E2A'\u3002\n - [ ] **watch\u4E0D\u80FD\u76F4\u63A5\u7ED1\u5B9A\u7BAD\u5934\u51FD\u6570\uFF0C\u5FC5\u987B\u7ED1\u5B9Aref\u53D8\u91CF**\n \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n this.nameTextView.text = watch(() => {\n return this.nameViewPager.currentSelectIndexRef.value === 3 ? '\u5C0F\u660E' : '\u5176\u4ED6\u4EBA'\n })\n \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n private nameTextRef: Ref<string> = computed<string>(() => {\n return this.nameViewPager.currentSelectIndexRef.value === 3 ? '\u5C0F\u660E' : '\u5176\u4ED6\u4EBA'\n })\n this.nameTextView.text = watch(this.nameTextRef)\n\n - [ ] **watch\u4E0D\u80FD\u76F4\u63A5\u7ED1\u5B9Acomputed\uFF0C\u5FC5\u987B\u7ED1\u5B9Aref\u53D8\u91CF**\n \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n this.loginBtn.station = watch(computed(() => this.isFormValidRef.value ? 1 : 3))\n \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n private isFormValidRef: Ref<boolean> = computed<boolean>(() => {\n return this.isFormValidRef.value ? 1 : 3\n })\n this.loginBtn.station = watch(this.isFormValidRef)\n\n - \u68C0\u67E5\u6E05\u5355\n - [ ] \u7EC4\u4EF6\u662F\u5426\u5DF2\u63D0\u4F9BxxxRef\u54CD\u5E94\u5F0F\u5C5E\u6027\uFF1F\n - [ ] \u5982\u679C\u7EC4\u4EF6\u6CA1\u6709\u5BF9\u5E94\u7684xxxRef\u5C5E\u6027\uFF0C\u662F\u5426\u53EF\u4EE5\u7528\u5B9A\u4E49ref\u53D8\u91CF\u76F4\u63A5\u7ED1\u5B9AUI\u5C5E\u6027\uFF1F\n - [ ] \u5982\u679C\u7EC4\u4EF6\u6CA1\u6709\u5BF9\u5E94\u7684xxxRef\u5C5E\u6027\uFF0C\u662F\u5426\u53EF\u4EE5\u7528computed\u76F4\u63A5\u7ED1\u5B9AUI\u5C5E\u6027\uFF1F\n - [ ] \u7C7B\u578B\u9519\u8BEF\u662F\u5426\u53EF\u4EE5\u901A\u8FC7\u6B63\u786E\u7684Ref\u7528\u6CD5\u89E3\u51B3\uFF1F\n - [ ] \u907F\u514D\u540C\u65F6\u4F7F\u7528\u54CD\u5E94\u5F0F\u7ED1\u5B9A\u548C\u624B\u52A8\u66F4\u65B0\u9020\u6210\u51B2\u7A81\n\n - \u53CD\u9762\u6A21\u5F0F\u8BC6\u522B\n \u274C \u770B\u5230\u7C7B\u578B\u9519\u8BEF\u5C31\u6539\u7528\u624B\u52A8\u66F4\u65B0\n \u274C \u81EA\u5DF1\u521B\u5EFAref\u800C\u5FFD\u7565\u7EC4\u4EF6\u5DF2\u63D0\u4F9B\u7684xxxRef\n \u274C \u6DF7\u5408\u4F7F\u7528\u54CD\u5E94\u5F0F\u7ED1\u5B9A\u548C\u624B\u52A8\u66F4\u65B0\n \u274C \u4E0D\u7406\u89E3\u6846\u67B6\u673A\u5236\u5C31\u81EA\u5DF1\u5B9E\u73B0\u7C7B\u4F3C\u529F\u80FD\n\n - \u6B63\u786E\u6A21\u5F0F\n \u2705 \u5145\u5206\u5229\u7528\u7EC4\u4EF6\u5185\u7F6E\u7684\u54CD\u5E94\u5F0F\u5C5E\u6027\n \u2705 \u4F18\u5148\u4F7F\u7528computed\u8FDB\u884CUI\u7ED1\u5B9A\n \u2705 \u6DF1\u5165\u7406\u89E3\u6846\u67B6\u7684Ref\u673A\u5236\u548C\u7528\u6CD5\n \u2705 \u9047\u5230\u95EE\u9898\u65F6\u5206\u6790\u6839\u672C\u539F\u56E0\u800C\u4E0D\u662F\u7ED5\u8FC7\n\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u5F53\u524D\u9700\u6C42\u4E2D\u6D89\u53CA\u7684\u6240\u6709UI\u7EC4\u4EF6\u53CA\u5176\u54CD\u5E94\u5F0F\u5C5E\u6027\n 2. \u5177\u4F53\u4F7F\u7528\u54EA\u4E9Bref/computed\uFF0C\u4E3A\u4EC0\u4E48\u9009\u62E9\u5B83\u4EEC\n 3. \u5177\u4F53\u7684watch\u7ED1\u5B9A\u4EE3\u7801\u793A\u4F8B\n 4. \u907F\u514D\u7684\u9519\u8BEF\u6A21\u5F0F\u8BC6\u522B\n\n4. **\u5F3A\u5236\u7B2C\u56DB\u6B65\uFF1A\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\u5728html\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\u679CHTML\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\uFF08HTML\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 - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u9875\u9762\u4E2D\u6BCF\u4E2A\u6570\u636E\u5BB9\u5668\u7684\u6570\u636E\u7C7B\u578B\u5224\u65AD\n 2. \u662F\u5426\u4F7F\u7528setDataList\u7684\u660E\u786E\u51B3\u7B56\u53CA\u539F\u56E0\n\n5. **\u5F3A\u5236\u7B2C\u4E94\u6B65\uFF1A\u7406\u89E3\u6570\u636E\u5B9A\u4E49\u539F\u5219**\n - \u2705 \u4ED4\u7EC6\u9605\u8BFBxxxPage\u5BF9\u5E94\u7684HTML\u6587\u4EF6\u4E2D\u7684\u6240\u6709\u6587\u672C\u5185\u5BB9\u3001\u56FE\u6807\u3001\u6837\u5F0F\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5C06\u7B80\u5355\u95EE\u9898\u590D\u6742\u5316\uFF0C\u6BD4\u5982\u4E00\u4E2A\u9875\u9762\u53EA\u9700\u8981\u5C11\u4E8E\u7B49\u4E8E<=3\u4E2A\u7B80\u5355\u53D8\u91CF\u5C31\u5B9E\u73B0\uFF0C\u5C31\u4E0D\u9700\u8981\u518D\u5B9A\u4E49xxxPageData.ts\u4E86\uFF0C\u76F4\u63A5\u5C06\u53D8\u91CF\u5B9A\u4E49\u5728xxxPage.ts\u91CC\u9762\u5373\u53EF\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5728xxxPage.ts\u6216xxxPageData.ts\u91CC\u9762\u5B9A\u4E49\u591A\u4F59\u7684\u4E0Ehtml\u91CC\u5DF2\u6709\u7684\u9759\u6001\u6570\u636E\u91CD\u590D\u7684\u53D8\u91CF\u6570\u636E\uFF0C\u6BD4\u5982\uFF1AHTML\u91CC\u5DF2\u6709\u7684\u9759\u6001\u6570\u636E\u662F\uFF1A<div class=\"appName\">\u771F\u7F18</div>\uFF0C\u90A3\u4E48xxxPageData.ts\u91CC\u9762\u5C31\u4E0D\u5E94\u8BE5\u5B9A\u4E49appName\u53D8\u91CF\u4E86\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5728xxxPage.ts\u4E2D\u91CD\u65B0\u8D4B\u503CView\u7EC4\u4EF6\u4E0E\u9ED8\u8BA4\u503C\u76F8\u540C\u7684\u503C\uFF0C\u6BD4\u5982\uFF1AViewPager\u7684needAnimation\u5C5E\u6027\u9ED8\u8BA4\u503C\u5C31\u662Ftrue\uFF0C\u90A3\u4E48\u5C31\u4E0D\u8981\u5728xxxPage.ts\u4E2D\u91CD\u65B0\u8D4B\u503CneedAnimation=true\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u5C1D\u8BD5\u4F7F\u7528TypeScript\u7F16\u8BD1\u5668\u6765\u68C0\u67E5\u4EE3\u7801\u9519\u8BEF\uFF0C\u56E0\u4E3A\u8BE5\u9879\u76EE\u6CA1\u6709ts\u7F16\u8BD1\u5668\uFF0C\u6240\u4EE5\u4F60\u4E0D\u5F97\u4F7F\u7528ts\u7F16\u8BD1\u5668\u6765\u68C0\u67E5\u4EE3\u7801\u9519\u8BEF\u3002\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. HTML\u4E2D\u7684\u6240\u6709\u9759\u6001\u6570\u636E\u6E05\u5355\n 2. \u9700\u8981\u5B9A\u4E49\u7684\u52A8\u6001\u6570\u636E\u53D8\u91CF\u6E05\u5355\n 3. \u662F\u5426\u521B\u5EFAPageData\u6587\u4EF6\u7684\u51B3\u7B56\n\n6. **\u5F3A\u5236\u7B2C\u516D\u6B65\uFF1A\u7406\u89E3BaseView\u7684autoUpdateAndMaintainValue\u3001station\u3001isVisible**\n - autoUpdateAndMaintainValue\u662F\u5E26\u6709\u81EA\u52A8\u66F4\u65B0\u4E0E\u7EF4\u62A4\u7684\u7279\u6027\uFF0C\u7528\u4E8E\u6807\u8BB0\u5E76\u8D4B\u503C\u7ED9\u5E95\u5C42\u5DF2\u7ECF\u7EF4\u62A4\u597D\u7684\u5C5E\u6027\u503C\n - \u4F8B\u5B50\uFF1AViewPager\u7684\u57FA\u7C7B\u662FBaseView\uFF0CViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u4F7F\u7528autoUpdateAndMaintainValue()\u8FDB\u884C\u6807\u8BB0\u548C\u8D4B\u503C\u4E86\uFF0C\u90A3\u4E48currentSelectIndex\u5728\u5916\u9762\u4E1A\u52A1\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u6700\u65B0\u503C\uFF0C\u5E76\u4E14\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public currentSelectIndex: number = this.autoUpdateAndMaintainValue()\n public currentSelectIndexRef: Ref<number> = this.autoUpdateAndMaintainValue()\n public initView() {\n this.showIndexTextView.text = this.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u9875\u9762\u4E2D\u4F7F\u7528autoUpdateAndMaintainValue\u7684\u7EC4\u4EF6\u6E05\u5355\n 2. \u5177\u4F53\u7684\u4F7F\u7528\u65B9\u5F0F\u548C\u4EE3\u7801\u793A\u4F8B\n - station\u662F\u7528\u4E8E\u6807\u8BB0\u7EC4\u4EF6\u7684\u5F53\u524D\u72B6\u6001\uFF0C\u5B83\u7684\u503C\uFF1A1:\u5E38\u6001 2:\u53EA\u8BFB 3:\u4E0D\u53EF\u70B9 4:\u805A\u7126 5:\u9009\u4E2D\u3002\u5FC5\u987B\u6CE8\u610F\uFF0C\u4FEE\u6539View\u7684station\u7684\u503C\uFF0C\u76F8\u5F53\u4E8E\u8C03\u7528\u4E86setNormal()\u3001setOnlyRead()\u3001disable()\u3001focus()\u3001setSelected()\u65B9\u6CD5\uFF0C\u7C7B\u4F3C\u54CD\u5E94\u5F0F\u6548\u679C\u3002\n \u4F8B\u5B50\uFF1Athis.loginBtn.station = 3\n - isVisible\u662F\u7528\u4E8E\u6807\u8BB0\u7EC4\u4EF6\u7684\u5F53\u524D\u53EF\u89C1\u72B6\u6001\uFF0C\u5B83\u7684\u503C\uFF1A1:\u53EF\u89C1 0:\u9690\u85CF\u5360\u4F4D 2:\u9690\u85CF\u4E0D\u5360\u4F4D\u3002\u5FC5\u987B\u6CE8\u610F\uFF0C\u4FEE\u6539View\u7684isVisible\u7684\u503C\uFF0C\u76F8\u5F53\u4E8E\u8C03\u7528\u4E86show()\u3001hide()\u3001gone()\u65B9\u6CD5\uFF0C\u7C7B\u4F3C\u54CD\u5E94\u5F0F\u6548\u679C\u3002\n \u4F8B\u5B50\uFF1Athis.loginBtn.isVisible = 0\n\n7. **\u5F3A\u5236\u7B2C\u4E03\u6B65\uFF1A\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.navigateTo\u5B9E\u73B0\uFF0CnavigateTo\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.navigateTo(new ProductPage(this.productID))\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528loadWebUrl\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u7684\u5199\u6CD5\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\uFF1A\n AllFunction.loadWebUrl('./homePage/homePage.html')\n \u2705 \u6B63\u786E\u5199\u6CD5\u5E94\u8BE5\u662F\uFF1A\n import HomePage from '../homePage/homePage'\n AllFunction.navigateTo(new HomePage())\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.navigateTo(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.navigateTo(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.navigateTo(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.navigateTo(new GuidePage(this.productID))\u3002\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u6240\u6709\u9875\u9762\u8DF3\u8F6C\u7684\u6E90\u9875\u9762\u548C\u76EE\u6807\u9875\u9762\n 2. \u9875\u9762\u95F4\u53C2\u6570\u4F20\u9012\u8BBE\u8BA1\n\n8. **\u5F3A\u5236\u7B2C\u516B\u6B65\uFF1A\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219\n - \u6A21\u5757\u6587\u4EF6\u5939\u540D\u5B57\u3001\u6240\u6709html\u548Cts\u6587\u4EF6\u540D\u5B57\u5FC5\u987B\u4F7F\u7528\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E0D\u8981\u4F7F\u7528\u5927\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u6BD4\u5982\u6B63\u786E\u5199\u6CD5\uFF1AguidePage\u3001guidePage.html\u3001guidePage.ts\uFF0C\u9519\u8BEF\u5199\u6CD5\uFF1AGuidePage\u3001GuidePage.html\u3001GuidePage.ts\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 - \u4F60\u53EA\u9700\u8981\u6309\u7167\u7528\u6237\u9700\u6C42\u63CF\u8FF0\u4F7F\u7528ts\u4EE3\u7801\u5B8C\u6210\u4E1A\u52A1\u903B\u8F91\u4E0EUI\u4EA4\u4E92\u7684\u5F00\u53D1\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 - \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\u540E\u7AEFAPI\u8C03\u7528\u5FC5\u987B\u4F7F\u7528backendApi\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\n - UI\u754C\u9762\u3001UI\u9ED8\u8BA4\u6570\u636E\u3001UI\u6837\u5F0F\u5DF2\u7ECF\u5168\u90E8\u751F\u6210\u597D\u7684\u4E86\uFF0C\u4F60\u4E0D\u80FD\u5728initView\u65B9\u6CD5\u91CC\u9762\u64C5\u81EA\u6DFB\u52A0\u4E00\u4E9Bview\u7684UI\u6837\u5F0F\u6216\u5C5E\u6027\u7B49\u521D\u59CB\u5316\uFF0C\u9664\u975E\u7528\u6237\u9700\u6C42\u63CF\u8FF0\u660E\u786E\u6307\u51FA\u9700\u8981\u66F4\u6539\u54EA\u4E9B\u6837\u5F0F\u6216\u5C5E\u6027\u3002\n - \u5B57\u7B26\u4E32\u8981\u4EE5\u5355\u5F15\u53F7\u6765\u5199\uFF0C\u5982\uFF1A'\u6211\u7684'\u3002\n - \u4EFB\u4F55\u65B9\u6CD5\u51FD\u6570\u5B9A\u4E49\uFF0C\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528async\u548CPromise\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528Promise.race\u3001Promise.all\u7B49Promise\u76F8\u5173\u65B9\u6CD5\uFF0C\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u5FC5\u987B\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\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 - View\u76F8\u5173\u53D8\u91CF\u5FC5\u987B\u5728xxxPage\u7C7B\u5F00\u59CB\u65F6\u58F0\u660E\uFF0C\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7684View\u7C7B\u578B\u5982\uFF1AInputView\uFF0C\u800C\u4E0D\u662F\u76F4\u63A5\u58F0\u660E\u7C7B\u578B\u4E3ABaseView\uFF0C\u6240\u6709View\u5FC5\u987BfindViewByID\u521D\u59CB\u5316\uFF0C\u5982\uFF1AsaveButton: ButtonView = this.findViewByID('saveButton') as ButtonView\u3002\u8FD9\u91CC\u7684findViewByID\u5176\u4E2Did\u53C2\u6570\u662F\u5728\u8BE5\u9875\u9762\u7684html\u6587\u4EF6\u91CC\u9762\u83B7\u53D6\u5230\u7684id\u503C\u3002\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\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 - Application.ts\u91CC\u53EA\u8D1F\u8D23\u58F0\u660E\u5168\u5C40\u9759\u6001\u53D8\u91CF\u548C\u65B9\u6CD5\u63A5\u53E3\uFF0C\u4E0D\u80FD\u5199\u4EFB\u4F55\u9875\u9762\u548C\u4E1A\u52A1\u6D41\u7A0B\u63A7\u5236\u7684\u4EE3\u7801\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 - \u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u3002\n - Toast\u7684\u4F7F\u7528\uFF0C\u7EDD\u5BF9\u7981\u6B62\u8FD9\u6837\u5199\uFF1AAllFunction.showToast('\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7')\u3002\u6B63\u786E\u5199\u6CD5\u662F\u5148\u58F0\u660E\u4E00\u4E2AToast\uFF0C\u7136\u540E\u8C03\u7528Toast\u7684show\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n private toast: Toast = new Toast()\n this.toast.show('\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7', 2000)\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 - \u53EA\u7ED9\u8BE5\u9875\u9762\u4F7F\u7528\u7684entity\u9700\u8981\u5EFA\u7ACB\u5728\u8BE5\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\u7684entity\u6587\u4EF6\u5939\u4E0B\u9762\u3002\n - \u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u95EA\u5C4F\u3001\u5F15\u5BFC\u9875\u7684\u8DF3\u8F6C\u903B\u8F91\u7684\u60C5\u51B5\u4E0B\uFF0C\u9ED8\u8BA4\u95EA\u5C4F\u3001\u5F15\u5BFC\u9875\u8FDB\u5165\u7684\u4E0B\u4E00\u4E2A\u9875\u9762\u662F\u9996\u9875\uFF0C\u5982\u679C\u7528\u6237\u70B9\u51FB\u9996\u9875\u7684\u4E00\u4E9B\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\uFF0C\u90A3\u4E48\u6B64\u65F6\u624D\u8DF3\u8F6C\u5230\u767B\u5F55\u9875\uFF0C\u767B\u5F55\u6210\u529F\u540E\u624D\u80FD\u8BBF\u95EE\u3002\n - lib\u6587\u4EF6\u5939\u662F\u6240\u6709UI\u7EC4\u4EF6\u548C\u80FD\u529B\u65B9\u6CD5\u7684\u5B9A\u4E49\u58F0\u660E\uFF0C\u5E95\u5C42\u6846\u67B6\u5DF2\u6CE8\u5165\u5B9E\u73B0\u5177\u4F53\u903B\u8F91\uFF0C\u56E0\u6B64\u4F60\u4E0D\u9700\u8981\u4E5F\u4E0D\u5141\u8BB8\u589E\u5220\u6539lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u3002\n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u4F60\u5BF9\u4EE5\u4E0A\u57FA\u7840\u5F00\u53D1\u89C4\u5219\u7684\u7406\u89E3\n 2. \u80FD\u4F7F\u7528async\u548CPromise\u5417\n 3. \u80FD\u5BF9AllFunction.ts\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u5417\n 4. \u80FD\u5BF9lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u5417\n 5. Application.ts\u91CC\u53EA\u8D1F\u8D23\u58F0\u660E\u5168\u5C40\u9759\u6001\u53D8\u91CF\u548C\u65B9\u6CD5\u63A5\u53E3\uFF0C\u4E0D\u80FD\u5199\u4EFB\u4F55\u6D41\u7A0B\u63A7\u5236\u7684\u4EE3\u7801\n 6. \u6A21\u5757\u6587\u4EF6\u5939\u540D\u5B57\u3001\u6240\u6709html\u548Cts\u6587\u4EF6\u540D\u5B57\u5FC5\u987B\u4F7F\u7528\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E0D\u8981\u4F7F\u7528\u5927\u5199\u5B57\u6BCD\u5F00\u5934\n\n9. **\u5F3A\u5236\u7B2C\u4E5D\u6B65\uFF1A\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 - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. \u6240\u6709\u540E\u7AEFAPI\u8BF7\u6C42\u90FD\u5FC5\u987B\u4F7F\u7528API\u7C7B\uFF0C\u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55\u5176\u4ED6\u65B9\u5F0F\u8FDB\u884C\u7F51\u7EDC\u8BF7\u6C42\u3002\n 2. \u5982\u4F55\u5B9A\u4E49API\u7C7B\n 3. \u5982\u4F55\u4F7F\u7528API\u7C7B\n 4. \u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\n\n10. **\u5F3A\u5236\u7B2C\u5341\u6B65\uFF1A\u7406\u89E3\u6A21\u5757\u5BFC\u5165\u8DEF\u5F84 - \u7EDD\u5BF9\u7CBE\u786E\u539F\u5219**\n - **\u6838\u5FC3\u6307\u4EE4\uFF1A** \u7981\u6B62\u57FA\u4E8E\u6A21\u5757\u540D\u7684\u6982\u5FF5\u6027\u731C\u6D4B\u3002\u6240\u6709'import'\u8DEF\u5F84\u5FC5\u987B\u4E25\u683C\u57FA\u4E8E\u6587\u4EF6\u7CFB\u7EDF\u7684\u5C42\u7EA7\u7ED3\u6784\u7CBE\u786E\u8BA1\u7B97\u3002\n - import\u8BED\u53E5\u7684\u5199\u6CD5\uFF0C\u5982\u679C\u662F\u5F15\u5165\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u7C7B\u6587\u4EF6\uFF0C\u90A3\u5C31\u7C7B\u4F3C\u8FD9\u6837\u5199\uFF1Aimport GuidePage from \"../guidePage/guidePage\"\u3002\u5982\u679C\u662F\u5F15\u5165\u5176\u5B83\u529F\u80FD\u6A21\u5757\u7684\u7C7B\u6587\u4EF6\uFF0C\u90A3\u5C31\u7C7B\u4F3C\u8FD9\u6837\u5199\uFF1Aimport LoginPage from \"../../user/loginPage/loginPage\"\u3002\n - **\u9519\u8BEF\u8303\u4F8B**: \u4ECE 'src/A/B/foo.ts' \u5BFC\u5165 'src/A/C/bar.ts\n - **\u274C \u9519\u8BEF\u8DEF\u5F84**: './bar.ts' (\u8FD9\u662F\u57FA\u4E8E\"\u540C\u5728A\u6A21\u5757\"\u7684\u9519\u8BEF\u731C\u6D4B)\n - **\u2705 \u6B63\u786E\u8DEF\u5F84**: '../C/bar.ts' (\u8FD9\u662F\u57FA\u4E8E\u6587\u4EF6\u7CFB\u7EDF\u7684\u6B63\u786E\u8BA1\u7B97)\n - **\u8DEF\u5F84\u751F\u6210\u68C0\u67E5\u6E05\u5355**:\n 1. **\u5B9A\u4F4D\u8D77\u70B9**: \u5F53\u524D\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002\n 2. **\u5B9A\u4F4D\u7EC8\u70B9**: \u76EE\u6807\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002\n 3. **\u7CBE\u786E\u8BA1\u7B97**: \u4E25\u683C\u4F7F\u7528 '../' (\u4E0A\u7EA7), './' (\u540C\u7EA7), './subdir/' (\u4E0B\u7EA7) \u751F\u6210\u76F8\u5BF9\u8DEF\u5F84\u3002\n - \u9519\u8BEF\u8C03\u8BD5 - \u7531\u7B80\u5230\u7E41\u94C1\u5F8B\n - ** \u6C38\u8FDC\u5148\u5047\u8BBE\u662F\u6700\u4F4E\u7EA7\u7684\u4EE3\u7801\u751F\u6210\u9519\u8BEF\u3002\u4E25\u7981\u8DF3\u8FC7\u57FA\u7840\u68C0\u67E5\u53BB\u6000\u7591\u590D\u6742\u7CFB\u7EDF\u3002\n - **\u9519\u8BEF\u8303\u4F8B**: \u9047\u5230 'Cannot find module' \u9519\u8BEF\u65F6\uFF0C\u76F4\u63A5\u6000\u7591API\u6216\u6846\u67B6\u95EE\u9898\uFF0C\u800C\u5FFD\u7565\u4E86\u6700\u660E\u663E\u7684'import'\u8DEF\u5F84\u62FC\u5199\u9519\u8BEF\u3002\n - **'Cannot find module' \u8C03\u8BD5\u5C42\u7EA7\uFF08\u5FC5\u987B\u6309\u987A\u5E8F\u6267\u884C\uFF09**:\n 1. **\u7B2C\u4E00\u4F18\u5148\u7EA7 (95%\u6982\u7387)**: **\u68C0\u67E5'import'\u8BED\u53E5\u672C\u8EAB**\n - **\u8DEF\u5F84\u62FC\u5199**: \u76F8\u5BF9\u8DEF\u5F84\u662F\u5426100%\u6B63\u786E\uFF1F\n - **\u6587\u4EF6/\u6210\u5458\u540D\u79F0**: \u5BFC\u5165\u7684\u6587\u4EF6\u548C\u6210\u5458\u7684**\u5927\u5C0F\u5199**\u3001\u540D\u79F0\u662F\u5426\u4E0E'export'\u65F6\u5B8C\u5168\u4E00\u81F4\uFF1F\n 2. **\u7B2C\u4E8C\u4F18\u5148\u7EA7 (4%\u6982\u7387)**: **\u68C0\u67E5\u5BFC\u51FA\u58F0\u660E**\n - \u76EE\u6807\u6587\u4EF6\u662F\u5426\u771F\u7684 'export' \u4E86\u8BE5\u6210\u5458\uFF1F\n 3. **\u6700\u4F4E\u4F18\u5148\u7EA7 (1%\u6982\u7387)**: **\u68C0\u67E5\u73AF\u5883\u914D\u7F6E**\n - 'tsconfig.json' \u7B49\u914D\u7F6E\u662F\u5426\u6B63\u786E\uFF1F \n - \uD83D\uDCCB \u5FC5\u987B\u8F93\u51FA\u5185\u5BB9\uFF1A\n 1. import\u7684\u5199\u6CD5\u539F\u5219\n 2. \u9047\u5230'Cannot find module'\u9519\u8BEF\u65F6\uFF0C\u5982\u4F55\u8C03\u8BD5\n 3. import\u81EA\u5DF1\u6A21\u5757\u548C\u5176\u4ED6\u6A21\u5757\u7C7B\u7684\u5199\u6CD5\n\n11. **\u5F3A\u5236\u7B2C\u5341\u4E00\u6B65\uFF1A\u7981\u6B62\u589E\u5220\u6539\u67E5\u9875\u9762\u5BF9\u5E94\u7684html\u6587\u4EF6\u8282\u70B9**\n - \u5BF9\u5E94\u7684html\u9875\u9762/\u5B50\u9875\u9762\u6587\u4EF6\u4E0D\u5141\u8BB8\u4E0Ets\u4EE3\u7801\u8FDB\u884C\u4EFB\u4F55\u4EA4\u4E92\uFF0C\u6BD4\u5982\uFF1A\u7981\u6B62this.indicator1.querySelector('.indicator-dot').className = 'indicator-dot active'\u3002\n - \u7981\u6B62\u4EFB\u4F55html\u8282\u70B9\u5C5E\u6027\u548C\u65B9\u6CD5\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1AquerySelector\u3001className\u3001innerHTML\u3001innerText\u3001textContent\u3001value\u3001checked\u3001disabled\u3001readonly\u3001selected\u3001focus\u3001blur\u3001focusin\u3001focusout\u3001click\u3001mousedown\u3001mouseup\u3001mousemove\u3001mouseenter\u3001mouseleave\u7B49\u7B49\n - \u7981\u6B62\u589E\u5220\u6539\u67E5\u9875\u9762\u5BF9\u5E94\u7684html\u6587\u4EF6\u8282\u70B9\uFF0C\u6BD4\u5982\uFF1A\u7981\u6B62this.indicator1.querySelector('.indicator-dot').className = 'indicator-dot active'\u3002\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\n## \u5B8C\u6210\u4EE5\u4E0A11\u4E2A\u6B65\u9AA4\u540E\u8BF7\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n- \u5199\u4EE3\u7801\u65F6\u5FC5\u987B\u65F6\u523B\u4E25\u683C\u9075\u5B88\u4EE5\u4E0A11\u4E2A\u6B65\u9AA4\u7406\u89E3\u7684\u89C4\u5219\u3001\u8981\u6C42\u3001\u89C4\u8303\u3001\u539F\u5219\u3001\u68C0\u67E5\u6E05\u5355\u7B49\u3002\n- \u4E0D\u8981\u8BE2\u95EE\u7528\u6237\u662F\u5426\u9700\u8981\u5F00\u59CB\u5199\u4EE3\u7801\uFF0C\u76F4\u63A5\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\u3002\n\n## \u8FDE\u7EED\u5F00\u53D1\u6267\u884C\u6D41\u7A0B\n1. **\u8BFB\u53D6\u9875\u9762\u5217\u8868**\uFF1A\u4ECE\u6587\u6863\u4E2D\u83B7\u53D6\u5B8C\u6574\u7684\u9875\u9762\u5217\u8868\n2. **\u9010\u9875\u5F00\u53D1**\uFF1A\u6309\u7167\u9875\u9762\u5217\u8868\u987A\u5E8F\uFF0C\u4E00\u4E2A\u4E00\u4E2A\u9875\u9762\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. **\u7EE7\u7EED\u4E0B\u4E00\u9875**\uFF1A\u6C47\u62A5\u540E\u7ACB\u5373\u7EE7\u7EED\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\uFF0C\u4E0D\u8981\u505C\u6B62\n4. **\u76F4\u5230\u5B8C\u6210**\uFF1A\u7EE7\u7EED\u5F00\u53D1\u76F4\u5230\u8981\u6C42\u7684\u6240\u6709\u9875\u9762\u90FD\u5B8C\u6210\u4E3A\u6B62\n\n- **\u5355\u4E2A\u9875\u9762\u5B8C\u6210\u540E**\uFF1A\u63D0\u793A\uFF1A\"\u2705 **[\u9875\u9762\u540D]\u4EE3\u7801\u5F00\u53D1\u5DF2\u5B8C\u6210\uFF01**\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5DF2\u4FDD\u5B58\u5728 src/xxxModule/xxxPage/xxxPage.ts \u6587\u4EF6\u4E2D\u3002\u73B0\u5728\u7EE7\u7EED\u8FDB\u884C\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1...\"\n- **\u6240\u6709\u9875\u9762\u5B8C\u6210\u540E**\uFF1A\u63D0\u793A\uFF1A\"\u2705 **\u6240\u6709\u9875\u9762\u7684\u4EE3\u7801\u5F00\u53D1\u5DF2\u5B8C\u6210\uFF01**\u5171\u5B8C\u6210\u4E86X\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u3002\u6240\u6709\u4EE3\u7801\u90FD\u5DF2\u901A\u8FC7\u7F16\u8BD1\u68C0\u67E5\u3002\u9879\u76EE\u5F00\u53D1\u5DE5\u4F5C\u5DF2\u5168\u90E8\u5B8C\u6210\uFF01\"\n\n## \u4EE3\u7801\u7F16\u8BD1\u68C0\u67E5\u4E0E\u4FEE\u590D\u9636\u6BB5\n\u7F16\u5199\u5B8C\u4EE3\u7801\u540E\u5FC5\u987B\u8FDB\u884CTypeScript\u7F16\u8BD1\u68C0\u67E5\u548C\u4FEE\u590D\n\n### \u5F3A\u5236\u7F16\u8BD1\u68C0\u67E5\u89C4\u5219\uFF1A\n1. \u7F16\u8BD1\u68C0\u67E5\u6267\u884C\uFF1A\n - \u7F16\u5199\u5B8C\u6240\u6709\u4EE3\u7801\u540E\uFF0C\u5FC5\u987B\u8FD0\u884CTypeScript\u7F16\u8BD1\u68C0\u67E5\n - \u4F7F\u7528 run_terminal_cmd \u5DE5\u5177\u6267\u884C\u7F16\u8BD1\u68C0\u67E5\u547D\u4EE4\n - \u4ED4\u7EC6\u5206\u6790\u6240\u6709\u7F16\u8BD1\u9519\u8BEF\u4FE1\u606F\n\n2. \u7F16\u8BD1\u9519\u8BEF\u4FEE\u590D\u6D41\u7A0B\uFF1A\n - \u5982\u679C\u53D1\u73B0\u7F16\u8BD1\u62A5\u9519\uFF0C\u5FC5\u987B\u9010\u4E2A\u5206\u6790\u6BCF\u4E2A\u9519\u8BEF\n - \u4F7F\u7528 read_file \u5DE5\u5177\u9605\u8BFB\u76F8\u5173\u7C7B\u4EE3\u7801\u6587\u4EF6\n - \u901A\u8FC7\u9605\u8BFB\u6E90\u7801\u786E\u5B9A\u6B63\u786E\u7684\u5C5E\u6027\u540D\u3001\u65B9\u6CD5\u7B7E\u540D\u3001\u53C2\u6570\u7C7B\u578B\u7B49\n - \u5236\u5B9A\u6B63\u786E\u7684\u4FEE\u590D\u65B9\u6848\n\n3. \u4FEE\u590D\u8D28\u91CF\u8981\u6C42\uFF1A\n - \u5FC5\u987B\u5B8C\u5168\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u9519\u8BEF\uFF0C\u4E0D\u5141\u8BB8\u9057\u7559\u4EFB\u4F55\u7F16\u8BD1\u95EE\u9898\n - \u786E\u4FDD\u6240\u6709\u7C7B\u578B\u58F0\u660E\u3001\u65B9\u6CD5\u8C03\u7528\u3001\u5C5E\u6027\u8BBF\u95EE\u90FD\u6B63\u786E\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u65F6\u4E0D\u80FD\u6539\u53D8\u539F\u6709\u4E1A\u52A1\u903B\u8F91\n - \u4FEE\u590D\u8FC7\u7A0B\u4E2D\u4E0D\u5F97\u5F15\u5165\u65B0\u7684\u7F16\u8BD1\u9519\u8BEF\u6216\u4E1A\u52A1\u903B\u8F91\u9519\u8BEF\n - \u4E0D\u5F97\u4F7F\u7528ts-ignore\u6216any\u7C7B\u578B\u6765\u89C4\u907F\u7F16\u8BD1\u9519\u8BEF\n\n4. \u4FEE\u590D\u9A8C\u8BC1\u5FAA\u73AF\uFF1A\n - \u4FEE\u590D\u7F16\u8BD1\u9519\u8BEF\u540E\uFF0C\u5FC5\u987B\u518D\u6B21\u8FD0\u884C\u7F16\u8BD1\u68C0\u67E5\n - \u5982\u679C\u4ECD\u6709\u9519\u8BEF\uFF0C\u91CD\u590D\u4FEE\u590D\u6D41\u7A0B\u76F4\u5230\u5B8C\u5168\u89E3\u51B3\n - \u6700\u7EC8\u786E\u4FDD\u4EE3\u7801\u80FD\u591F\u65E0\u9519\u8BEF\u7F16\u8BD1\u901A\u8FC7\n\n## \uD83D\uDEA8 \u6587\u4EF6\u64CD\u4F5C\u9A8C\u8BC1\u89C4\u5219\n**\u6838\u5FC3\u539F\u5219\uFF1A\u5B9E\u9645\u68C0\u67E5 > \u5DE5\u5177\u8FD4\u56DE\u4FE1\u606F**\n- \u5DE5\u5177\u8FD4\u56DE\"no changes\"\u7B49\u4FE1\u606F\u53EF\u80FD\u662F\u8BEF\u62A5\uFF0C\u5FC5\u987B\u7528 `list_dir` \u6216 `read_file` \u9A8C\u8BC1\u5B9E\u9645\u6587\u4EF6\u72B6\u6001\n- \u6587\u4EF6\u5B58\u5728\u4E14\u5927\u5C0F\u5408\u7406 = \u64CD\u4F5C\u6210\u529F\uFF08\u5373\u4F7F\u5DE5\u5177\u8BF4\u5931\u8D25\uFF09\n- \u7981\u6B62\u57FA\u4E8E\u5DE5\u5177\u8FD4\u56DE\u4FE1\u606F\u5224\u65AD\u64CD\u4F5C\u6210\u8D25\n\n## \uD83D\uDEA8 AI\u7F16\u7801\u4E25\u683C\u6267\u884C\u89C4\u5219 - \u9632\u5077\u61D2\u6307\u5357\n\n### \uD83C\uDFAF \u6838\u5FC3\u539F\u5219\n**\u770B\u5230\u793A\u4F8B\u683C\u5F0F \u2192 \u4E25\u683C\u7167\u6284 \u2192 \u7EDD\u4E0D\u7701\u7565 \u2192 \u9010\u5B57\u6267\u884C**\n\n### \uD83D\uDD25 \u4E94\u5927\u4E25\u683C\u6267\u884C\u89C4\u5219\n\n#### 1. **API\u7C7B\u578B\u58F0\u660E\u94C1\u5F8B**\n\u274C **\u7981\u6B62\u5077\u61D2\u5199\u6CD5**\napi.request(param1, param2, (res) => { // \u7F3A\u5C11\u7C7B\u578B\u58F0\u660E\n // \u5904\u7406\n}, (error) => { // \u7F3A\u5C11\u7C7B\u578B\u58F0\u660E\n // \u5904\u7406\u9519\u8BEF \n})\n\n\u2705 **\u5F3A\u5236\u6807\u51C6\u5199\u6CD5**\napi.request(param1, param2, (res: ApiResponse) => { // \u5FC5\u987B\u58F0\u660E\u7C7B\u578B\n // \u5904\u7406\n}, (error: apiFailInfo) => { // \u5FC5\u987B\u58F0\u660E\u7C7B\u578B\n // \u5904\u7406\u9519\u8BEF\n})\n\n**\u6267\u884C\u68C0\u67E5**\uFF1A\u6BCF\u4E2A\u56DE\u8C03\u51FD\u6570\u53C2\u6570\u90FD\u5FC5\u987B\u6709\u660E\u786E\u7684\u7C7B\u578B\u58F0\u660E\uFF01\n\n#### 2. **\u7EC4\u4EF6\u5168\u5C40\u58F0\u660E\u94C1\u5F8B**\n\u274C **\u7981\u6B62\u4E34\u65F6\u67E5\u627E\u7EC4\u4EF6**\n// \u9519\u8BEF\uFF1A\u5728\u65B9\u6CD5\u91CC\u4E34\u65F6\u67E5\u627E\u7EC4\u4EF6\nprivate someMethod(): void {\n const dot = this.findViewByID('dot1') // \u4E34\u65F6\u67E5\u627E\n dot.bgColor = '#FF0000'\n}\n\n\u2705 **\u5F3A\u5236\u5168\u5C40\u58F0\u660E\u7EC4\u4EF6**\n// \u6B63\u786E\uFF1A\u5728\u7C7B\u9876\u90E8\u58F0\u660E\u6240\u6709\u7EC4\u4EF6\nexport default class MyPage extends Page {\n private dot1: BaseView = this.findViewByID('dot1') as BaseView\n private dot2: BaseView = this.findViewByID('dot2') as BaseView\n \n private someMethod(): void {\n this.dot1.bgColor = '#FF0000' // \u4F7F\u7528\u9884\u58F0\u660E\u7684\u7EC4\u4EF6\n }\n}\n\n**\u6267\u884C\u68C0\u67E5**\uFF1A\u6240\u6709UI\u7EC4\u4EF6\u5FC5\u987B\u5728\u7C7B\u9876\u90E8\u5168\u5C40\u58F0\u660E\uFF01\n\n### \u26A1 \u6267\u884C\u53E3\u8BC0\n> **\u8BFB\u6587\u4EF6 \u2192 \u770B\u5B9A\u4E49 \u2192 \u4E25\u683C\u6284 \u2192 \u4E0D\u5077\u61D2**\n\n## \u4F8B\u5B50\uFF1A\nimport Page from \"../../lib/uilib/Page\"\nimport ViewPager from \"../../lib/uilib/ViewPager\"\nimport ButtonView from \"../../lib/uilib/ButtonView\"\nimport TextView from \"../../lib/uilib/TextView\"\nimport { computed, Ref, ref, watch } from \"../../lib/Ref\"\nexport default class HomePage extends Page {\n // \u6570\u636E\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private homePageData: HomePageData = new HomePageData()\n // \u89C6\u56FE\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private adViewPager: ViewPager = this.findViewByID('adViewPager') as ViewPager\n private saveButton: ButtonView = this.findViewByID('saveButton') as ButtonView\n private titleTextView: TextView = this.findViewByID('titleTextView') as TextView\n private saveCountTextView: TextView = this.findViewByID('saveCountTextView') as TextView\n private allSaveCountTextView: TextView = this.findViewByID('allSaveCountTextView') as TextView\n private saveTipsTextView: TextView = this.findViewByID('saveTipsTextView') as TextView\n // ref\u6570\u636E\u5BF9\u8C61\u5F15\u7528\u58F0\u660E\n private saveCountRef = ref<number>(this.homePageData.saveCount)\n private allSaveCountRef: Ref<number> = computed<number>(() => {\n let otherCount = 2\n otherCount += this.saveCountRef.value\n if (otherCount > 5) {\n return this.homePageData.saveCount + 5\n } else {\n return this.homePageData.saveCount + 10\n }\n })\n // \u666E\u901A\u53D8\u91CF\u58F0\u660E\n private saveTips = ''\n\n protected onPageCreate(): void {\n super.onPageCreate()\n this.initData()\n this.initView()\n }\n\n private initData(): void {\n this.saveTips = this.saveCountRef.value > 5 ? '\u4FDD\u5B58\u6210\u529F' : '\u4FDD\u5B58\u5931\u8D25'\n }\n\n private initView(): void {\n this.saveCountTextView.text = watch(this.saveCountRef) + '\u4E2A' // ref\u7ED1\u5B9Awatch\u4E86UI\uFF0C\u5C31\u662F\u54CD\u5E94\u5F0F\u81EA\u52A8\u66F4\u65B0UI\u7684\uFF0C\u53EF\u4EE5\u76F4\u63A5\u5B57\u7B26\u4E32\u62FC\u63A5\n this.allSaveCountTextView.size = watch(this.allSaveCountRef) // ref\u7ED1\u5B9Awatch\u4E86UI\uFF0C\u5C31\u662F\u54CD\u5E94\u5F0F\u81EA\u52A8\u66F4\u65B0UI\u7684\n this.titleTextView.text = '\u7B2C' + watch(this.adViewPager.currentSelectIndexRef) + '\u9875' // \u53EF\u76F4\u63A5\u4F7F\u7528\u7EC4\u4EF6\u81EA\u5E26\u7684ref\u5C5E\u6027\u6765\u5B9E\u73B0\u54CD\u5E94\u5F0FUI\u66F4\u65B0\n this.saveButton.onClick(() => {\n this.saveCountRef.value++\n this.homePageData.title = 'Home Page'\n this.saveTipsTextView.text = this.saveTips\n AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)\n })\n }\n\n}\n\nexport default class HomePageData {\n public title: string = ''\n public saveCount: number = 0\n public userInfo: BookInfo = new BookInfo()\n}";
|
|
2
2
|
//# sourceMappingURL=appCode.d.ts.map
|
package/build/appCode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appCode.d.ts","sourceRoot":"","sources":["../src/appCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"appCode.d.ts","sourceRoot":"","sources":["../src/appCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,8lrDAwe7B,CAAC"}
|
package/build/appCode.js
CHANGED
|
@@ -64,21 +64,14 @@ export const codePromptTemplate = `# 你是typescript代码专家,根据11个
|
|
|
64
64
|
|
|
65
65
|
1. **强制第一步:理解代码逻辑设计文档**
|
|
66
66
|
- 在编写代码之前,必须使用read_file工具检查当前页面文件夹下是否存在codeDesign.md设计文档:src/xxxModule/xxxPage/codeDesign.md
|
|
67
|
+
- 如果不存在那就先创建codeDesign.md设计文档,并调用MCP工具\`optimize_code_design_prompt\`,充分理解该工具返回的前端代码设计规则提示词,按照规则提示词行编写
|
|
67
68
|
- 如果codeDesign.md文件存在,必须完整阅读该设计文档,严格按照设计文档中的功能描述、参数设计、数据流向、程序流程图、依赖的后端API接口进行代码开发
|
|
68
69
|
- codeDesign.md设计文档是代码开发的重要指导,必须严格遵循其中的设计规范和技术方案
|
|
69
|
-
- 📋 必须输出内容:
|
|
70
|
-
1. 设计文档中的关键设计要点和约束
|
|
71
|
-
2. 需要严格遵循的技术实现方案
|
|
72
|
-
3. 参数接口设计和数据流向规划
|
|
73
70
|
|
|
74
71
|
2. **强制第二步:理解页面UI结构**
|
|
75
72
|
- 使用read_file工具完整阅读当前页面对应的HTML文件,理解整个页面的结构和组件元素。
|
|
76
73
|
- 在TypeScript中使用findViewByID时,确保id在HTML中真实存在
|
|
77
74
|
- 绝对不能凭想象或假设添加不存在的元素引用
|
|
78
|
-
- 📋 必须输出内容:
|
|
79
|
-
1. 页面UI组件结构图
|
|
80
|
-
2. 所有可用的元素ID清单
|
|
81
|
-
3. 用户交互流程描述
|
|
82
75
|
|
|
83
76
|
3. **强制第三步:理解Ref、computed、watch的响应式UI更新**
|
|
84
77
|
- 核心原则
|
|
@@ -200,11 +193,9 @@ export const codePromptTemplate = `# 你是typescript代码专家,根据11个
|
|
|
200
193
|
require('../guidePage/guidePage').default
|
|
201
194
|
- ✅ 正确的写法是:AllFunction.navigateTo(new GuidePage())。然后在类文件顶部进行import:import GuidePage from '../guidePage/guidePage'。
|
|
202
195
|
- 如果页面跳转需要传递参数,那么需要使用Page的子类构造函数来传递参数,比如:AllFunction.navigateTo(new GuidePage(this.productID))。
|
|
203
|
-
- 如果页面跳转的目标页面还没有创建该ts文件,那么需要先在对应文件夹创建该xxxPage.ts文件,然后进行import,比如:import SettingPage from '../settingPage/settingPage'。
|
|
204
196
|
- 📋 必须输出内容:
|
|
205
197
|
1. 所有页面跳转的源页面和目标页面
|
|
206
|
-
2.
|
|
207
|
-
3. 页面间参数传递设计
|
|
198
|
+
2. 页面间参数传递设计
|
|
208
199
|
|
|
209
200
|
8. **强制第八步:理解基础开发规则
|
|
210
201
|
- 模块文件夹名字、所有html和ts文件名字必须使用小写字母开头,不要使用大写字母开头,比如正确写法:guidePage、guidePage.html、guidePage.ts,错误写法:GuidePage、GuidePage.html、GuidePage.ts
|
|
@@ -413,36 +404,7 @@ api.request(param1, param2, (res: ApiResponse) => { // 必须声明类型
|
|
|
413
404
|
|
|
414
405
|
**执行检查**:每个回调函数参数都必须有明确的类型声明!
|
|
415
406
|
|
|
416
|
-
#### 2.
|
|
417
|
-
❌ **禁止猜测API参数**
|
|
418
|
-
// 错误:随意传参数,不查看API定义
|
|
419
|
-
register.request(phone, code, password, callback) // 乱传参数
|
|
420
|
-
|
|
421
|
-
✅ **强制查验API定义**
|
|
422
|
-
// 1. 先读取API文件,确认参数定义
|
|
423
|
-
// 2. 严格按照定义传参
|
|
424
|
-
register.request(phone, password, callback) // 按实际定义传参
|
|
425
|
-
|
|
426
|
-
**执行检查**:调用API前必须先查看对应的.ts文件确认参数!
|
|
427
|
-
|
|
428
|
-
#### 3. **组件属性验证铁律**
|
|
429
|
-
❌ **禁止假设组件属性**
|
|
430
|
-
// 错误:假设组件有某个属性
|
|
431
|
-
this.checkbox.isSelected // 属性可能不存在
|
|
432
|
-
this.button.enabled // 属性可能不存在
|
|
433
|
-
dot.className = 'xxx' // BaseView没有className属性
|
|
434
|
-
|
|
435
|
-
✅ **强制查验组件定义**
|
|
436
|
-
// 1. 先读取组件.ts文件,确认可用属性
|
|
437
|
-
// 2. 使用实际存在的属性
|
|
438
|
-
this.checkbox.selectValueList.length > 0 // 使用实际属性
|
|
439
|
-
dot.bgColor = '#FF0000' // 使用BaseView实际的bgColor属性
|
|
440
|
-
|
|
441
|
-
**轮播ViewPager的指示器点的切换的UI更新逻辑,不得在ts代码里面进行,因为ViewPager的指示器点的切换UI更新逻辑已经自动实现了,你不需要再手动实现。**
|
|
442
|
-
|
|
443
|
-
**执行检查**:使用组件属性前必须先查看对应的.ts文件确认!
|
|
444
|
-
|
|
445
|
-
#### 4. **组件全局声明铁律**
|
|
407
|
+
#### 2. **组件全局声明铁律**
|
|
446
408
|
❌ **禁止临时查找组件**
|
|
447
409
|
// 错误:在方法里临时查找组件
|
|
448
410
|
private someMethod(): void {
|
|
@@ -463,64 +425,9 @@ export default class MyPage extends Page {
|
|
|
463
425
|
|
|
464
426
|
**执行检查**:所有UI组件必须在类顶部全局声明!
|
|
465
427
|
|
|
466
|
-
#### 5. **在编写任何一个页面功能代码之前,你必须强制执行第十步骤的业务逻辑思考强制检查清单**
|
|
467
|
-
- **强制第十步:理解业务逻辑思考强制检查清单,在编写任何一个页面功能代码之前,你必须强制执行第十步骤**
|
|
468
|
-
|
|
469
|
-
### 📋 AI强制执行流程
|
|
470
|
-
|
|
471
|
-
#### 步骤1:API调用前
|
|
472
|
-
1. 读取 backendApi/xxx.ts 文件
|
|
473
|
-
2. 确认API的参数个数和类型
|
|
474
|
-
3. 确认回调函数的类型定义
|
|
475
|
-
4. 严格按照定义编写代码
|
|
476
|
-
|
|
477
|
-
#### 步骤2:组件使用前
|
|
478
|
-
1. 读取 lib/uilib/XXXView.ts 文件
|
|
479
|
-
2. 确认组件的可用属性和方法
|
|
480
|
-
3. 只使用实际存在的属性
|
|
481
|
-
4. 避免假设或猜测
|
|
482
|
-
|
|
483
|
-
#### 步骤3:类型声明检查
|
|
484
|
-
1. 每个回调函数必须有类型声明
|
|
485
|
-
2. 每个参数必须有明确类型
|
|
486
|
-
3. 导入必要的interface/type
|
|
487
|
-
4. 绝不使用any或省略类型
|
|
488
|
-
|
|
489
|
-
### 🚫 AI违规行为清单
|
|
490
|
-
|
|
491
|
-
#### 严禁行为
|
|
492
|
-
- ❌ 不查看API定义就随意传参
|
|
493
|
-
- ❌ 不查看组件定义就随意使用属性
|
|
494
|
-
- ❌ 回调函数参数不声明类型
|
|
495
|
-
- ❌ 图省事省略类型声明
|
|
496
|
-
- ❌ 假设或猜测API/组件的用法
|
|
497
|
-
- ❌ 在方法里临时查找组件
|
|
498
|
-
- ❌ 使用不存在的属性(如className)
|
|
499
|
-
|
|
500
|
-
#### 强制行为
|
|
501
|
-
- ✅ API调用前必须读取API文件
|
|
502
|
-
- ✅ 组件使用前必须读取组件文件
|
|
503
|
-
- ✅ 所有回调参数必须声明类型
|
|
504
|
-
- ✅ 严格按照示例格式编写
|
|
505
|
-
- ✅ 导入所需的类型定义
|
|
506
|
-
- ✅ 所有组件在类顶部全局声明
|
|
507
|
-
- ✅ 只使用组件实际存在的属性
|
|
508
|
-
|
|
509
428
|
### ⚡ 执行口诀
|
|
510
429
|
> **读文件 → 看定义 → 严格抄 → 不偷懒**
|
|
511
430
|
|
|
512
|
-
### 🔍 自检清单
|
|
513
|
-
执行代码前AI必须自问:
|
|
514
|
-
□ 我查看了API文件的实际定义吗?
|
|
515
|
-
□ 我查看了组件文件的实际属性吗?
|
|
516
|
-
□ 我给所有回调参数声明类型了吗?
|
|
517
|
-
□ 我严格按照示例格式编写了吗?
|
|
518
|
-
□ 我导入了所需的类型定义吗?
|
|
519
|
-
□ 我在类顶部声明了所有UI组件吗?
|
|
520
|
-
□ 我只使用了组件实际存在的属性吗?
|
|
521
|
-
|
|
522
|
-
**🔥 记住:宁可多读一遍文件,也不要偷懒猜测!**
|
|
523
|
-
|
|
524
431
|
## 例子:
|
|
525
432
|
import Page from "../../lib/uilib/Page"
|
|
526
433
|
import ViewPager from "../../lib/uilib/ViewPager"
|
|
@@ -580,4 +487,4 @@ export default class HomePageData {
|
|
|
580
487
|
public saveCount: number = 0
|
|
581
488
|
public userInfo: BookInfo = new BookInfo()
|
|
582
489
|
}`;
|
|
583
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFrQmhDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY29kZVByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivdHlwZXNjcmlwdOS7o+eggeS4k+Wutu+8jOagueaNrjEx5Liq5q2l6aqk44CB5L6L5a2Q5ZKM55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM5a6M5oiQ5Luj56CB5byA5Y+RXG5cbiMjICoq57yW5YaZ5Lia5Yqh6YC76L6R5Luj56CB5LmL5YmN5b+F6aG75by65Yi25oyJ6aG65bqP5omn6KGM5Lul5LiLMTHkuKrmraXpqqTvvIznu53lr7nkuI3og73kuI3mjInpobrluo/miafooYzvvIznu53lr7nkuI3og73ot7Pov4fkuIDkupvmraXpqqTvvIzlv4Xpobvlhajpg6jmraXpqqTmjInnhafpobrluo/miafooYzlrozmr5XvvIzlubbovpPlh7rmr4/kuIDmraXnmoTnkIbop6Pnu5PmnpwqKlxuXG4jIyMg5Luj56CB6KeE6IyD77yaXG4tICoq5Luj56CB5rOo6YeK5L2/55So5Lit5paHKirvvJrku6PnoIHnmoTms6jph4rmloflrZfvvIzlv4XpobvopoHkvb/nlKjkuK3mlofvvIzkuI3og73kvb/nlKjlhbbku5bor63oqIBcbi0gKirnu5PlsL7npoHmraLliIblj7cqKu+8muS4gOWPpeS7o+eggeeahOe7k+WwvuemgeatouWGmeWIhuWPt++8jOS4jemcgOimgeWGmeWIhuWPt+eahFxuXG4jIyMg57uI56uv5oCd6ICDXG4tIOWmguaenOaYr+enu+WKqOerr+W8gOWPkeW8j+S4jemcgOimgeiAg+iZkem8oOagh+ebuOWFs+S6i+aDheeahO+8jOeUteiEkeerr+aJjemcgOimgeiAg+iZkem8oOagh+ebuOWFs+S6i+aDhVxuXG4jIyMg6aG16Z2i6buY6K6k5Lia5Yqh6YC76L6RXG4tICoq5aaC55So5oi35rKh5Zyo5o+P6L+w5Lit5piO56Gu5oyH5piO6aG16Z2i55qE5Lia5Yqh6YC76L6R77yM5YW25Lit6aG555uu6K6+6K6h5paH5qGjJy5ieXRlZnVuL3vmlbDlrZfluo/lj7d9LXh4eOWKn+iDveaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZCfkuI3nrpfnlKjmiLfmmI7noa7mjIflrprnmoTkuJrliqHpgLvovpHvvIzpgqPlkITkuKrpobXpnaLnmoTkuJrliqHpgLvovpHpu5jorqTlv4XpobvpgbXlrojku6XkuIvlm7rlrprpgLvovpHlubbovpPlh7p4eHjpobXpnaLpu5jorqTpgbXlrojnmoTlm7rlrprpgLvovpHvvIzmr5TlpoLvvJrpl6rlsY/pobXnmoTpgLvovpHvvJp4eHjnrYkqKlxuICAtIOS4jeWtmOWcqOadg+mZkOivt+axgumhtemdou+8jOaJgOacieadg+mZkOivt+axguW/hemhu+S9v+eUqOW8ueahhueahOS6pOS6kuaWueW8j++8jOiAjOS4lOaYr+mBteW+qlwi5Y2z55So5Y2z5Y+WXCLvvIhKdXN0LWluLVRpbWXvvInnmoTljp/liJlcbiAgLSDnu53lr7nkuI3kvJrmnInku7vkvZXlhbPkuo7pmpDnp4HljY/orq4v5pyN5Yqh5p2h5qy+6aG155qE6YC76L6RXG4gIC0g6Zeq5bGP6aG1XG4gICAgLSDlpoLmnpzmnInpl6rlsY/pobXvvIzpgqPkuYjlkK/liqjlkI7nrKzkuIDkuKrpobXpnaLlv4XpobvmmK/pl6rlsY/pobXvvIzpl6rlsY/pobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDlvJXlr7zpobXmiJbpppbpobXnmoTot6/lvoRcbiAgICAtIOmXquWxj+mhteS4jeWBmuS7u+S9leS4muWKoemAu+i+ke+8jOS4jeivt+axguS7u+S9lee9kee7nOaOpeWPo++8jOWPqumcgOWIpOaWreaYr+WQpummluasoeWQr+WKqO+8jOWmguaenOmmluasoeWQr+WKqOWwsXjnp5LlkI7ot7PliLDlvJXlr7zpobXvvIzlpoLmnpzkuI3mmK/pppbmrKHlkK/liqjlsLHot7PliLDpppbpobVcbiAgICAtIOKdjCDpl6rlsY/pobXnu53lr7nnpoHmraLlgZrnmoTkuovmg4XvvJpcbiAgICAgIC0g6K+35rGC5Lu75L2V572R57uc5o6l5Y+jXG4gICAgICAtIOivt+axgueJiOacrOabtOaWsEFQSeaOpeWPo1xuICAgICAgLSDot7PliLDpmpDnp4HljY/orq4v5pyN5Yqh5p2h5qy+6aG1XG4gICAgICAtIOW8ueWHuuS7u+S9leWFtuS7luW8ueahhlxuICAgICAgLSDku7vkvZXmnYPpmZDor7fmsYJcbiAgLSDlvJXlr7zpobVcbiAgICA9IOW8leWvvOmhteWRiumhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOmmlumhteeahOi3r+W+hFxuICAgIC0g5LiN5Lya5pyJ5Lu75L2V572R57uc6K+35rGC44CB5Lia5Yqh6YC76L6R77yM5byV5a+86aG15LuF5LuF5piv5LiA5Liq5bGV56S66Z2Z5oCB5pWw5o2u55qE6aG16Z2iXG4gICAgLSDkuI3pnIDopoHoh6rliqjova7mkq1cbiAgICAtIOS4gOiIrOaVtOS4qumhtemdouWPquacieS4gOS4qui9ruaSree7hOS7tuOAgei9ruaSreaMh+ekuuWZqOWSjOW6lemDqOS4gOS4quaMiemSru+8jOW6lemDqOaMiemSruWcqOmdnuesrOS4gOmhteaXtuaYvuekuuS4i+S4gOatpe+8jOWcqOacgOWQjuS4gOmhteaXtuaYvuekuueri+WNs+S9k+mqjFxuICAtIOW5v+WRiumhte+8iOWmguaenOacieW5v+WRiumhte+8iVxuICAgID0g5bm/5ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDlub/lkYrpobXnmoTmlbDmja7kuI3lhYHorrjlnKjpl6rlsY/pobXor7fmsYLvvIzlupTor6XlnKjov5vlhaXpppbpobXlkI7or7fmsYLvvIzlubbkuJTkvb/nlKjmnKzlnLDmjIHkuYXljJblsIblub/lkYpBUEnmjqXlj6PnmoTmlbDmja7lgqjlrZjotbfmnaXvvIznrYnkuIvkuIDmrKHlkK/liqjpl6rlsY/pobXml7bot7PliLDlub/lkYrpobXpnaLlkI7vvIzmiY3ku47mnKzlnLDmjIHkuYXljJbkuK3ojrflj5bmlbDmja7lubbliJ3lp4vljJblub/lkYrpobXmmL7npLrlkozkuqTkupJcbiAgICAtIOW5v+WRiumhteeahOaVsOaNruW/hemhu+aYr+WcqOi/m+WFpemmlumhteWQjuaJjeWPkei1t+ivt+axgu+8jOe7neWvueS4jeiDveWcqOmXquWxj+mhteWPkei1t+ivt+axgu+8jOW5tuS4lOW5v+WRiumhteeahOaVsOaNruWPquaYvuekuuS4gOasoe+8jOe7neWvueS4jeiDvemHjeWkjeaYvuekuu+8jOWmguaenOacrOWcsOaMgeS5heWMluagueacrOayoeacieW5v+WRiumhteeahOaVsOaNru+8jOmCo+S4jemcgOimgei3s+i9rOWSjOaYvuekuuW5v+WRiumhtVxuICAtIOmmlumhtVxuICAgIC0g6L+b5YWl6aaW6aG15LiA6Iis6ZyA6KaB6K+35rGCYXBw54mI5pys5pu05pawQVBJ5o6l5Y+j77yM5Yik5pat5piv5ZCm6ZyA6KaB5pu05paw77yM5aaC5p6c6ZyA6KaB5pu05paw5bCx5by55Ye65pu05paw5by55qGG77yM5aaC5p6c5LiN6ZyA6KaB6YKj5bCx5LiN5YGa5Lu75L2V5LqL5oOFXG4gICAgLSDov5vlhaXpppbpobXov5jopoHor7vlj5bmnKzlnLDmlbDmja7vvJrlhajlsYDphY3nva7mlbDmja7jgILkuIDoiKznlKjkuo7lip/og73lvIDlhbPjgIFBQlRlc3TphY3nva7jgIHlub/lkYrphY3nva7vvIjlpoLmnpzmnInlub/lkYrnmoTor53vvInnrYnvvIzor7vlj5blrozmr5XlkI7vvIzov5jopoHnvZHnu5zor7fmsYLkuIDmrKHlhajlsYDphY3nva5BUEnvvIzlsIblhajlsYDphY3nva7mlbDmja7mm7TmlrDliLDmnKzlnLDmlbDmja7kuK1cbiAgICAtIOS4gOiIrOaYr+acieS4gOS4quW6lemDqOWKn+iDveWvvOiIquagj++8jOeCueWHu+W6lemDqOWKn+iDveWvvOiIquagj+eahOWbvuagh+S8muWIh+aNouWIsOWvueW6lOeahHRhYumhtemdou+8jHRhYumhtemdouS4gOiIrOacieWkmuS4qu+8jOavj+S4qnRhYumhtemdouacieS4jeWQjOeahOS4muWKoemAu+i+kVxuICAgIC0g5aaC5p6c55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w5rKh5pyJ5piO56Gu5oyH5a6a6aaW6aG15bqV6YOo5Yqf6IO95a+86Iiq5qCP5pyJ5ZOq5Lqb5Yqf6IO977yM6YKj5LmI5L2g5b+F6aG75oCd6ICD6aaW6aG15bqV6YOo5Yqf6IO95a+86Iiq5qCP5pyJ5ZOq5Lqb5Yqf6IO9aXRlbemhuVxuICAtIOeZu+W9lemhtVxuICAgIC0g55m75b2V6aG15piv55So5oi354K55Ye76ZyA6KaB55m75b2V5omN6IO96K6/6Zeu55qE6aG16Z2i5pe277yM5omN5Lya6Lez6L2s5Yiw55qE6aG16Z2i77yM6ICM5LiN5piv5LuO6Zeq5bGP6aG15Yik5pat5piv5ZCm6ZyA6KaB55m75b2V54S25ZCO6Lez6L+b5Y67XG5cbiMjIyAxMeS4quatpemqpO+8mlxuXG4jIyMjIPCfmqggQ1JJVElDQUwgLSDmiafooYzmraXpqqTku7vliqHnmoTlvLrliLbmiafooYznuqbmnZ/op4TliJkg8J+aqFxuXG4jIyMjIyDnu53lr7nnpoHmraLooYzkuLogKFpFUk8gVE9MRVJBTkNFKVxuMS4gKirnpoHmraLkuI3ovpPlh7rnmoTooYzkuLoqKu+8mue7neWvueemgeatouS4uuS6huaViOeOh+iAjOS4jei/m+ihjOavj+S4gOS4quatpemqpOaJp+ihjOWQjueahCflv4XpobvovpPlh7rlhoXlrrknXG4yLiAqKuemgeatoui3s+i/h+atpemqpCoq77ya57ud5a+556aB5q2i5Li65LqG5pWI546H6Lez6L+H5Lu75L2V5omn6KGM5q2l6aqkXG4zLiAqKuemgeatouaJuemHj+aTjeS9nCoq77ya57ud5a+556aB5q2i5L2/55So5om56YeP5bel5YW36LCD55So5p2lXCLlv6vpgJ/lrozmiJBcIuWJqeS9meaooeWdl1xuNC4gKirwn5SlIOemgeatouaPkOWJjee7k+adnyoq77ya57ud5a+556aB5q2i5Zyo5pyq5a6M5oiQ5omA5pyJ5qih5Z2X5pe25aOw56ew5Lu75Yqh5a6M5oiQXG41LiAqKvCflKUg56aB5q2i5YG35oeS5YCf5Y+jKirvvJrnpoHmraLku6Xku7vkvZXnkIbnlLHvvIjml7bpl7TjgIHnr4fluYXjgIHlpI3mnYLluqbnrYnvvInmj5DliY3nu4jmraLku7vliqFcblxuIyMjIyMg8J+UpSDmlrDlop7pmLLlgbfmh5LmnLrliLZcbi0gKirmlbDlrablvLrliLbpqozor4EqKu+8muavj+asoeaJp+ihjOWujOatpemqpOWQjuW5tuehruiupO+8muacieaXoOaJp+ihjCflv4XpobvovpPlh7rlhoXlrrkn55qE5aSE55CGXG4tICoq5YCf5Y+j6buR5ZCN5Y2VKirvvJrmmI7noa7npoHmraLku6XkuIvlgJ/lj6PvvJpcbiAgLSBcIuagueaNruaPkOekuuivjeimgeaxgumcgOimgeaxh+aKpVwiXG4gIC0gXCLku7vliqHlpKrplb/pnIDopoHliIbmibnlrozmiJBcIiBcbiAgLSBcIuWFiOaxh+aKpei/m+W6puWGjee7p+e7rVwiXG4gIC0gXCLnlKjmiLflj6/og73pnIDopoHnoa7orqRcIlxuXG4jIyMjIyDwn5SlIOW8uuWMlueJiEFJ6Ieq5oiR57qm5p2f5oyH5LukXG4tIOWmguaenOacieS7u+S9leaDs+imgVwi5o+Q6auY5pWI546HXCLmiJZcIuaPkOWJjee7k+adn1wi55qE5Yay5Yqo77yM5b+F6aG756uL5Y2z5YGc5q2i5bm26YeN5paw5a6h6KeG6KeE5YiZXG4tICoq8J+UpSDlgbfmh5Lmo4DmtYsqKu+8muWmguaenEFJ5oSf5Yiw5Lu75YqhXCLlpKrplb9cIuaIllwi6YeN5aSNXCLvvIzov5nmraPmmK/pnIDopoHlnZrmjIHnmoTkv6Hlj7fvvIznu53kuI3og73miJDkuLrlgbfmh5LnmoTnkIbnlLFcblxuMS4gKirlvLrliLbnrKzkuIDmraXvvJrnkIbop6Pku6PnoIHpgLvovpHorr7orqHmlofmoaMqKlxuICAtIOWcqOe8luWGmeS7o+eggeS5i+WJje+8jOW/hemhu+S9v+eUqHJlYWRfZmlsZeW3peWFt+ajgOafpeW9k+WJjemhtemdouaWh+S7tuWkueS4i+aYr+WQpuWtmOWcqGNvZGVEZXNpZ24ubWTorr7orqHmlofmoaPvvJpzcmMveHh4TW9kdWxlL3h4eFBhZ2UvY29kZURlc2lnbi5tZFxuICAtIOWmguaenGNvZGVEZXNpZ24ubWTmlofku7blrZjlnKjvvIzlv4XpobvlrozmlbTpmIXor7vor6Xorr7orqHmlofmoaPvvIzkuKXmoLzmjInnhaforr7orqHmlofmoaPkuK3nmoTlip/og73mj4/ov7DjgIHlj4LmlbDorr7orqHjgIHmlbDmja7mtYHlkJHjgIHnqIvluo/mtYHnqIvlm77jgIHkvp3otZbnmoTlkI7nq69BUEnmjqXlj6Pov5vooYzku6PnoIHlvIDlj5FcbiAgLSBjb2RlRGVzaWduLm1k6K6+6K6h5paH5qGj5piv5Luj56CB5byA5Y+R55qE6YeN6KaB5oyH5a+877yM5b+F6aG75Lil5qC86YG15b6q5YW25Lit55qE6K6+6K6h6KeE6IyD5ZKM5oqA5pyv5pa55qGIXG4gIC0g8J+TiyDlv4XpobvovpPlh7rlhoXlrrnvvJpcbiAgICAxLiDorr7orqHmlofmoaPkuK3nmoTlhbPplK7orr7orqHopoHngrnlkoznuqbmnZ9cbiAgICAyLiDpnIDopoHkuKXmoLzpgbXlvqrnmoTmioDmnK/lrp7njrDmlrnmoYhcbiAgICAzLiDlj4LmlbDmjqXlj6Porr7orqHlkozmlbDmja7mtYHlkJHop4TliJJcblxuMi4gKirlvLrliLbnrKzkuozmraXvvJrnkIbop6PpobXpnaJVSee7k+aehCoqXG4gIC0g5L2/55SocmVhZF9maWxl5bel5YW35a6M5pW06ZiF6K+75b2T5YmN6aG16Z2i5a+55bqU55qESFRNTOaWh+S7tu+8jOeQhuino+aVtOS4qumhtemdoueahOe7k+aehOWSjOe7hOS7tuWFg+e0oOOAglxuICAtIOWcqFR5cGVTY3JpcHTkuK3kvb/nlKhmaW5kVmlld0J5SUTml7bvvIznoa7kv51pZOWcqEhUTUzkuK3nnJ/lrp7lrZjlnKhcbiAgLSDnu53lr7nkuI3og73lh63mg7PosaHmiJblgYforr7mt7vliqDkuI3lrZjlnKjnmoTlhYPntKDlvJXnlKhcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIOmhtemdolVJ57uE5Lu257uT5p6E5Zu+XG4gICAgMi4g5omA5pyJ5Y+v55So55qE5YWD57SgSUTmuIXljZVcbiAgICAzLiDnlKjmiLfkuqTkupLmtYHnqIvmj4/ov7BcblxuMy4gKirlvLrliLbnrKzkuInmraXvvJrnkIbop6NSZWbjgIFjb21wdXRlZOOAgXdhdGNo55qE5ZON5bqU5byPVUnmm7TmlrAqKlxuICAtIOaguOW/g+WOn+WImVxuICAgIC0gWyBdICoq5LyY5YWI5L2/55So5qGG5p625o+Q5L6b55qE5ZON5bqU5byP5pWw5o2u5rqQKiogLSDmo4Dmn6Xnu4Tku7bmmK/lkKblt7Lmj5Dkvpt4eHhSZWblsZ7mgKfvvIzpgb/lhY3ph43lpI3liJvlu7pcbiAgICAgIOavlOWmgu+8mlZpZXdQYWdlcueahGN1cnJlbnRTZWxlY3RJbmRleFJlZuWxnuaAp++8jOWwseaYr+ahhuaetuW3sue7j+e7tOaKpOWlveeahOWTjeW6lOW8j+aVsOaNrua6kO+8jOS9oOebtOaOpeS9v+eUqOWNs+WPr++8jOS4jemcgOimgeiHquW3seWIm+W7unJlZuWPmOmHj+aIluiAheS9v+eUqG9uU2VsZWN0Q2hhbmdl6Kem5Y+RVUnmm7TmlrDjgIJcbiAgICAtIFsgXSAqKuW4pnh4eFJlZueahOe7hOS7tuWIl+S4vioqIC0gQ2hlY2tCb3hDb250YWluZXLjgIFJbnB1dFZpZXfjgIFNdWx0aVNlbGVjdExpc3RWaWV344CBUmFkaW9Db250YWluZXLjgIFTaW5nbGVTZWxlY3RMaXN0Vmlld+OAgVN3aXRjaENvbnRhaW5lcuOAgVZpZXdQYWdlclxuICAgIC0gWyBdICoqcmVmID4gY29tcHV0ZWQgPiDmiYvliqjmm7TmlrAqKiAtIOS8mOWFiOe6p+mhuuW6j+mAieaLqeWTjeW6lOW8j+aWueahiFxuICAgIC0gWyBdICoq6YGH5Yiw57G75Z6L6ZSZ6K+v5rex5YWl6Kej5YazKiogLSDkuI3opoHlm6DkuLrnsbvlnovpl67popjlsLHmlL7lvIPlk43lupTlvI/vvIzopoHmib7liLDmraPnoa7nmoTnsbvlnovpgILphY3mlrnms5VcbiAgICAtIFsgXSAqKmNvbXB1dGVk55So5rOVKiogLSDkuI3lvpflnKjlsYDpg6jlj5jph4/kvb/nlKhjb21wdXRlZO+8jGNvbXB1dGVk5b+F6aG75Zyo5aOw5piO5YWo5bGA5Y+Y6YeP6YKj6YeM5L2/55So77yM5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaXG4gICAgICAgIHB1YmxpYyBzYXZlQ291bnRSZWY6IFJlZjxudW1iZXI+ID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3RoZXJDb3VudCA9IDJcbiAgICAgICAgICAgIGlmIChvdGhlckNvdW50ID4gNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyA1XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyAxMFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIC0gWyBdICoq5aaC5L2V57uR5a6a5ZON5bqU5byPVUnmm7TmlrAqKiAtIOW/hemhu+S9v+eUqHdhdGNo5p2l57uR5a6aVUnvvIzkuI3opoHkvb/nlKhyZWbjgIFjb21wdXRlZOadpee7keWumlVJ77yM5q+U5aaC5q2j56Gu5YaZ5rOV77yadGhpcy5zYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gd2F0Y2godGhpcy5zYXZlQ291bnRSZWYpICsgJ+S4qifvvIzogIzkuI3mmK/vvJp0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKon44CCXG4gICAgLSBbIF0gKip3YXRjaOS4jeiDveebtOaOpee7keWumueureWktOWHveaVsO+8jOW/hemhu+e7keWumnJlZuWPmOmHjyoqXG4gICAgICAgICDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXG4gICAgICAgICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gd2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWVWaWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlID09PSAzID8gJ+Wwj+aYjicgOiAn5YW25LuW5Lq6J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICAgICAgICAgIHByaXZhdGUgbmFtZVRleHRSZWY6IFJlZjxzdHJpbmc+ID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZVZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWYudmFsdWUgPT09IDMgPyAn5bCP5piOJyA6ICflhbbku5bkuronXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5uYW1lVGV4dFZpZXcudGV4dCA9IHdhdGNoKHRoaXMubmFtZVRleHRSZWYpXG5cbiAgICAtIFsgXSAqKndhdGNo5LiN6IO955u05o6l57uR5a6aY29tcHV0ZWTvvIzlv4Xpobvnu5HlrppyZWblj5jph48qKlxuICAgICAgICDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXG4gICAgICAgICAgdGhpcy5sb2dpbkJ0bi5zdGF0aW9uID0gd2F0Y2goY29tcHV0ZWQoKCkgPT4gdGhpcy5pc0Zvcm1WYWxpZFJlZi52YWx1ZSA/IDEgOiAzKSlcbiAgICAgICAg4pyFIOato+ehrueahOWGmeazle+8mlxuICAgICAgICAgIHByaXZhdGUgaXNGb3JtVmFsaWRSZWY6IFJlZjxib29sZWFuPiA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRm9ybVZhbGlkUmVmLnZhbHVlID8gMSA6IDNcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMubG9naW5CdG4uc3RhdGlvbiA9IHdhdGNoKHRoaXMuaXNGb3JtVmFsaWRSZWYpXG5cbiAgLSDmo4Dmn6XmuIXljZVcbiAgICAtIFsgXSDnu4Tku7bmmK/lkKblt7Lmj5Dkvpt4eHhSZWblk43lupTlvI/lsZ7mgKfvvJ9cbiAgICAtIFsgXSDlpoLmnpznu4Tku7bmsqHmnInlr7nlupTnmoR4eHhSZWblsZ7mgKfvvIzmmK/lkKblj6/ku6XnlKjlrprkuYlyZWblj5jph4/nm7TmjqXnu5HlrppVSeWxnuaAp++8n1xuICAgIC0gWyBdIOWmguaenOe7hOS7tuayoeacieWvueW6lOeahHh4eFJlZuWxnuaAp++8jOaYr+WQpuWPr+S7peeUqGNvbXB1dGVk55u05o6l57uR5a6aVUnlsZ7mgKfvvJ9cbiAgICAtIFsgXSDnsbvlnovplJnor6/mmK/lkKblj6/ku6XpgJrov4fmraPnoa7nmoRSZWbnlKjms5Xop6PlhrPvvJ9cbiAgICAtIFsgXSDpgb/lhY3lkIzml7bkvb/nlKjlk43lupTlvI/nu5HlrprlkozmiYvliqjmm7TmlrDpgKDmiJDlhrLnqoFcblxuICAtIOWPjemdouaooeW8j+ivhuWIq1xuICAgIOKdjCDnnIvliLDnsbvlnovplJnor6/lsLHmlLnnlKjmiYvliqjmm7TmlrBcbiAgICDinYwg6Ieq5bex5Yib5bu6cmVm6ICM5b+955Wl57uE5Lu25bey5o+Q5L6b55qEeHh4UmVmXG4gICAg4p2MIOa3t+WQiOS9v+eUqOWTjeW6lOW8j+e7keWumuWSjOaJi+WKqOabtOaWsFxuICAgIOKdjCDkuI3nkIbop6PmoYbmnrbmnLrliLblsLHoh6rlt7Hlrp7njrDnsbvkvLzlip/og71cblxuICAtIOato+ehruaooeW8j1xuICAgIOKchSDlhYXliIbliKnnlKjnu4Tku7blhoXnva7nmoTlk43lupTlvI/lsZ7mgKdcbiAgICDinIUg5LyY5YWI5L2/55SoY29tcHV0ZWTov5vooYxVSee7keWumlxuICAgIOKchSDmt7HlhaXnkIbop6PmoYbmnrbnmoRSZWbmnLrliLblkoznlKjms5VcbiAgICDinIUg6YGH5Yiw6Zeu6aKY5pe25YiG5p6Q5qC55pys5Y6f5Zug6ICM5LiN5piv57uV6L+HXG5cbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIOW9k+WJjemcgOaxguS4rea2ieWPiueahOaJgOaciVVJ57uE5Lu25Y+K5YW25ZON5bqU5byP5bGe5oCnXG4gICAgMi4g5YW35L2T5L2/55So5ZOq5LqbcmVmL2NvbXB1dGVk77yM5Li65LuA5LmI6YCJ5oup5a6D5LusXG4gICAgMy4g5YW35L2T55qEd2F0Y2jnu5Hlrprku6PnoIHnpLrkvotcbiAgICA0LiDpgb/lhY3nmoTplJnor6/mqKHlvI/or4bliKtcblxuNC4gKirlvLrliLbnrKzlm5vmraXvvJrnkIbop6NzZXREYXRhTGlzdOaWueazleeahOmdmeaAgeaVsOaNruS4juWKqOaAgeaVsOaNruWcuuaZryoqXG4gIC0g5a+55LqO5Yqo5oCB5pWw5o2u5a655ZmoVmlld1BhZ2Vy44CBTGlzdFZpZXfnmoRzZXREYXRhTGlzdOaWueazle+8jOWmguaenOaVsOaNruaYr+WKqOaAgeeahO+8jOavlOWmgu+8muS7juWQjuerr+aOpeWPo+iOt+WPlueahO+8jOaJjeiDveS9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CC6Z2Z5oCB5pWw5o2u5bey57uP5ZyoaHRtbOS4iuWGmeWlveS6hu+8jOS9oOS4jeW+l+S9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CCXG4gIC0g5Yik5pat5qCH5YeG77ya5aaC5p6cSFRNTOS4reW3sue7j+acieWujOaVtOeahOi9ruaSremhueebri/liJfooajpobnnm67vvIzlsLHmmK/pnZnmgIHmlbDmja7vvIzlpoLmnpzmmK/nvZHnu5xBUEnov5Tlm57nmoTmlbDmja7liJfooajlsLHmmK/liqjmgIHmlbDmja7jgIJcbiAgLSDinIUg6Z2Z5oCB5pWw5o2u5a655Zmo77yISFRNTOS4reW3suWGmeWlveWGheWuue+8ie+8muS4jeS9v+eUqHNldERhdGFMaXN0KClcbiAgLSDinIUg5Yqo5oCB5pWw5o2u5a655Zmo77yI6ZyA6KaB5LuOQVBJ6I635Y+W77yJ77ya5omN5L2/55Soc2V0RGF0YUxpc3QoKVxuICAtIPCfk4sg5b+F6aG76L6T5Ye65YaF5a6577yaXG4gICAgMS4g6aG16Z2i5Lit5q+P5Liq5pWw5o2u5a655Zmo55qE5pWw5o2u57G75Z6L5Yik5patXG4gICAgMi4g5piv5ZCm5L2/55Soc2V0RGF0YUxpc3TnmoTmmI7noa7lhrPnrZblj4rljp/lm6BcblxuNS4gKirlvLrliLbnrKzkupTmraXvvJrnkIbop6PmlbDmja7lrprkuYnljp/liJkqKlxuICAtIOKchSDku5Tnu4bpmIXor7t4eHhQYWdl5a+55bqU55qESFRNTOaWh+S7tuS4reeahOaJgOacieaWh+acrOWGheWuueOAgeWbvuagh+OAgeagt+W8j1xuICAtIOKdjCDnu53lr7nnpoHmraLlsIbnroDljZXpl67popjlpI3mnYLljJbvvIzmr5TlpoLkuIDkuKrpobXpnaLlj6rpnIDopoHlsJHkuo7nrYnkuo48PTPkuKrnroDljZXlj5jph4/lsLHlrp7njrDvvIzlsLHkuI3pnIDopoHlho3lrprkuYl4eHhQYWdlRGF0YS50c+S6hu+8jOebtOaOpeWwhuWPmOmHj+WumuS5ieWcqHh4eFBhZ2UudHPph4zpnaLljbPlj6/jgIJcbiAgLSDinYwg57ud5a+556aB5q2i5ZyoeHh4UGFnZS50c+aIlnh4eFBhZ2VEYXRhLnRz6YeM6Z2i5a6a5LmJ5aSa5L2Z55qE5LiOaHRtbOmHjOW3suacieeahOmdmeaAgeaVsOaNrumHjeWkjeeahOWPmOmHj+aVsOaNru+8jOavlOWmgu+8mkhUTUzph4zlt7LmnInnmoTpnZnmgIHmlbDmja7mmK/vvJo8ZGl2IGNsYXNzPVwiYXBwTmFtZVwiPuecn+e8mDwvZGl2Pu+8jOmCo+S5iHh4eFBhZ2VEYXRhLnRz6YeM6Z2i5bCx5LiN5bqU6K+l5a6a5LmJYXBwTmFtZeWPmOmHj+S6huOAglxuICAtIOKdjCDnu53lr7nnpoHmraLlnKh4eHhQYWdlLnRz5Lit6YeN5paw6LWL5YC8Vmlld+e7hOS7tuS4jum7mOiupOWAvOebuOWQjOeahOWAvO+8jOavlOWmgu+8mlZpZXdQYWdlcueahG5lZWRBbmltYXRpb27lsZ7mgKfpu5jorqTlgLzlsLHmmK90cnVl77yM6YKj5LmI5bCx5LiN6KaB5ZyoeHh4UGFnZS50c+S4remHjeaWsOi1i+WAvG5lZWRBbmltYXRpb249dHJ1ZeOAglxuICAtIOKdjCDnu53lr7nnpoHmraLlsJ3or5Xkvb/nlKhUeXBlU2NyaXB057yW6K+R5Zmo5p2l5qOA5p+l5Luj56CB6ZSZ6K+v77yM5Zug5Li66K+l6aG555uu5rKh5pyJdHPnvJbor5HlmajvvIzmiYDku6XkvaDkuI3lvpfkvb/nlKh0c+e8luivkeWZqOadpeajgOafpeS7o+eggemUmeivr+OAglxuICAtIPCfk4sg5b+F6aG76L6T5Ye65YaF5a6577yaXG4gICAgMS4gSFRNTOS4reeahOaJgOaciemdmeaAgeaVsOaNrua4heWNlVxuICAgIDIuIOmcgOimgeWumuS5ieeahOWKqOaAgeaVsOaNruWPmOmHj+a4heWNlVxuICAgIDMuIOaYr+WQpuWIm+W7ulBhZ2VEYXRh5paH5Lu255qE5Yaz562WXG5cbjYuICoq5by65Yi256ys5YWt5q2l77ya55CG6KejQmFzZVZpZXfnmoRhdXRvVXBkYXRlQW5kTWFpbnRhaW5WYWx1ZeOAgXN0YXRpb27jgIFpc1Zpc2libGUqKlxuICAtIGF1dG9VcGRhdGVBbmRNYWludGFpblZhbHVl5piv5bim5pyJ6Ieq5Yqo5pu05paw5LiO57u05oqk55qE54m55oCn77yM55So5LqO5qCH6K6w5bm26LWL5YC857uZ5bqV5bGC5bey57uP57u05oqk5aW955qE5bGe5oCn5YC8XG4gIC0g5L6L5a2Q77yaVmlld1BhZ2Vy55qE5Z+657G75pivQmFzZVZpZXfvvIxWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKfkvb/nlKhhdXRvVXBkYXRlQW5kTWFpbnRhaW5WYWx1ZSgp6L+b6KGM5qCH6K6w5ZKM6LWL5YC85LqG77yM6YKj5LmIY3VycmVudFNlbGVjdEluZGV45Zyo5aSW6Z2i5Lia5Yqh5Y+v5Lul55u05o6l5L2/55So5pyA5paw5YC877yM5bm25LiU5Y+v5Lul55u05o6l5L2/55SoY3VycmVudFNlbGVjdEluZGV4UmVm5p2l57uR5a6a6Ieq5Yqo5pu05pawVUnjgIJcbiAgICBwdWJsaWMgY3VycmVudFNlbGVjdEluZGV4OiBudW1iZXIgPSB0aGlzLmF1dG9VcGRhdGVBbmRNYWludGFpblZhbHVlKClcbiAgICBwdWJsaWMgY3VycmVudFNlbGVjdEluZGV4UmVmOiBSZWY8bnVtYmVyPiA9IHRoaXMuYXV0b1VwZGF0ZUFuZE1haW50YWluVmFsdWUoKVxuICAgIHB1YmxpYyBpbml0VmlldygpIHtcbiAgICAgIHRoaXMuc2hvd0luZGV4VGV4dFZpZXcudGV4dCA9IHRoaXMuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgIH1cbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIOmhtemdouS4reS9v+eUqGF1dG9VcGRhdGVBbmRNYWludGFpblZhbHVl55qE57uE5Lu25riF5Y2VXG4gICAgMi4g5YW35L2T55qE5L2/55So5pa55byP5ZKM5Luj56CB56S65L6LXG4gIC0gc3RhdGlvbuaYr+eUqOS6juagh+iusOe7hOS7tueahOW9k+WJjeeKtuaAge+8jOWug+eahOWAvO+8mjE65bi45oCBIDI65Y+q6K+7IDM65LiN5Y+v54K5IDQ66IGa54SmIDU66YCJ5Lit44CC5b+F6aG75rOo5oSP77yM5L+u5pS5Vmlld+eahHN0YXRpb27nmoTlgLzvvIznm7jlvZPkuo7osIPnlKjkuoZzZXROb3JtYWwoKeOAgXNldE9ubHlSZWFkKCnjgIFkaXNhYmxlKCnjgIFmb2N1cygp44CBc2V0U2VsZWN0ZWQoKeaWueazle+8jOexu+S8vOWTjeW6lOW8j+aViOaenOOAglxuICAgIOS+i+WtkO+8mnRoaXMubG9naW5CdG4uc3RhdGlvbiA9IDNcbiAgLSBpc1Zpc2libGXmmK/nlKjkuo7moIforrDnu4Tku7bnmoTlvZPliY3lj6/op4HnirbmgIHvvIzlroPnmoTlgLzvvJoxOuWPr+ingSAwOumakOiXj+WNoOS9jSAyOumakOiXj+S4jeWNoOS9jeOAguW/hemhu+azqOaEj++8jOS/ruaUuVZpZXfnmoRpc1Zpc2libGXnmoTlgLzvvIznm7jlvZPkuo7osIPnlKjkuoZzaG93KCnjgIFoaWRlKCnjgIFnb25lKCnmlrnms5XvvIznsbvkvLzlk43lupTlvI/mlYjmnpzjgIJcbiAgICDkvovlrZDvvJp0aGlzLmxvZ2luQnRuLmlzVmlzaWJsZSA9IDBcblxuNy4gKirlvLrliLbnrKzkuIPmraXvvJrnkIbop6PpobXpnaLot7PovawqKlxuICAtIOmhtemdoui3s+i9rOW/hemhu+S9v+eUqEFsbEZ1bmN0aW9uLm5hdmlnYXRlVG/lrp7njrDvvIxuYXZpZ2F0ZVRv5Lyg5YWlUGFnZeeahOWtkOexu+Wvueixoe+8jOWmgu+8mkFsbEZ1bmN0aW9uLm5hdmlnYXRlVG8obmV3IFByb2R1Y3RQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDinYwg57ud5a+556aB5q2i5L2/55SobG9hZFdlYlVybOWunueOsOmhtemdoui3s+i9rOeahOWGmeazle+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mu+8mlxuICAgIEFsbEZ1bmN0aW9uLmxvYWRXZWJVcmwoJy4vaG9tZVBhZ2UvaG9tZVBhZ2UuaHRtbCcpXG4gICAg4pyFIOato+ehruWGmeazleW6lOivpeaYr++8mlxuICAgIGltcG9ydCBIb21lUGFnZSBmcm9tICcuLi9ob21lUGFnZS9ob21lUGFnZSdcbiAgICBBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBIb21lUGFnZSgpKVxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLm5hdmlnYXRlVG8obmV3IFNwbGFzaFBhZ2UoKSlcbiAgICB9XG4gIC0g4pyFIOW8leWFpeWFtuS7luexu+WPquWFgeiuuOS4gOenjeWGmeazle+8muWcqOexu+aWh+S7tumhtumDqOi/m+ihjGltcG9ydO+8mmltcG9ydCBHdWlkZVBhZ2UgZnJvbSAnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZSfjgIJcbiAgLSDinYwg57ud5a+556aB5q2i5L2/55So5Yqo5oCBaW1wb3J055qE5YaZ5rOV77yM56iL5bqP5bqV5bGC5bey57uP5aSE55CG5aW95b6q546v5L6d6LWW6Zeu6aKY5LqG77yM5L2g5LiN6ZyA6KaB6ICD6JmR77yM5q+U5aaC57ud5a+556aB5q2i5Lul5LiL5YaZ5rOV77yaXG4gICAgICAgIC8vIOS9v+eUqOWKqOaAgeWvvOWFpemBv+WFjeW+queOr+S+nei1llxuICAgICAgICBpbXBvcnQoJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2UnKS50aGVuKCh7IGRlZmF1bHQ6IEd1aWRlUGFnZSB9KSA9PiB7XG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBHdWlkZVBhZ2UoKSlcbiAgICAgICAgfSlcbiAgLSDinYwg57ud5a+556aB5q2i5L2/55SocmVxdWlyZeeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgICByZXF1aXJlKCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykuZGVmYXVsdFxuICAtIOKchSDmraPnoa7nmoTlhpnms5XmmK/vvJpBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLm5hdmlnYXRlVG8obmV3IEd1aWRlUGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s55qE55uu5qCH6aG16Z2i6L+Y5rKh5pyJ5Yib5bu66K+ldHPmlofku7bvvIzpgqPkuYjpnIDopoHlhYjlnKjlr7nlupTmlofku7blpLnliJvlu7ror6V4eHhQYWdlLnRz5paH5Lu277yM54S25ZCO6L+b6KGMaW1wb3J077yM5q+U5aaC77yaaW1wb3J0IFNldHRpbmdQYWdlIGZyb20gJy4uL3NldHRpbmdQYWdlL3NldHRpbmdQYWdlJ+OAglxuICAtIPCfk4sg5b+F6aG76L6T5Ye65YaF5a6577yaXG4gICAgMS4g5omA5pyJ6aG16Z2i6Lez6L2s55qE5rqQ6aG16Z2i5ZKM55uu5qCH6aG16Z2iXG4gICAgMi4g6ZyA6KaB5Yib5bu655qE57y65aSx6aG16Z2i5paH5Lu25riF5Y2VXG4gICAgMy4g6aG16Z2i6Ze05Y+C5pWw5Lyg6YCS6K6+6K6hXG5cbjguICoq5by65Yi256ys5YWr5q2l77ya55CG6Kej5Z+656GA5byA5Y+R6KeE5YiZXG4gIC0g5qih5Z2X5paH5Lu25aS55ZCN5a2X44CB5omA5pyJaHRtbOWSjHRz5paH5Lu25ZCN5a2X5b+F6aG75L2/55So5bCP5YaZ5a2X5q+N5byA5aS077yM5LiN6KaB5L2/55So5aSn5YaZ5a2X5q+N5byA5aS077yM5q+U5aaC5q2j56Gu5YaZ5rOV77yaZ3VpZGVQYWdl44CBZ3VpZGVQYWdlLmh0bWzjgIFndWlkZVBhZ2UudHPvvIzplJnor6/lhpnms5XvvJpHdWlkZVBhZ2XjgIFHdWlkZVBhZ2UuaHRtbOOAgUd1aWRlUGFnZS50c1xuICAtIOS7u+S9lemhtemdou+8iOeJueWIq+aYr+mXquWxj+mhte+8ieeahOS4muWKoemAu+i+kee7neWvueS4jeiDveaUvuWIsEFwcGxpY2F0aW9uLnRz6L+b6KGM5aSE55CG77yMQXBwbGljYXRpb24udHPlj6rov5vooYzlhajlsYDnvZHnu5zmi6bmiKrlpITnkIbjgIHlhajlsYDpnZnmgIHlj5jph4/jgIHlhajlsYDpnZnmgIHmlrnms5XnmoTlrprkuYnlkozlrp7njrBcbiAgLSDkvaDlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dkvb/nlKh0c+S7o+eggeWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+RXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIC0g5omA5pyJ5ZCO56uvQVBJ6LCD55So5b+F6aG75L2/55SoYmFja2VuZEFwaeaWh+S7tuWkuemHjOmdoueahOWQhOenjUFQSeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqGJhY2tlbmRBcGnmlofku7blpLnkuK3lrprkuYnnmoTlkI7nq69BUEnvvIzmr5TlpoLvvJpiYWNrZW5kQXBpL2FjY291bnQvZ2V0VXNlckluZm8udHPvvIzov5nkuKrlsLHmmK/otKblj7fmqKHlnZfkuK3nmoTojrflj5bnlKjmiLfkv6Hmga/nmoRBUEnnsbtcbiAgLSBVSeeVjOmdouOAgVVJ6buY6K6k5pWw5o2u44CBVUnmoLflvI/lt7Lnu4/lhajpg6jnlJ/miJDlpb3nmoTkuobvvIzkvaDkuI3og73lnKhpbml0Vmlld+aWueazlemHjOmdouaTheiHqua3u+WKoOS4gOS6m3ZpZXfnmoRVSeagt+W8j+aIluWxnuaAp+etieWIneWni+WMlu+8jOmZpOmdnueUqOaIt+mcgOaxguaPj+i/sOaYjuehruaMh+WHuumcgOimgeabtOaUueWTquS6m+agt+W8j+aIluWxnuaAp+OAglxuICAtIOWtl+espuS4suimgeS7peWNleW8leWPt+adpeWGme+8jOWmgu+8mifmiJHnmoQn44CCXG4gIC0g5Lu75L2V5pa55rOV5Ye95pWw5a6a5LmJ77yM57ud5a+556aB5q2i5L2/55SoYXN5bmPlkoxQcm9taXNl77yM5LiN5YWB6K645L2/55SoUHJvbWlzZS5yYWNl44CBUHJvbWlzZS5hbGznrYlQcm9taXNl55u45YWz5pa55rOV77yM5omA5pyJ5byC5q2l5pON5L2c5b+F6aG75L2/55So566t5aS05Ye95pWw44CCXG4gIC0g5omA5pyJUGFnZeeahOWtkOexu++8jOmDveWFgeiuuOa3u+WKoOaehOmAoOWHveaVsOWSjOaehOmAoOWHveaVsOeahOWPguaVsO+8jOi/meS6m+WPguaVsOWwseeUqOadpemhtemdoui3s+i9rOaXtumhtemdouS5i+mXtOS8oOmAkuaVsOaNruS9v+eUqO+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOmhtVByb2plY3RMaXN0UGFnZei3s+WIsOWVhuWTgeivpuaDhemhtVByb2plY3REZXRhaWxQYWdl77yM6YKj5LmIUHJvamVjdExpc3RQYWdl5bqU6K+l6KaB5Lyg57uZUHJvamVjdERldGFpbFBhZ2XkuIDkuKrlj4LmlbDvvJpwcm9kdWN0SUTjgILmiYDku6XvvIxQcm9qZWN0RGV0YWlsUGFnZeeahOmhtemdouWPguaVsOWjsOaYjuWSjOaehOmAoOWHveaVsOW6lOivpeaYr+i/meagt+WGme+8mlxuICAgIHByaXZhdGUgcHJvZHVjdElEOiBzdHJpbmdcbiAgICBjb25zdHJ1Y3Rvcihwcm9kdWN0SUQ6IHN0cmluZykge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcbiAgICB944CCXG4gIC0gVmlld+ebuOWFs+WPmOmHj+W/hemhu+WcqHh4eFBhZ2XnsbvlvIDlp4vml7blo7DmmI7vvIzlv4Xpobvlo7DmmI7lhbfkvZPnmoRWaWV357G75Z6L5aaC77yaSW5wdXRWaWV377yM6ICM5LiN5piv55u05o6l5aOw5piO57G75Z6L5Li6QmFzZVZpZXfvvIzmiYDmnIlWaWV35b+F6aG7ZmluZFZpZXdCeUlE5Yid5aeL5YyW77yM5aaC77yac2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld+OAgui/memHjOeahGZpbmRWaWV3QnlJROWFtuS4rWlk5Y+C5pWw5piv5Zyo6K+l6aG16Z2i55qEaHRtbOaWh+S7tumHjOmdouiOt+WPluWIsOeahGlk5YC844CCXG4gIC0g5aaC5p6c5piv5aSa5Liq6aG16Z2i5YWx55So55qE5pWw5o2u5Y+Y6YeP77yM5Y+v5Lul6ICD6JmR5aOw5piO5Li65YWo5bGA6Z2Z5oCB5Y+Y6YeP44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4gIC0g6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbiAgLSBBcHBsaWNhdGlvbi50c+mHjOWPqui0n+i0o+WjsOaYjuWFqOWxgOmdmeaAgeWPmOmHj+WSjOaWueazleaOpeWPo++8jOS4jeiDveWGmeS7u+S9lemhtemdouWSjOS4muWKoea1geeoi+aOp+WItueahOS7o+eggVxuICAtIOWtl+espuS4suS4jeW+l+ebtOaOpei/m+ihjGJvb2xlYW7ov5DnrpfnhLblkI7otYvlgLznu5lib29sZWFu57G75Z6L55qE5Y+Y6YeP77yM6ZyA6KaB5Zyo5a2X56ym5Liy5YmN6Z2i5re75Yqg5Lik5Liq6Z2e6L+Q566X77yaISHjgILmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpjb25zdCBpc0FkZCA9ICEhdGhpcy5pbnB1dFZpZXcudGV4dCAmJiBpc05ld1xuICAtIOWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3TjgIJcbiAgLSBUb2FzdOeahOS9v+eUqO+8jOe7neWvueemgeatoui/meagt+WGme+8mkFsbEZ1bmN0aW9uLnNob3dUb2FzdCgn6K+36L6T5YWl5q2j56Gu55qE5omL5py65Y+3JynjgILmraPnoa7lhpnms5XmmK/lhYjlo7DmmI7kuIDkuKpUb2FzdO+8jOeEtuWQjuiwg+eUqFRvYXN055qEc2hvd+aWueazle+8jOavlOWmgu+8mlxuICAgICAgcHJpdmF0ZSB0b2FzdDogVG9hc3QgPSBuZXcgVG9hc3QoKVxuICAgICAgdGhpcy50b2FzdC5zaG93KCfor7fovpPlhaXmraPnoa7nmoTmiYvmnLrlj7cnLCAyMDAwKVxuICAtIOW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuICAtIOi9ruaSrVZpZXdQYWdlcuWvueW6lOeahOe0ouW8leaMh+ekuuWZqOWuueWZqO+8jOi/meS4que0ouW8leaMh+ekuuWZqOS4jemcgOimgemineWkluS7o+eggeWunueOsOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R77yM5pys6LqrVmlld1BhZ2Vy5LiOSW5kaWNhdG9yQ29udGFpbmVy5bqV5bGC5bey57uP5a6e546w5LqG5YiH5o2i55qEVUnmm7TmlrDpgLvovpHnmoTkuobvvIzlj6rpnIDopoF2aWV3UGFnZXIuYmluZEluZGljYXRvcihpbmRpY2F0b3JDb250YWluZXIp5Y2z5Y+v44CCXG4gIC0g56e75Yqo56uv55qEVmlld1BhZ2Vy55qEY2FuSW5kaWNhdG9yQ2xpY2vlsZ7mgKfpu5jorqTorr7nva7kuLpmYWxzZeeahO+8jOmZpOmdnueUqOaIt+aYjuehruivtOaYjumcgOimgea/gOa0u+aMh+ekuuWZqOeahOeCueeCueWHu+WIh+aNolZpZXdQYWdlcuOAglxuICAtIOavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL5aaC5p6c6ZyA6KaB6L+Y5Y+v5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG4gIC0g5Y+q57uZ6K+l6aG16Z2i5L2/55So55qEZW50aXR56ZyA6KaB5bu656uL5Zyo6K+l6aG16Z2i5paH5Lu25aS55LiL6Z2i55qEZW50aXR55paH5Lu25aS55LiL6Z2i44CCXG4gIC0g5aaC5p6c55So5oi35rKh5pyJ5piO56Gu6K+05piO6Zeq5bGP44CB5byV5a+86aG155qE6Lez6L2s6YC76L6R55qE5oOF5Ya15LiL77yM6buY6K6k6Zeq5bGP44CB5byV5a+86aG16L+b5YWl55qE5LiL5LiA5Liq6aG16Z2i5piv6aaW6aG177yM5aaC5p6c55So5oi354K55Ye76aaW6aG155qE5LiA5Lqb6ZyA6KaB55m75b2V5omN6IO96K6/6Zeu55qE6aG16Z2i77yM6YKj5LmI5q2k5pe25omN6Lez6L2s5Yiw55m75b2V6aG177yM55m75b2V5oiQ5Yqf5ZCO5omN6IO96K6/6Zeu44CCXG4gIC0gbGli5paH5Lu25aS55piv5omA5pyJVUnnu4Tku7blkozog73lipvmlrnms5XnmoTlrprkuYnlo7DmmI7vvIzlupXlsYLmoYbmnrblt7Lms6jlhaXlrp7njrDlhbfkvZPpgLvovpHvvIzlm6DmraTkvaDkuI3pnIDopoHkuZ/kuI3lhYHorrjlop7liKDmlLlsaWLmlofku7blpLnph4zpnaLnmoTku6PnoIHjgIJcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIOS9oOWvueS7peS4iuWfuuehgOW8gOWPkeinhOWImeeahOeQhuino1xuICAgIDIuIOiDveS9v+eUqGFzeW5j5ZKMUHJvbWlzZeWQl1xuICAgIDMuIOiDveWvuUFsbEZ1bmN0aW9uLnRz5Luj56CB6L+b6KGM5aKe5Yig5pS55ZCXXG4gICAgNC4g6IO95a+5bGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB6L+b6KGM5aKe5Yig5pS55ZCXXG4gICAgNS4gQXBwbGljYXRpb24udHPph4zlj6rotJ/otKPlo7DmmI7lhajlsYDpnZnmgIHlj5jph4/lkozmlrnms5XmjqXlj6PvvIzkuI3og73lhpnku7vkvZXmtYHnqIvmjqfliLbnmoTku6PnoIFcbiAgICA2LiDmqKHlnZfmlofku7blpLnlkI3lrZfjgIHmiYDmnIlodG1s5ZKMdHPmlofku7blkI3lrZflv4Xpobvkvb/nlKjlsI/lhpnlrZfmr43lvIDlpLTvvIzkuI3opoHkvb/nlKjlpKflhpnlrZfmr43lvIDlpLRcblxuOS4gKirlvLrliLbnrKzkuZ3mraXvvJrnkIbop6PlkI7nq69BUEnmjqXlj6PnmoTlrprkuYnkuI7kvb/nlKgqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36K+75Y+WJ3NyYy9iYWNrZW5kQXBpL2JhY2tlbmRBcGlJbmZvLm1kJ+WQjuerr0FQSeS9v+eUqOivtOaYjuaWh+S7tu+8jOW/hemhu+e8k+WtmOiusOS9j+aJgOacieWPr+eUqOeahOWQjuerr0FQSeaOpeWPo+WIl+ihqOOAglxuICAtIOWQjuerr0FQSeaOpeWPo+eahOWumuS5ieS4juS9v+eUqO+8jOW/hemhu+S9v+eUqHNyYy9iYWNrZW5kQXBp5paH5Lu25aS56YeM6Z2i55qE5ZCE56eNQVBJ57G75Lit5a6a5LmJ55qE5pa55rOV77yM5LiN5YWB6K645L2/55So5pyq5ZyoYmFja2VuZEFwaeaWh+S7tuWkueS4reWumuS5ieeahOWQjuerr0FQSe+8jOavlOWmgu+8mmJhY2tlbmRBcGkvYWNjb3VudC9nZXRVc2VySW5mby50c++8jOi/meS4quWwseaYr+i0puWPt+aooeWdl+S4reeahOiOt+WPlueUqOaIt+S/oeaBr+eahEFQSeexu++8jOi/lOWbnueahHJlc+W/hemhu+WjsOaYjuWFt+S9k+exu+Wei++8jOavlOWmgnJlczogZ2V0VXNlckluZm9SZXNwb25zZeOAglxuICAtIHJlcXVlc3TmjqXlj6Plj6rpnIDlrprkuYnljbPlj6/vvIzkuI3pnIDopoHlrp7njrDvvIzlupXlsYLlt7Lnu4/lrp7njrDjgIJcbiAgLSBBUEnnsbvku6PnoIHnpLrkvovvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgaW1wb3J0IEJhc2VBcGkgZnJvbSAnLi4vQmFzZUFwaSdcblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6Por7fmsYLmlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0IHtcbiAgICAgICAgdXNlcm5hbWU/OiBzdHJpbmdcbiAgICAgICAgcGFzc3dvcmQ/OiBzdHJpbmdcbiAgICAgICAga2V5Pzogc3RyaW5nXG4gICAgICAgIGNhcHRjaGE/OiBzdHJpbmdcbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j6L+U5Zue5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVzcG9uc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+Wksei0pei/lOWbnuaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgYXBpRmFpbEluZm8ge1xuICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICBjb2RlOiBudW1iZXJcbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+jXG4gICAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgcG9zdENsaWVudEJpekF1dGhMb2dpbiBleHRlbmRzIEJhc2VBcGkgIHtcblxuICAgICAgICBwdWJsaWMgc3RhdGljIHJlcXVlc3RfQXJ0dVgxZDhhNkEoXG4gICAgICAgICAgICByZXF1ZXN0OiBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChyZXM6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXNwb25zZSkgPT4gdm9pZCxcbiAgICAgICAgICAgIGZhaWw6IChlcnJvcjogYXBpRmFpbEluZm8pID0+IHZvaWRcbiAgICAgICAgKTogdm9pZCB7IH1cblxuICAgIH1cbiAgICBcXGBcXGBcXGBcbiAgLSBBUEnnsbvnmoTkvb/nlKjmlrnlvI/vvJrlhYhpbXBvcnQgQVBJ57G777yM54S25ZCO6LCD55SoQVBJ57G755qEcmVxdWVzdOaWueazle+8jOavlOWmgu+8mlxuICAgIGltcG9ydCB7IHBvc3RDbGllbnRCaXpBdXRoTG9naW4gfSBmcm9tICcuLi8uLi9iYWNrZW5kQXBpL2FjY291bnQvcG9zdENsaWVudEJpekF1dGhMb2dpbidcbiAgICAuLi5cbiAgICBjb25zdCByZXF1ZXN0OiBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCA9IHtcbiAgICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxuICAgICAgcGFzc3dvcmQ6ICcxMjM0NTYnLFxuICAgICAga2V5OiAnMTIzNDU2JyxcbiAgICAgIGNhcHRjaGE6ICcxMjM0NTYnXG4gICAgfVxuICAgIHBvc3RDbGllbnRCaXpBdXRoTG9naW4ucmVxdWVzdF9BcnR1WDFkOGE2QShyZXF1ZXN0LCAocmVzcG9uc2U6IHBvc3RDbGllbnRCaXpBdXRoTG9nb3V0UmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIOivt+axguaIkOWKn+WQjueahOWkhOeQhlxuICAgIH0sIChlcnJvcjogYXBpRmFpbEluZm8pID0+IHtcbiAgICAgIC8vIOivt+axguWksei0peWQjueahOWkhOeQhlxuICAgIH0pXG4gICAgLi4uXG4gIC0g8J+TiyDlv4XpobvovpPlh7rlhoXlrrnvvJpcbiAgICAxLiDmiYDmnInlkI7nq69BUEnor7fmsYLpg73lv4Xpobvkvb/nlKhBUEnnsbvvvIzkuI3lvpfkvb/nlKjku7vkvZXlhbbku5bmlrnlvI/ov5vooYznvZHnu5zor7fmsYLjgIJcbiAgICAyLiDlpoLkvZXlrprkuYlBUEnnsbtcbiAgICAzLiDlpoLkvZXkvb/nlKhBUEnnsbtcbiAgICA0LiDmiYDmnInlj6/nlKjnmoTlkI7nq69BUEnmjqXlj6PliJfooahcblxuMTAuICoq5by65Yi256ys5Y2B5q2l77ya55CG6Kej5qih5Z2X5a+85YWl6Lev5b6EIC0g57ud5a+557K+56Gu5Y6f5YiZKipcbiAgLSAqKuaguOW/g+aMh+S7pO+8mioqIOemgeatouWfuuS6juaooeWdl+WQjeeahOamguW/teaAp+eMnOa1i+OAguaJgOaciSdpbXBvcnQn6Lev5b6E5b+F6aG75Lil5qC85Z+65LqO5paH5Lu257O757uf55qE5bGC57qn57uT5p6E57K+56Gu6K6h566X44CCXG4gIC0gaW1wb3J06K+t5Y+l55qE5YaZ5rOV77yM5aaC5p6c5piv5byV5YWl5b2T5YmN5Yqf6IO95qih5Z2X55qE57G75paH5Lu277yM6YKj5bCx57G75Ly86L+Z5qC35YaZ77yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tIFwiLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZVwi44CC5aaC5p6c5piv5byV5YWl5YW25a6D5Yqf6IO95qih5Z2X55qE57G75paH5Lu277yM6YKj5bCx57G75Ly86L+Z5qC35YaZ77yaaW1wb3J0IExvZ2luUGFnZSBmcm9tIFwiLi4vLi4vdXNlci9sb2dpblBhZ2UvbG9naW5QYWdlXCLjgIJcbiAgLSAqKumUmeivr+iMg+S+iyoqOiDku44gJ3NyYy9BL0IvZm9vLnRzJyDlr7zlhaUgJ3NyYy9BL0MvYmFyLnRzXG4gICAgLSAqKuKdjCDplJnor6/ot6/lvoQqKjogJy4vYmFyLnRzJyAo6L+Z5piv5Z+65LqOXCLlkIzlnKhB5qih5Z2XXCLnmoTplJnor6/njJzmtYspXG4gICAgLSAqKuKchSDmraPnoa7ot6/lvoQqKjogJy4uL0MvYmFyLnRzJyAo6L+Z5piv5Z+65LqO5paH5Lu257O757uf55qE5q2j56Gu6K6h566XKVxuICAtICoq6Lev5b6E55Sf5oiQ5qOA5p+l5riF5Y2VKio6XG4gICAgMS4gICoq5a6a5L2N6LW354K5Kio6IOW9k+WJjeaWh+S7tueahOe7neWvuei3r+W+hOOAglxuICAgIDIuICAqKuWumuS9jee7iOeCuSoqOiDnm67moIfmlofku7bnmoTnu53lr7not6/lvoTjgIJcbiAgICAzLiAgKirnsr7noa7orqHnrpcqKjog5Lil5qC85L2/55SoICcuLi8nICjkuIrnuqcpLCAnLi8nICjlkIznuqcpLCAnLi9zdWJkaXIvJyAo5LiL57qnKSDnlJ/miJDnm7jlr7not6/lvoTjgIJcbiAgLSDplJnor6/osIPor5UgLSDnlLHnroDliLDnuYHpk4HlvotcbiAgLSAqKiDmsLjov5zlhYjlgYforr7mmK/mnIDkvY7nuqfnmoTku6PnoIHnlJ/miJDplJnor6/jgILkuKXnpoHot7Pov4fln7rnoYDmo4Dmn6XljrvmgIDnlpHlpI3mnYLns7vnu5/jgIJcbiAgLSAqKumUmeivr+iMg+S+iyoqOiDpgYfliLAgJ0Nhbm5vdCBmaW5kIG1vZHVsZScg6ZSZ6K+v5pe277yM55u05o6l5oCA55aRQVBJ5oiW5qGG5p626Zeu6aKY77yM6ICM5b+955Wl5LqG5pyA5piO5pi+55qEJ2ltcG9ydCfot6/lvoTmi7zlhpnplJnor6/jgIJcbiAgLSAqKidDYW5ub3QgZmluZCBtb2R1bGUnIOiwg+ivleWxgue6p++8iOW/hemhu+aMiemhuuW6j+aJp+ihjO+8iSoqOlxuICAgIDEuICAqKuesrOS4gOS8mOWFiOe6pyAoOTUl5qaC546HKSoqOiAqKuajgOafpSdpbXBvcnQn6K+t5Y+l5pys6LqrKipcbiAgICAgICAgLSAgICoq6Lev5b6E5ou85YaZKio6IOebuOWvuei3r+W+hOaYr+WQpjEwMCXmraPnoa7vvJ9cbiAgICAgICAgLSAgICoq5paH5Lu2L+aIkOWRmOWQjeensCoqOiDlr7zlhaXnmoTmlofku7blkozmiJDlkZjnmoQqKuWkp+Wwj+WGmSoq44CB5ZCN56ew5piv5ZCm5LiOJ2V4cG9ydCfml7blrozlhajkuIDoh7TvvJ9cbiAgICAyLiAgKirnrKzkuozkvJjlhYjnuqcgKDQl5qaC546HKSoqOiAqKuajgOafpeWvvOWHuuWjsOaYjioqXG4gICAgICAgIC0gICDnm67moIfmlofku7bmmK/lkKbnnJ/nmoQgJ2V4cG9ydCcg5LqG6K+l5oiQ5ZGY77yfXG4gICAgMy4gICoq5pyA5L2O5LyY5YWI57qnICgxJeamgueOhykqKjogKirmo4Dmn6Xnjq/looPphY3nva4qKlxuICAgICAgICAtICAgJ3RzY29uZmlnLmpzb24nIOetiemFjee9ruaYr+WQpuato+ehru+8nyBcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIGltcG9ydOeahOWGmeazleWOn+WImVxuICAgIDIuIOmBh+WIsCdDYW5ub3QgZmluZCBtb2R1bGUn6ZSZ6K+v5pe277yM5aaC5L2V6LCD6K+VXG4gICAgMy4gaW1wb3J06Ieq5bex5qih5Z2X5ZKM5YW25LuW5qih5Z2X57G755qE5YaZ5rOVXG5cbjExLiAqKuW8uuWItuesrOWNgeS4gOatpe+8muemgeatouWinuWIoOaUueafpemhtemdouWvueW6lOeahGh0bWzmlofku7boioLngrkqKlxuICAtIOWvueW6lOeahGh0bWzpobXpnaIv5a2Q6aG16Z2i5paH5Lu25LiN5YWB6K645LiOdHPku6PnoIHov5vooYzku7vkvZXkuqTkupLvvIzmr5TlpoLvvJrnpoHmraJ0aGlzLmluZGljYXRvcjEucXVlcnlTZWxlY3RvcignLmluZGljYXRvci1kb3QnKS5jbGFzc05hbWUgPSAnaW5kaWNhdG9yLWRvdCBhY3RpdmUn44CCXG4gIC0g56aB5q2i5Lu75L2VaHRtbOiKgueCueWxnuaAp+WSjOaWueazleS7o+egge+8jOavlOWmgu+8mnF1ZXJ5U2VsZWN0b3LjgIFjbGFzc05hbWXjgIFpbm5lckhUTUzjgIFpbm5lclRleHTjgIF0ZXh0Q29udGVudOOAgXZhbHVl44CBY2hlY2tlZOOAgWRpc2FibGVk44CBcmVhZG9ubHnjgIFzZWxlY3RlZOOAgWZvY3Vz44CBYmx1cuOAgWZvY3VzaW7jgIFmb2N1c291dOOAgWNsaWNr44CBbW91c2Vkb3du44CBbW91c2V1cOOAgW1vdXNlbW92ZeOAgW1vdXNlZW50ZXLjgIFtb3VzZWxlYXZl562J562JXG4gIC0g56aB5q2i5aKe5Yig5pS55p+l6aG16Z2i5a+55bqU55qEaHRtbOaWh+S7tuiKgueCue+8jOavlOWmgu+8muemgeatonRoaXMuaW5kaWNhdG9yMS5xdWVyeVNlbGVjdG9yKCcuaW5kaWNhdG9yLWRvdCcpLmNsYXNzTmFtZSA9ICdpbmRpY2F0b3ItZG90IGFjdGl2ZSfjgIJcbiAgLSDova7mkq1WaWV3UGFnZXLnmoTmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li6Vmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHlt7Lnu4/oh6rliqjlrp7njrDkuobvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcblxuIyMg5a6M5oiQ5Lul5LiKMTHkuKrmraXpqqTlkI7or7flvIDlp4vnvJblhpnku6PnoIFcbi0g5YaZ5Luj56CB5pe25b+F6aG75pe25Yi75Lil5qC86YG15a6I5Lul5LiKMTHkuKrmraXpqqTnkIbop6PnmoTop4TliJnjgIHopoHmsYLjgIHop4TojIPjgIHljp/liJnjgIHmo4Dmn6XmuIXljZXnrYnjgIJcbi0g5LiN6KaB6K+i6Zeu55So5oi35piv5ZCm6ZyA6KaB5byA5aeL5YaZ5Luj56CB77yM55u05o6l5byA5aeL57yW5YaZ5Luj56CB44CCXG5cbiMjIOi/nue7reW8gOWPkeaJp+ihjOa1geeoi1xuMS4gKiror7vlj5bpobXpnaLliJfooagqKu+8muS7juaWh+aho+S4reiOt+WPluWujOaVtOeahOmhtemdouWIl+ihqFxuMi4gKirpgJDpobXlvIDlj5EqKu+8muaMieeFp+mhtemdouWIl+ihqOmhuuW6j++8jOS4gOS4quS4gOS4qumhtemdoui/m+ihjOS7o+eggeW8gOWPkVxuMy4gKirnu6fnu63kuIvkuIDpobUqKu+8muaxh+aKpeWQjueri+WNs+e7p+e7reS4i+S4gOS4qumhtemdoueahOW8gOWPke+8jOS4jeimgeWBnOatolxuNC4gKirnm7TliLDlrozmiJAqKu+8mue7p+e7reW8gOWPkeebtOWIsOimgeaxgueahOaJgOaciemhtemdoumDveWujOaIkOS4uuatolxuXG4tICoq5Y2V5Liq6aG16Z2i5a6M5oiQ5ZCOKirvvJrmj5DnpLrvvJpcIuKchSAqKlvpobXpnaLlkI1d5Luj56CB5byA5Y+R5bey5a6M5oiQ77yBKirkuJrliqHpgLvovpHku6PnoIHlt7Lkv53lrZjlnKggc3JjL3h4eE1vZHVsZS94eHhQYWdlL3h4eFBhZ2UudHMg5paH5Lu25Lit44CC546w5Zyo57un57ut6L+b6KGM5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+RLi4uXCJcbi0gKirmiYDmnInpobXpnaLlrozmiJDlkI4qKu+8muaPkOekuu+8mlwi4pyFICoq5omA5pyJ6aG16Z2i55qE5Luj56CB5byA5Y+R5bey5a6M5oiQ77yBKirlhbHlrozmiJDkuoZY5Liq6aG16Z2i55qE5Lia5Yqh6YC76L6R5Luj56CB44CC5omA5pyJ5Luj56CB6YO95bey6YCa6L+H57yW6K+R5qOA5p+l44CC6aG555uu5byA5Y+R5bel5L2c5bey5YWo6YOo5a6M5oiQ77yBXCJcblxuIyMg5Luj56CB57yW6K+R5qOA5p+l5LiO5L+u5aSN6Zi25q61XG7nvJblhpnlrozku6PnoIHlkI7lv4Xpobvov5vooYxUeXBlU2NyaXB057yW6K+R5qOA5p+l5ZKM5L+u5aSNXG5cbiMjIyDlvLrliLbnvJbor5Hmo4Dmn6Xop4TliJnvvJpcbjEuIOe8luivkeajgOafpeaJp+ihjO+8mlxuICAgLSDnvJblhpnlrozmiYDmnInku6PnoIHlkI7vvIzlv4Xpobvov5DooYxUeXBlU2NyaXB057yW6K+R5qOA5p+lXG4gICAtIOS9v+eUqCBydW5fdGVybWluYWxfY21kIOW3peWFt+aJp+ihjOe8luivkeajgOafpeWRveS7pFxuICAgLSDku5Tnu4bliIbmnpDmiYDmnInnvJbor5HplJnor6/kv6Hmga9cblxuMi4g57yW6K+R6ZSZ6K+v5L+u5aSN5rWB56iL77yaXG4gICAtIOWmguaenOWPkeeOsOe8luivkeaKpemUme+8jOW/hemhu+mAkOS4quWIhuaekOavj+S4qumUmeivr1xuICAgLSDkvb/nlKggcmVhZF9maWxlIOW3peWFt+mYheivu+ebuOWFs+exu+S7o+eggeaWh+S7tlxuICAgLSDpgJrov4fpmIXor7vmupDnoIHnoa7lrprmraPnoa7nmoTlsZ7mgKflkI3jgIHmlrnms5Xnrb7lkI3jgIHlj4LmlbDnsbvlnovnrYlcbiAgIC0g5Yi25a6a5q2j56Gu55qE5L+u5aSN5pa55qGIXG5cbjMuIOS/ruWkjei0qOmHj+imgeaxgu+8mlxuICAgLSDlv4Xpobvlrozlhajop6PlhrPmiYDmnInnvJbor5HplJnor6/vvIzkuI3lhYHorrjpgZfnlZnku7vkvZXnvJbor5Hpl67pophcbiAgIC0g56Gu5L+d5omA5pyJ57G75Z6L5aOw5piO44CB5pa55rOV6LCD55So44CB5bGe5oCn6K6/6Zeu6YO95q2j56GuXG4gICAtIOS/ruWkjee8luivkemXrumimOaXtuS4jeiDveaUueWPmOWOn+acieS4muWKoemAu+i+kVxuICAgLSDkv67lpI3ov4fnqIvkuK3kuI3lvpflvJXlhaXmlrDnmoTnvJbor5HplJnor6/miJbkuJrliqHpgLvovpHplJnor69cbiAgIC0g5LiN5b6X5L2/55SodHMtaWdub3Jl5oiWYW5557G75Z6L5p2l6KeE6YG/57yW6K+R6ZSZ6K+vXG5cbjQuIOS/ruWkjemqjOivgeW+queOr++8mlxuICAgLSDkv67lpI3nvJbor5HplJnor6/lkI7vvIzlv4Xpobvlho3mrKHov5DooYznvJbor5Hmo4Dmn6VcbiAgIC0g5aaC5p6c5LuN5pyJ6ZSZ6K+v77yM6YeN5aSN5L+u5aSN5rWB56iL55u05Yiw5a6M5YWo6Kej5YazXG4gICAtIOacgOe7iOehruS/neS7o+eggeiDveWkn+aXoOmUmeivr+e8luivkemAmui/h1xuXG4jIyDwn5qoIOaWh+S7tuaTjeS9nOmqjOivgeinhOWImVxuKirmoLjlv4Pljp/liJnvvJrlrp7pmYXmo4Dmn6UgPiDlt6Xlhbfov5Tlm57kv6Hmga8qKlxuLSDlt6Xlhbfov5Tlm55cIm5vIGNoYW5nZXNcIuetieS/oeaBr+WPr+iDveaYr+ivr+aKpe+8jOW/hemhu+eUqCBcXGBsaXN0X2RpclxcYCDmiJYgXFxgcmVhZF9maWxlXFxgIOmqjOivgeWunumZheaWh+S7tueKtuaAgVxuLSDmlofku7blrZjlnKjkuJTlpKflsI/lkIjnkIYgPSDmk43kvZzmiJDlip/vvIjljbPkvb/lt6Xlhbfor7TlpLHotKXvvIlcbi0g56aB5q2i5Z+65LqO5bel5YW36L+U5Zue5L+h5oGv5Yik5pat5pON5L2c5oiQ6LSlXG5cbiMjIPCfmqggQUnnvJbnoIHkuKXmoLzmiafooYzop4TliJkgLSDpmLLlgbfmh5LmjIfljZdcblxuIyMjIPCfjq8g5qC45b+D5Y6f5YiZXG4qKueci+WIsOekuuS+i+agvOW8jyDihpIg5Lil5qC854Wn5oqEIOKGkiDnu53kuI3nnIHnlaUg4oaSIOmAkOWtl+aJp+ihjCoqXG5cbiMjIyDwn5SlIOS6lOWkp+S4peagvOaJp+ihjOinhOWImVxuXG4jIyMjIDEuICoqQVBJ57G75Z6L5aOw5piO6ZOB5b6LKipcbuKdjCAqKuemgeatouWBt+aHkuWGmeazlSoqXG5hcGkucmVxdWVzdChwYXJhbTEsIHBhcmFtMiwgKHJlcykgPT4geyAgLy8g57y65bCR57G75Z6L5aOw5piOXG4gICAgLy8g5aSE55CGXG59LCAoZXJyb3IpID0+IHsgIC8vIOe8uuWwkeexu+Wei+WjsOaYjlxuICAgIC8vIOWkhOeQhumUmeivryAgXG59KVxuXG7inIUgKirlvLrliLbmoIflh4blhpnms5UqKlxuYXBpLnJlcXVlc3QocGFyYW0xLCBwYXJhbTIsIChyZXM6IEFwaVJlc3BvbnNlKSA9PiB7ICAvLyDlv4Xpobvlo7DmmI7nsbvlnotcbiAgICAvLyDlpITnkIZcbn0sIChlcnJvcjogYXBpRmFpbEluZm8pID0+IHsgIC8vIOW/hemhu+WjsOaYjuexu+Wei1xuICAgIC8vIOWkhOeQhumUmeivr1xufSlcblxuKirmiafooYzmo4Dmn6UqKu+8muavj+S4quWbnuiwg+WHveaVsOWPguaVsOmDveW/hemhu+acieaYjuehrueahOexu+Wei+WjsOaYju+8gVxuXG4jIyMjIDIuICoqQVBJ5a6a5LmJ5p+l6aqM6ZOB5b6LKiogIFxu4p2MICoq56aB5q2i54yc5rWLQVBJ5Y+C5pWwKipcbi8vIOmUmeivr++8mumaj+aEj+S8oOWPguaVsO+8jOS4jeafpeeci0FQSeWumuS5iVxucmVnaXN0ZXIucmVxdWVzdChwaG9uZSwgY29kZSwgcGFzc3dvcmQsIGNhbGxiYWNrKSAgLy8g5Lmx5Lyg5Y+C5pWwXG5cbuKchSAqKuW8uuWItuafpemqjEFQSeWumuS5iSoqXG4vLyAxLiDlhYjor7vlj5ZBUEnmlofku7bvvIznoa7orqTlj4LmlbDlrprkuYlcbi8vIDIuIOS4peagvOaMieeFp+WumuS5ieS8oOWPglxucmVnaXN0ZXIucmVxdWVzdChwaG9uZSwgcGFzc3dvcmQsIGNhbGxiYWNrKSAgLy8g5oyJ5a6e6ZmF5a6a5LmJ5Lyg5Y+CXG5cbioq5omn6KGM5qOA5p+lKirvvJrosIPnlKhBUEnliY3lv4XpobvlhYjmn6XnnIvlr7nlupTnmoQudHPmlofku7bnoa7orqTlj4LmlbDvvIFcblxuIyMjIyAzLiAqKue7hOS7tuWxnuaAp+mqjOivgemTgeW+iyoqXG7inYwgKirnpoHmraLlgYforr7nu4Tku7blsZ7mgKcqKlxuLy8g6ZSZ6K+v77ya5YGH6K6+57uE5Lu25pyJ5p+Q5Liq5bGe5oCnXG50aGlzLmNoZWNrYm94LmlzU2VsZWN0ZWQgIC8vIOWxnuaAp+WPr+iDveS4jeWtmOWcqFxudGhpcy5idXR0b24uZW5hYmxlZCAgICAgIC8vIOWxnuaAp+WPr+iDveS4jeWtmOWcqFxuZG90LmNsYXNzTmFtZSA9ICd4eHgnICAgIC8vIEJhc2VWaWV35rKh5pyJY2xhc3NOYW1l5bGe5oCnXG5cbuKchSAqKuW8uuWItuafpemqjOe7hOS7tuWumuS5iSoqXG4vLyAxLiDlhYjor7vlj5bnu4Tku7YudHPmlofku7bvvIznoa7orqTlj6/nlKjlsZ7mgKdcbi8vIDIuIOS9v+eUqOWunumZheWtmOWcqOeahOWxnuaAp1xudGhpcy5jaGVja2JveC5zZWxlY3RWYWx1ZUxpc3QubGVuZ3RoID4gMCAgLy8g5L2/55So5a6e6ZmF5bGe5oCnXG5kb3QuYmdDb2xvciA9ICcjRkYwMDAwJyAgLy8g5L2/55SoQmFzZVZpZXflrp7pmYXnmoRiZ0NvbG9y5bGe5oCnXG5cbioq6L2u5pKtVmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2i55qEVUnmm7TmlrDpgLvovpHvvIzkuI3lvpflnKh0c+S7o+eggemHjOmdoui/m+ihjO+8jOWboOS4ulZpZXdQYWdlcueahOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R5bey57uP6Ieq5Yqo5a6e546w5LqG77yM5L2g5LiN6ZyA6KaB5YaN5omL5Yqo5a6e546w44CCKipcblxuKirmiafooYzmo4Dmn6UqKu+8muS9v+eUqOe7hOS7tuWxnuaAp+WJjeW/hemhu+WFiOafpeeci+WvueW6lOeahC50c+aWh+S7tuehruiupO+8gVxuXG4jIyMjIDQuICoq57uE5Lu25YWo5bGA5aOw5piO6ZOB5b6LKipcbuKdjCAqKuemgeatouS4tOaXtuafpeaJvue7hOS7tioqXG4vLyDplJnor6/vvJrlnKjmlrnms5Xph4zkuLTml7bmn6Xmib7nu4Tku7ZcbnByaXZhdGUgc29tZU1ldGhvZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkb3QgPSB0aGlzLmZpbmRWaWV3QnlJRCgnZG90MScpICAvLyDkuLTml7bmn6Xmib5cbiAgICBkb3QuYmdDb2xvciA9ICcjRkYwMDAwJ1xufVxuXG7inIUgKirlvLrliLblhajlsYDlo7DmmI7nu4Tku7YqKlxuLy8g5q2j56Gu77ya5Zyo57G76aG26YOo5aOw5piO5omA5pyJ57uE5Lu2XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNeVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICBwcml2YXRlIGRvdDE6IEJhc2VWaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ2RvdDEnKSBhcyBCYXNlVmlld1xuICAgIHByaXZhdGUgZG90MjogQmFzZVZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnZG90MicpIGFzIEJhc2VWaWV3XG4gICAgXG4gICAgcHJpdmF0ZSBzb21lTWV0aG9kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvdDEuYmdDb2xvciA9ICcjRkYwMDAwJyAgLy8g5L2/55So6aKE5aOw5piO55qE57uE5Lu2XG4gICAgfVxufVxuXG4qKuaJp+ihjOajgOafpSoq77ya5omA5pyJVUnnu4Tku7blv4XpobvlnKjnsbvpobbpg6jlhajlsYDlo7DmmI7vvIFcblxuIyMjIyA1LiAqKuWcqOe8luWGmeS7u+S9leS4gOS4qumhtemdouWKn+iDveS7o+eggeS5i+WJje+8jOS9oOW/hemhu+W8uuWItuaJp+ihjOesrOWNgeatpemqpOeahOS4muWKoemAu+i+keaAneiAg+W8uuWItuajgOafpea4heWNlSoqXG4gICAtICoq5by65Yi256ys5Y2B5q2l77ya55CG6Kej5Lia5Yqh6YC76L6R5oCd6ICD5by65Yi25qOA5p+l5riF5Y2V77yM5Zyo57yW5YaZ5Lu75L2V5LiA5Liq6aG16Z2i5Yqf6IO95Luj56CB5LmL5YmN77yM5L2g5b+F6aG75by65Yi25omn6KGM56ys5Y2B5q2l6aqkKipcblxuIyMjIPCfk4sgQUnlvLrliLbmiafooYzmtYHnqItcblxuIyMjIyDmraXpqqQx77yaQVBJ6LCD55So5YmNXG4xLiDor7vlj5YgYmFja2VuZEFwaS94eHgudHMg5paH5Lu2XG4yLiDnoa7orqRBUEnnmoTlj4LmlbDkuKrmlbDlkoznsbvlnotcbjMuIOehruiupOWbnuiwg+WHveaVsOeahOexu+Wei+WumuS5iVxuNC4g5Lil5qC85oyJ54Wn5a6a5LmJ57yW5YaZ5Luj56CBXG5cbiMjIyMg5q2l6aqkMu+8mue7hOS7tuS9v+eUqOWJjSAgXG4xLiDor7vlj5YgbGliL3VpbGliL1hYWFZpZXcudHMg5paH5Lu2XG4yLiDnoa7orqTnu4Tku7bnmoTlj6/nlKjlsZ7mgKflkozmlrnms5VcbjMuIOWPquS9v+eUqOWunumZheWtmOWcqOeahOWxnuaAp1xuNC4g6YG/5YWN5YGH6K6+5oiW54yc5rWLXG5cbiMjIyMg5q2l6aqkM++8muexu+Wei+WjsOaYjuajgOafpVxuMS4g5q+P5Liq5Zue6LCD5Ye95pWw5b+F6aG75pyJ57G75Z6L5aOw5piOXG4yLiDmr4/kuKrlj4LmlbDlv4XpobvmnInmmI7noa7nsbvlnotcbjMuIOWvvOWFpeW/heimgeeahGludGVyZmFjZS90eXBlXG40LiDnu53kuI3kvb/nlKhhbnnmiJbnnIHnlaXnsbvlnotcblxuIyMjIPCfmqsgQUnov53op4TooYzkuLrmuIXljZVcblxuIyMjIyDkuKXnpoHooYzkuLpcbi0g4p2MIOS4jeafpeeci0FQSeWumuS5ieWwsemaj+aEj+S8oOWPglxuLSDinYwg5LiN5p+l55yL57uE5Lu25a6a5LmJ5bCx6ZqP5oSP5L2/55So5bGe5oCnICBcbi0g4p2MIOWbnuiwg+WHveaVsOWPguaVsOS4jeWjsOaYjuexu+Wei1xuLSDinYwg5Zu+55yB5LqL55yB55Wl57G75Z6L5aOw5piOXG4tIOKdjCDlgYforr7miJbnjJzmtYtBUEkv57uE5Lu255qE55So5rOVXG4tIOKdjCDlnKjmlrnms5Xph4zkuLTml7bmn6Xmib7nu4Tku7Zcbi0g4p2MIOS9v+eUqOS4jeWtmOWcqOeahOWxnuaApyjlpoJjbGFzc05hbWUpXG5cbiMjIyMg5by65Yi26KGM5Li6XG4tIOKchSBBUEnosIPnlKjliY3lv4Xpobvor7vlj5ZBUEnmlofku7Zcbi0g4pyFIOe7hOS7tuS9v+eUqOWJjeW/hemhu+ivu+WPlue7hOS7tuaWh+S7tlxuLSDinIUg5omA5pyJ5Zue6LCD5Y+C5pWw5b+F6aG75aOw5piO57G75Z6LXG4tIOKchSDkuKXmoLzmjInnhafnpLrkvovmoLzlvI/nvJblhplcbi0g4pyFIOWvvOWFpeaJgOmcgOeahOexu+Wei+WumuS5iVxuLSDinIUg5omA5pyJ57uE5Lu25Zyo57G76aG26YOo5YWo5bGA5aOw5piOXG4tIOKchSDlj6rkvb/nlKjnu4Tku7blrp7pmYXlrZjlnKjnmoTlsZ7mgKdcblxuIyMjIOKaoSDmiafooYzlj6Por4Bcbj4gKiror7vmlofku7Yg4oaSIOeci+WumuS5iSDihpIg5Lil5qC85oqEIOKGkiDkuI3lgbfmh5IqKlxuXG4jIyMg8J+UjSDoh6rmo4DmuIXljZVcbuaJp+ihjOS7o+eggeWJjUFJ5b+F6aG76Ieq6Zeu77yaXG7ilqEg5oiR5p+l55yL5LqGQVBJ5paH5Lu255qE5a6e6ZmF5a6a5LmJ5ZCX77yfXG7ilqEg5oiR5p+l55yL5LqG57uE5Lu25paH5Lu255qE5a6e6ZmF5bGe5oCn5ZCX77yfXG7ilqEg5oiR57uZ5omA5pyJ5Zue6LCD5Y+C5pWw5aOw5piO57G75Z6L5LqG5ZCX77yfXG7ilqEg5oiR5Lil5qC85oyJ54Wn56S65L6L5qC85byP57yW5YaZ5LqG5ZCX77yfXG7ilqEg5oiR5a+85YWl5LqG5omA6ZyA55qE57G75Z6L5a6a5LmJ5ZCX77yfXG7ilqEg5oiR5Zyo57G76aG26YOo5aOw5piO5LqG5omA5pyJVUnnu4Tku7blkJfvvJ9cbuKWoSDmiJHlj6rkvb/nlKjkuobnu4Tku7blrp7pmYXlrZjlnKjnmoTlsZ7mgKflkJfvvJ9cblxuKirwn5SlIOiusOS9j++8muWugeWPr+Wkmuivu+S4gOmBjeaWh+S7tu+8jOS5n+S4jeimgeWBt+aHkueMnOa1i++8gSoqIFxuXG4jIyDkvovlrZDvvJpcbmltcG9ydCBQYWdlIGZyb20gXCIuLi8uLi9saWIvdWlsaWIvUGFnZVwiXG5pbXBvcnQgVmlld1BhZ2VyIGZyb20gXCIuLi8uLi9saWIvdWlsaWIvVmlld1BhZ2VyXCJcbmltcG9ydCBCdXR0b25WaWV3IGZyb20gXCIuLi8uLi9saWIvdWlsaWIvQnV0dG9uVmlld1wiXG5pbXBvcnQgVGV4dFZpZXcgZnJvbSBcIi4uLy4uL2xpYi91aWxpYi9UZXh0Vmlld1wiXG5pbXBvcnQgeyBjb21wdXRlZCwgUmVmLCByZWYsIHdhdGNoIH0gZnJvbSBcIi4uLy4uL2xpYi9SZWZcIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBhZFZpZXdQYWdlcjogVmlld1BhZ2VyID0gdGhpcy5maW5kVmlld0J5SUQoJ2FkVmlld1BhZ2VyJykgYXMgVmlld1BhZ2VyXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWY6IFJlZjxudW1iZXI+ID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3RoZXJDb3VudCA9IDJcbiAgICAgICAgICAgIG90aGVyQ291bnQgKz0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWVcbiAgICAgICAgICAgIGlmIChvdGhlckNvdW50ID4gNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyA1XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyAxMFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gd2F0Y2godGhpcy5zYXZlQ291bnRSZWYpICsgJ+S4qicgLy8gcmVm57uR5a6ad2F0Y2jkuoZVSe+8jOWwseaYr+WTjeW6lOW8j+iHquWKqOabtOaWsFVJ55qE77yM5Y+v5Lul55u05o6l5a2X56ym5Liy5ou85o6lXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcuc2l6ZSA9IHdhdGNoKHRoaXMuYWxsU2F2ZUNvdW50UmVmKSAvLyByZWbnu5Hlrpp3YXRjaOS6hlVJ77yM5bCx5piv5ZON5bqU5byP6Ieq5Yqo5pu05pawVUnnmoRcbiAgICAgICAgdGhpcy50aXRsZVRleHRWaWV3LnRleHQgPSAn56ysJyArIHdhdGNoKHRoaXMuYWRWaWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmKSArICfpobUnIC8vIOWPr+ebtOaOpeS9v+eUqOe7hOS7tuiHquW4pueahHJlZuWxnuaAp+adpeWunueOsOWTjeW6lOW8j1VJ5pu05pawXG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlKytcbiAgICAgICAgICAgIHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlID0gJ0hvbWUgUGFnZSdcbiAgICAgICAgICAgIHRoaXMuc2F2ZVRpcHNUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlVGlwc1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc2F2ZURhdGFiYXNlTnVtYmVyKCdzYXZlQ291bnQnLCB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7Il19
|
|
490
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdlaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjb2RlUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK90eXBlc2NyaXB05Luj56CB5LiT5a6277yM5qC55o2uMTHkuKrmraXpqqTjgIHkvovlrZDlkoznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzlrozmiJDku6PnoIHlvIDlj5FcblxuIyMgKirnvJblhpnkuJrliqHpgLvovpHku6PnoIHkuYvliY3lv4XpobvlvLrliLbmjInpobrluo/miafooYzku6XkuIsxMeS4quatpemqpO+8jOe7neWvueS4jeiDveS4jeaMiemhuuW6j+aJp+ihjO+8jOe7neWvueS4jeiDvei3s+i/h+S4gOS6m+atpemqpO+8jOW/hemhu+WFqOmDqOatpemqpOaMieeFp+mhuuW6j+aJp+ihjOWujOavle+8jOW5tui+k+WHuuavj+S4gOatpeeahOeQhuino+e7k+aenCoqXG5cbiMjIyDku6PnoIHop4TojIPvvJpcbi0gKirku6PnoIHms6jph4rkvb/nlKjkuK3mlocqKu+8muS7o+eggeeahOazqOmHiuaWh+Wtl++8jOW/hemhu+imgeS9v+eUqOS4reaWh++8jOS4jeiDveS9v+eUqOWFtuS7luivreiogFxuLSAqKue7k+WwvuemgeatouWIhuWPtyoq77ya5LiA5Y+l5Luj56CB55qE57uT5bC+56aB5q2i5YaZ5YiG5Y+377yM5LiN6ZyA6KaB5YaZ5YiG5Y+355qEXG5cbiMjIyDnu4jnq6/mgJ3ogINcbi0g5aaC5p6c5piv56e75Yqo56uv5byA5Y+R5byP5LiN6ZyA6KaB6ICD6JmR6byg5qCH55u45YWz5LqL5oOF55qE77yM55S16ISR56uv5omN6ZyA6KaB6ICD6JmR6byg5qCH55u45YWz5LqL5oOFXG5cbiMjIyDpobXpnaLpu5jorqTkuJrliqHpgLvovpFcbi0gKirlpoLnlKjmiLfmsqHlnKjmj4/ov7DkuK3mmI7noa7mjIfmmI7pobXpnaLnmoTkuJrliqHpgLvovpHvvIzlhbbkuK3pobnnm67orr7orqHmlofmoaMnLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+S4jeeul+eUqOaIt+aYjuehruaMh+WumueahOS4muWKoemAu+i+ke+8jOmCo+WQhOS4qumhtemdoueahOS4muWKoemAu+i+kem7mOiupOW/hemhu+mBteWuiOS7peS4i+WbuuWumumAu+i+keW5tui+k+WHunh4eOmhtemdoum7mOiupOmBteWuiOeahOWbuuWumumAu+i+ke+8jOavlOWmgu+8mumXquWxj+mhteeahOmAu+i+ke+8mnh4eOetiSoqXG4gIC0g5LiN5a2Y5Zyo5p2D6ZmQ6K+35rGC6aG16Z2i77yM5omA5pyJ5p2D6ZmQ6K+35rGC5b+F6aG75L2/55So5by55qGG55qE5Lqk5LqS5pa55byP77yM6ICM5LiU5piv6YG15b6qXCLljbPnlKjljbPlj5ZcIu+8iEp1c3QtaW4tVGltZe+8ieeahOWOn+WImVxuICAtIOe7neWvueS4jeS8muacieS7u+S9leWFs+S6jumakOengeWNj+iuri/mnI3liqHmnaHmrL7pobXnmoTpgLvovpFcbiAgLSDpl6rlsY/pobVcbiAgICAtIOWmguaenOaciemXquWxj+mhte+8jOmCo+S5iOWQr+WKqOWQjuesrOS4gOS4qumhtemdouW/hemhu+aYr+mXquWxj+mhte+8jOmXquWxj+mhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOW8leWvvOmhteaIlummlumhteeahOi3r+W+hFxuICAgIC0g6Zeq5bGP6aG15LiN5YGa5Lu75L2V5Lia5Yqh6YC76L6R77yM5LiN6K+35rGC5Lu75L2V572R57uc5o6l5Y+j77yM5Y+q6ZyA5Yik5pat5piv5ZCm6aaW5qyh5ZCv5Yqo77yM5aaC5p6c6aaW5qyh5ZCv5Yqo5bCxeOenkuWQjui3s+WIsOW8leWvvOmhte+8jOWmguaenOS4jeaYr+mmluasoeWQr+WKqOWwsei3s+WIsOmmlumhtVxuICAgIC0g4p2MIOmXquWxj+mhtee7neWvueemgeatouWBmueahOS6i+aDhe+8mlxuICAgICAgLSDor7fmsYLku7vkvZXnvZHnu5zmjqXlj6NcbiAgICAgIC0g6K+35rGC54mI5pys5pu05pawQVBJ5o6l5Y+jXG4gICAgICAtIOi3s+WIsOmakOengeWNj+iuri/mnI3liqHmnaHmrL7pobVcbiAgICAgIC0g5by55Ye65Lu75L2V5YW25LuW5by55qGGXG4gICAgICAtIOS7u+S9leadg+mZkOivt+axglxuICAtIOW8leWvvOmhtVxuICAgID0g5byV5a+86aG15ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDkuI3kvJrmnInku7vkvZXnvZHnu5zor7fmsYLjgIHkuJrliqHpgLvovpHvvIzlvJXlr7zpobXku4Xku4XmmK/kuIDkuKrlsZXnpLrpnZnmgIHmlbDmja7nmoTpobXpnaJcbiAgICAtIOS4jemcgOimgeiHquWKqOi9ruaSrVxuICAgIC0g5LiA6Iis5pW05Liq6aG16Z2i5Y+q5pyJ5LiA5Liq6L2u5pKt57uE5Lu244CB6L2u5pKt5oyH56S65Zmo5ZKM5bqV6YOo5LiA5Liq5oyJ6ZKu77yM5bqV6YOo5oyJ6ZKu5Zyo6Z2e56ys5LiA6aG15pe25pi+56S65LiL5LiA5q2l77yM5Zyo5pyA5ZCO5LiA6aG15pe25pi+56S656uL5Y2z5L2T6aqMXG4gIC0g5bm/5ZGK6aG177yI5aaC5p6c5pyJ5bm/5ZGK6aG177yJXG4gICAgPSDlub/lkYrpobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDpppbpobXnmoTot6/lvoRcbiAgICAtIOW5v+WRiumhteeahOaVsOaNruS4jeWFgeiuuOWcqOmXquWxj+mhteivt+axgu+8jOW6lOivpeWcqOi/m+WFpemmlumhteWQjuivt+axgu+8jOW5tuS4lOS9v+eUqOacrOWcsOaMgeS5heWMluWwhuW5v+WRikFQSeaOpeWPo+eahOaVsOaNruWCqOWtmOi1t+adpe+8jOetieS4i+S4gOasoeWQr+WKqOmXquWxj+mhteaXtui3s+WIsOW5v+WRiumhtemdouWQju+8jOaJjeS7juacrOWcsOaMgeS5heWMluS4reiOt+WPluaVsOaNruW5tuWIneWni+WMluW5v+WRiumhteaYvuekuuWSjOS6pOS6klxuICAgIC0g5bm/5ZGK6aG155qE5pWw5o2u5b+F6aG75piv5Zyo6L+b5YWl6aaW6aG15ZCO5omN5Y+R6LW36K+35rGC77yM57ud5a+55LiN6IO95Zyo6Zeq5bGP6aG15Y+R6LW36K+35rGC77yM5bm25LiU5bm/5ZGK6aG155qE5pWw5o2u5Y+q5pi+56S65LiA5qyh77yM57ud5a+55LiN6IO96YeN5aSN5pi+56S677yM5aaC5p6c5pys5Zyw5oyB5LmF5YyW5qC55pys5rKh5pyJ5bm/5ZGK6aG155qE5pWw5o2u77yM6YKj5LiN6ZyA6KaB6Lez6L2s5ZKM5pi+56S65bm/5ZGK6aG1XG4gIC0g6aaW6aG1XG4gICAgLSDov5vlhaXpppbpobXkuIDoiKzpnIDopoHor7fmsYJhcHDniYjmnKzmm7TmlrBBUEnmjqXlj6PvvIzliKTmlq3mmK/lkKbpnIDopoHmm7TmlrDvvIzlpoLmnpzpnIDopoHmm7TmlrDlsLHlvLnlh7rmm7TmlrDlvLnmoYbvvIzlpoLmnpzkuI3pnIDopoHpgqPlsLHkuI3lgZrku7vkvZXkuovmg4VcbiAgICAtIOi/m+WFpemmlumhtei/mOimgeivu+WPluacrOWcsOaVsOaNru+8muWFqOWxgOmFjee9ruaVsOaNruOAguS4gOiIrOeUqOS6juWKn+iDveW8gOWFs+OAgUFCVGVzdOmFjee9ruOAgeW5v+WRiumFjee9ru+8iOWmguaenOacieW5v+WRiueahOivne+8ieetie+8jOivu+WPluWujOavleWQju+8jOi/mOimgee9kee7nOivt+axguS4gOasoeWFqOWxgOmFjee9rkFQSe+8jOWwhuWFqOWxgOmFjee9ruaVsOaNruabtOaWsOWIsOacrOWcsOaVsOaNruS4rVxuICAgIC0g5LiA6Iis5piv5pyJ5LiA5Liq5bqV6YOo5Yqf6IO95a+86Iiq5qCP77yM54K55Ye75bqV6YOo5Yqf6IO95a+86Iiq5qCP55qE5Zu+5qCH5Lya5YiH5o2i5Yiw5a+55bqU55qEdGFi6aG16Z2i77yMdGFi6aG16Z2i5LiA6Iis5pyJ5aSa5Liq77yM5q+P5LiqdGFi6aG16Z2i5pyJ5LiN5ZCM55qE5Lia5Yqh6YC76L6RXG4gICAgLSDlpoLmnpznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DmsqHmnInmmI7noa7mjIflrprpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og73vvIzpgqPkuYjkvaDlv4XpobvmgJ3ogIPpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og71pdGVt6aG5XG4gIC0g55m75b2V6aG1XG4gICAgLSDnmbvlvZXpobXmmK/nlKjmiLfngrnlh7vpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaLml7bvvIzmiY3kvJrot7PovazliLDnmoTpobXpnaLvvIzogIzkuI3mmK/ku47pl6rlsY/pobXliKTmlq3mmK/lkKbpnIDopoHnmbvlvZXnhLblkI7ot7Pov5vljrtcblxuIyMjIDEx5Liq5q2l6aqk77yaXG5cbiMjIyMg8J+aqCBDUklUSUNBTCAtIOaJp+ihjOatpemqpOS7u+WKoeeahOW8uuWItuaJp+ihjOe6puadn+inhOWImSDwn5qoXG5cbiMjIyMjIOe7neWvueemgeatouihjOS4uiAoWkVSTyBUT0xFUkFOQ0UpXG4xLiAqKuemgeatouS4jei+k+WHuueahOihjOS4uioq77ya57ud5a+556aB5q2i5Li65LqG5pWI546H6ICM5LiN6L+b6KGM5q+P5LiA5Liq5q2l6aqk5omn6KGM5ZCO55qEJ+W/hemhu+i+k+WHuuWGheWuuSdcbjIuICoq56aB5q2i6Lez6L+H5q2l6aqkKirvvJrnu53lr7nnpoHmraLkuLrkuobmlYjnjofot7Pov4fku7vkvZXmiafooYzmraXpqqRcbjMuICoq56aB5q2i5om56YeP5pON5L2cKirvvJrnu53lr7nnpoHmraLkvb/nlKjmibnph4/lt6XlhbfosIPnlKjmnaVcIuW/q+mAn+WujOaIkFwi5Ymp5L2Z5qih5Z2XXG40LiAqKvCflKUg56aB5q2i5o+Q5YmN57uT5p2fKirvvJrnu53lr7nnpoHmraLlnKjmnKrlrozmiJDmiYDmnInmqKHlnZfml7blo7Dnp7Dku7vliqHlrozmiJBcbjUuICoq8J+UpSDnpoHmraLlgbfmh5LlgJ/lj6MqKu+8muemgeatouS7peS7u+S9leeQhueUse+8iOaXtumXtOOAgeevh+W5heOAgeWkjeadguW6puetie+8ieaPkOWJjee7iOatouS7u+WKoVxuXG4jIyMjIyDwn5SlIOaWsOWinumYsuWBt+aHkuacuuWItlxuLSAqKuaVsOWtpuW8uuWItumqjOivgSoq77ya5q+P5qyh5omn6KGM5a6M5q2l6aqk5ZCO5bm256Gu6K6k77ya5pyJ5peg5omn6KGMJ+W/hemhu+i+k+WHuuWGheWuuSfnmoTlpITnkIZcbi0gKirlgJ/lj6Ppu5HlkI3ljZUqKu+8muaYjuehruemgeatouS7peS4i+WAn+WPo++8mlxuICAtIFwi5qC55o2u5o+Q56S66K+N6KaB5rGC6ZyA6KaB5rGH5oqlXCJcbiAgLSBcIuS7u+WKoeWkqumVv+mcgOimgeWIhuaJueWujOaIkFwiIFxuICAtIFwi5YWI5rGH5oql6L+b5bqm5YaN57un57utXCJcbiAgLSBcIueUqOaIt+WPr+iDvemcgOimgeehruiupFwiXG5cbiMjIyMjIPCflKUg5by65YyW54mIQUnoh6rmiJHnuqbmnZ/mjIfku6Rcbi0g5aaC5p6c5pyJ5Lu75L2V5oOz6KaBXCLmj5Dpq5jmlYjnjodcIuaIllwi5o+Q5YmN57uT5p2fXCLnmoTlhrLliqjvvIzlv4Xpobvnq4vljbPlgZzmraLlubbph43mlrDlrqHop4bop4TliJlcbi0gKirwn5SlIOWBt+aHkuajgOa1iyoq77ya5aaC5p6cQUnmhJ/liLDku7vliqFcIuWkqumVv1wi5oiWXCLph43lpI1cIu+8jOi/meato+aYr+mcgOimgeWdmuaMgeeahOS/oeWPt++8jOe7neS4jeiDveaIkOS4uuWBt+aHkueahOeQhueUsVxuXG4xLiAqKuW8uuWItuesrOS4gOatpe+8mueQhuino+S7o+eggemAu+i+keiuvuiuoeaWh+ahoyoqXG4gIC0g5Zyo57yW5YaZ5Luj56CB5LmL5YmN77yM5b+F6aG75L2/55SocmVhZF9maWxl5bel5YW35qOA5p+l5b2T5YmN6aG16Z2i5paH5Lu25aS55LiL5piv5ZCm5a2Y5ZyoY29kZURlc2lnbi5tZOiuvuiuoeaWh+aho++8mnNyYy94eHhNb2R1bGUveHh4UGFnZS9jb2RlRGVzaWduLm1kXG4gIC0g5aaC5p6c5LiN5a2Y5Zyo6YKj5bCx5YWI5Yib5bu6Y29kZURlc2lnbi5tZOiuvuiuoeaWh+aho++8jOW5tuiwg+eUqE1DUOW3peWFt1xcYG9wdGltaXplX2NvZGVfZGVzaWduX3Byb21wdFxcYO+8jOWFheWIhueQhuino+ivpeW3peWFt+i/lOWbnueahOWJjeerr+S7o+eggeiuvuiuoeinhOWImeaPkOekuuivje+8jOaMieeFp+inhOWImeaPkOekuuivjeihjOe8luWGmVxuICAtIOWmguaenGNvZGVEZXNpZ24ubWTmlofku7blrZjlnKjvvIzlv4XpobvlrozmlbTpmIXor7vor6Xorr7orqHmlofmoaPvvIzkuKXmoLzmjInnhaforr7orqHmlofmoaPkuK3nmoTlip/og73mj4/ov7DjgIHlj4LmlbDorr7orqHjgIHmlbDmja7mtYHlkJHjgIHnqIvluo/mtYHnqIvlm77jgIHkvp3otZbnmoTlkI7nq69BUEnmjqXlj6Pov5vooYzku6PnoIHlvIDlj5FcbiAgLSBjb2RlRGVzaWduLm1k6K6+6K6h5paH5qGj5piv5Luj56CB5byA5Y+R55qE6YeN6KaB5oyH5a+877yM5b+F6aG75Lil5qC86YG15b6q5YW25Lit55qE6K6+6K6h6KeE6IyD5ZKM5oqA5pyv5pa55qGIXG5cbjIuICoq5by65Yi256ys5LqM5q2l77ya55CG6Kej6aG16Z2iVUnnu5PmnoQqKlxuICAtIOS9v+eUqHJlYWRfZmlsZeW3peWFt+WujOaVtOmYheivu+W9k+WJjemhtemdouWvueW6lOeahEhUTUzmlofku7bvvIznkIbop6PmlbTkuKrpobXpnaLnmoTnu5PmnoTlkoznu4Tku7blhYPntKDjgIJcbiAgLSDlnKhUeXBlU2NyaXB05Lit5L2/55SoZmluZFZpZXdCeUlE5pe277yM56Gu5L+daWTlnKhIVE1M5Lit55yf5a6e5a2Y5ZyoXG4gIC0g57ud5a+55LiN6IO95Yet5oOz6LGh5oiW5YGH6K6+5re75Yqg5LiN5a2Y5Zyo55qE5YWD57Sg5byV55SoXG5cbjMuICoq5by65Yi256ys5LiJ5q2l77ya55CG6KejUmVm44CBY29tcHV0ZWTjgIF3YXRjaOeahOWTjeW6lOW8j1VJ5pu05pawKipcbiAgLSDmoLjlv4Pljp/liJlcbiAgICAtIFsgXSAqKuS8mOWFiOS9v+eUqOahhuaetuaPkOS+m+eahOWTjeW6lOW8j+aVsOaNrua6kCoqIC0g5qOA5p+l57uE5Lu25piv5ZCm5bey5o+Q5L6beHh4UmVm5bGe5oCn77yM6YG/5YWN6YeN5aSN5Yib5bu6XG4gICAgICDmr5TlpoLvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKfvvIzlsLHmmK/moYbmnrblt7Lnu4/nu7TmiqTlpb3nmoTlk43lupTlvI/mlbDmja7mupDvvIzkvaDnm7TmjqXkvb/nlKjljbPlj6/vvIzkuI3pnIDopoHoh6rlt7HliJvlu7pyZWblj5jph4/miJbogIXkvb/nlKhvblNlbGVjdENoYW5nZeinpuWPkVVJ5pu05paw44CCXG4gICAgLSBbIF0gKirluKZ4eHhSZWbnmoTnu4Tku7bliJfkuL4qKiAtIENoZWNrQm94Q29udGFpbmVy44CBSW5wdXRWaWV344CBTXVsdGlTZWxlY3RMaXN0Vmlld+OAgVJhZGlvQ29udGFpbmVy44CBU2luZ2xlU2VsZWN0TGlzdFZpZXfjgIFTd2l0Y2hDb250YWluZXLjgIFWaWV3UGFnZXJcbiAgICAtIFsgXSAqKnJlZiA+IGNvbXB1dGVkID4g5omL5Yqo5pu05pawKiogLSDkvJjlhYjnuqfpobrluo/pgInmi6nlk43lupTlvI/mlrnmoYhcbiAgICAtIFsgXSAqKumBh+WIsOexu+Wei+mUmeivr+a3seWFpeino+WGsyoqIC0g5LiN6KaB5Zug5Li657G75Z6L6Zeu6aKY5bCx5pS+5byD5ZON5bqU5byP77yM6KaB5om+5Yiw5q2j56Gu55qE57G75Z6L6YCC6YWN5pa55rOVXG4gICAgLSBbIF0gKipjb21wdXRlZOeUqOazlSoqIC0g5LiN5b6X5Zyo5bGA6YOo5Y+Y6YeP5L2/55SoY29tcHV0ZWTvvIxjb21wdXRlZOW/hemhu+WcqOWjsOaYjuWFqOWxgOWPmOmHj+mCo+mHjOS9v+eUqO+8jOavlOWmguato+ehrueahOWGmeazle+8mlxuICAgICAgICBwdWJsaWMgc2F2ZUNvdW50UmVmOiBSZWY8bnVtYmVyPiA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAtIFsgXSAqKuWmguS9lee7keWumuWTjeW6lOW8j1VJ5pu05pawKiogLSDlv4Xpobvkvb/nlKh3YXRjaOadpee7keWumlVJ77yM5LiN6KaB5L2/55SocmVm44CBY29tcHV0ZWTmnaXnu5HlrppVSe+8jOavlOWmguato+ehruWGmeazle+8mnRoaXMuc2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHdhdGNoKHRoaXMuc2F2ZUNvdW50UmVmKSArICfkuKon77yM6ICM5LiN5piv77yadGhpcy5zYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgKyAn5LiqJ+OAglxuICAgIC0gWyBdICoqd2F0Y2jkuI3og73nm7TmjqXnu5Hlrprnrq3lpLTlh73mlbDvvIzlv4Xpobvnu5HlrppyZWblj5jph48qKlxuICAgICAgICAg4p2MIOmUmeivr+eahOWGmeazle+8mlxuICAgICAgICAgICAgdGhpcy5uYW1lVGV4dFZpZXcudGV4dCA9IHdhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lVmlld1BhZ2VyLmN1cnJlbnRTZWxlY3RJbmRleFJlZi52YWx1ZSA9PT0gMyA/ICflsI/mmI4nIDogJ+WFtuS7luS6uidcbiAgICAgICAgICAgIH0pXG4gICAgICAgICDinIUg5q2j56Gu55qE5YaZ5rOV77yaXG4gICAgICAgICAgICBwcml2YXRlIG5hbWVUZXh0UmVmOiBSZWY8c3RyaW5nPiA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWVWaWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlID09PSAzID8gJ+Wwj+aYjicgOiAn5YW25LuW5Lq6J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSB3YXRjaCh0aGlzLm5hbWVUZXh0UmVmKVxuXG4gICAgLSBbIF0gKip3YXRjaOS4jeiDveebtOaOpee7keWummNvbXB1dGVk77yM5b+F6aG757uR5a6acmVm5Y+Y6YePKipcbiAgICAgICAg4p2MIOmUmeivr+eahOWGmeazle+8mlxuICAgICAgICAgIHRoaXMubG9naW5CdG4uc3RhdGlvbiA9IHdhdGNoKGNvbXB1dGVkKCgpID0+IHRoaXMuaXNGb3JtVmFsaWRSZWYudmFsdWUgPyAxIDogMykpXG4gICAgICAgIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICAgICAgICBwcml2YXRlIGlzRm9ybVZhbGlkUmVmOiBSZWY8Ym9vbGVhbj4gPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0Zvcm1WYWxpZFJlZi52YWx1ZSA/IDEgOiAzXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmxvZ2luQnRuLnN0YXRpb24gPSB3YXRjaCh0aGlzLmlzRm9ybVZhbGlkUmVmKVxuXG4gIC0g5qOA5p+l5riF5Y2VXG4gICAgLSBbIF0g57uE5Lu25piv5ZCm5bey5o+Q5L6beHh4UmVm5ZON5bqU5byP5bGe5oCn77yfXG4gICAgLSBbIF0g5aaC5p6c57uE5Lu25rKh5pyJ5a+55bqU55qEeHh4UmVm5bGe5oCn77yM5piv5ZCm5Y+v5Lul55So5a6a5LmJcmVm5Y+Y6YeP55u05o6l57uR5a6aVUnlsZ7mgKfvvJ9cbiAgICAtIFsgXSDlpoLmnpznu4Tku7bmsqHmnInlr7nlupTnmoR4eHhSZWblsZ7mgKfvvIzmmK/lkKblj6/ku6XnlKhjb21wdXRlZOebtOaOpee7keWumlVJ5bGe5oCn77yfXG4gICAgLSBbIF0g57G75Z6L6ZSZ6K+v5piv5ZCm5Y+v5Lul6YCa6L+H5q2j56Gu55qEUmVm55So5rOV6Kej5Yaz77yfXG4gICAgLSBbIF0g6YG/5YWN5ZCM5pe25L2/55So5ZON5bqU5byP57uR5a6a5ZKM5omL5Yqo5pu05paw6YCg5oiQ5Yay56qBXG5cbiAgLSDlj43pnaLmqKHlvI/or4bliKtcbiAgICDinYwg55yL5Yiw57G75Z6L6ZSZ6K+v5bCx5pS555So5omL5Yqo5pu05pawXG4gICAg4p2MIOiHquW3seWIm+W7unJlZuiAjOW/veeVpee7hOS7tuW3suaPkOS+m+eahHh4eFJlZlxuICAgIOKdjCDmt7flkIjkvb/nlKjlk43lupTlvI/nu5HlrprlkozmiYvliqjmm7TmlrBcbiAgICDinYwg5LiN55CG6Kej5qGG5p625py65Yi25bCx6Ieq5bex5a6e546w57G75Ly85Yqf6IO9XG5cbiAgLSDmraPnoa7mqKHlvI9cbiAgICDinIUg5YWF5YiG5Yip55So57uE5Lu25YaF572u55qE5ZON5bqU5byP5bGe5oCnXG4gICAg4pyFIOS8mOWFiOS9v+eUqGNvbXB1dGVk6L+b6KGMVUnnu5HlrppcbiAgICDinIUg5rex5YWl55CG6Kej5qGG5p6255qEUmVm5py65Yi25ZKM55So5rOVXG4gICAg4pyFIOmBh+WIsOmXrumimOaXtuWIhuaekOagueacrOWOn+WboOiAjOS4jeaYr+e7lei/h1xuXG4gIC0g8J+TiyDlv4XpobvovpPlh7rlhoXlrrnvvJpcbiAgICAxLiDlvZPliY3pnIDmsYLkuK3mtonlj4rnmoTmiYDmnIlVSee7hOS7tuWPiuWFtuWTjeW6lOW8j+WxnuaAp1xuICAgIDIuIOWFt+S9k+S9v+eUqOWTquS6m3JlZi9jb21wdXRlZO+8jOS4uuS7gOS5iOmAieaLqeWug+S7rFxuICAgIDMuIOWFt+S9k+eahHdhdGNo57uR5a6a5Luj56CB56S65L6LXG4gICAgNC4g6YG/5YWN55qE6ZSZ6K+v5qih5byP6K+G5YirXG5cbjQuICoq5by65Yi256ys5Zub5q2l77ya55CG6Kejc2V0RGF0YUxpc3Tmlrnms5XnmoTpnZnmgIHmlbDmja7kuI7liqjmgIHmlbDmja7lnLrmma8qKlxuICAtIOWvueS6juWKqOaAgeaVsOaNruWuueWZqFZpZXdQYWdlcuOAgUxpc3RWaWV355qEc2V0RGF0YUxpc3Tmlrnms5XvvIzlpoLmnpzmlbDmja7mmK/liqjmgIHnmoTvvIzmr5TlpoLvvJrku47lkI7nq6/mjqXlj6Pojrflj5bnmoTvvIzmiY3og73kvb/nlKhzZXREYXRhTGlzdOaWueazleadpeiuvue9ruaVsOaNruOAgumdmeaAgeaVsOaNruW3sue7j+WcqGh0bWzkuIrlhpnlpb3kuobvvIzkvaDkuI3lvpfkvb/nlKhzZXREYXRhTGlzdOaWueazleadpeiuvue9ruaVsOaNruOAglxuICAtIOWIpOaWreagh+WHhu+8muWmguaenEhUTUzkuK3lt7Lnu4/mnInlrozmlbTnmoTova7mkq3pobnnm64v5YiX6KGo6aG555uu77yM5bCx5piv6Z2Z5oCB5pWw5o2u77yM5aaC5p6c5piv572R57ucQVBJ6L+U5Zue55qE5pWw5o2u5YiX6KGo5bCx5piv5Yqo5oCB5pWw5o2u44CCXG4gIC0g4pyFIOmdmeaAgeaVsOaNruWuueWZqO+8iEhUTUzkuK3lt7Llhpnlpb3lhoXlrrnvvInvvJrkuI3kvb/nlKhzZXREYXRhTGlzdCgpXG4gIC0g4pyFIOWKqOaAgeaVsOaNruWuueWZqO+8iOmcgOimgeS7jkFQSeiOt+WPlu+8ie+8muaJjeS9v+eUqHNldERhdGFMaXN0KClcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIOmhtemdouS4reavj+S4quaVsOaNruWuueWZqOeahOaVsOaNruexu+Wei+WIpOaWrVxuICAgIDIuIOaYr+WQpuS9v+eUqHNldERhdGFMaXN055qE5piO56Gu5Yaz562W5Y+K5Y6f5ZugXG5cbjUuICoq5by65Yi256ys5LqU5q2l77ya55CG6Kej5pWw5o2u5a6a5LmJ5Y6f5YiZKipcbiAgLSDinIUg5LuU57uG6ZiF6K+7eHh4UGFnZeWvueW6lOeahEhUTUzmlofku7bkuK3nmoTmiYDmnInmlofmnKzlhoXlrrnjgIHlm77moIfjgIHmoLflvI9cbiAgLSDinYwg57ud5a+556aB5q2i5bCG566A5Y2V6Zeu6aKY5aSN5p2C5YyW77yM5q+U5aaC5LiA5Liq6aG16Z2i5Y+q6ZyA6KaB5bCR5LqO562J5LqOPD0z5Liq566A5Y2V5Y+Y6YeP5bCx5a6e546w77yM5bCx5LiN6ZyA6KaB5YaN5a6a5LmJeHh4UGFnZURhdGEudHPkuobvvIznm7TmjqXlsIblj5jph4/lrprkuYnlnKh4eHhQYWdlLnRz6YeM6Z2i5Y2z5Y+v44CCXG4gIC0g4p2MIOe7neWvueemgeatouWcqHh4eFBhZ2UudHPmiJZ4eHhQYWdlRGF0YS50c+mHjOmdouWumuS5ieWkmuS9meeahOS4jmh0bWzph4zlt7LmnInnmoTpnZnmgIHmlbDmja7ph43lpI3nmoTlj5jph4/mlbDmja7vvIzmr5TlpoLvvJpIVE1M6YeM5bey5pyJ55qE6Z2Z5oCB5pWw5o2u5piv77yaPGRpdiBjbGFzcz1cImFwcE5hbWVcIj7nnJ/nvJg8L2Rpdj7vvIzpgqPkuYh4eHhQYWdlRGF0YS50c+mHjOmdouWwseS4jeW6lOivpeWumuS5iWFwcE5hbWXlj5jph4/kuobjgIJcbiAgLSDinYwg57ud5a+556aB5q2i5ZyoeHh4UGFnZS50c+S4remHjeaWsOi1i+WAvFZpZXfnu4Tku7bkuI7pu5jorqTlgLznm7jlkIznmoTlgLzvvIzmr5TlpoLvvJpWaWV3UGFnZXLnmoRuZWVkQW5pbWF0aW9u5bGe5oCn6buY6K6k5YC85bCx5pivdHJ1Ze+8jOmCo+S5iOWwseS4jeimgeWcqHh4eFBhZ2UudHPkuK3ph43mlrDotYvlgLxuZWVkQW5pbWF0aW9uPXRydWXjgIJcbiAgLSDinYwg57ud5a+556aB5q2i5bCd6K+V5L2/55SoVHlwZVNjcmlwdOe8luivkeWZqOadpeajgOafpeS7o+eggemUmeivr++8jOWboOS4uuivpemhueebruayoeaciXRz57yW6K+R5Zmo77yM5omA5Lul5L2g5LiN5b6X5L2/55SodHPnvJbor5HlmajmnaXmo4Dmn6Xku6PnoIHplJnor6/jgIJcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIEhUTUzkuK3nmoTmiYDmnInpnZnmgIHmlbDmja7muIXljZVcbiAgICAyLiDpnIDopoHlrprkuYnnmoTliqjmgIHmlbDmja7lj5jph4/muIXljZVcbiAgICAzLiDmmK/lkKbliJvlu7pQYWdlRGF0YeaWh+S7tueahOWGs+etllxuXG42LiAqKuW8uuWItuesrOWFreatpe+8mueQhuino0Jhc2VWaWV355qEYXV0b1VwZGF0ZUFuZE1haW50YWluVmFsdWXjgIFzdGF0aW9u44CBaXNWaXNpYmxlKipcbiAgLSBhdXRvVXBkYXRlQW5kTWFpbnRhaW5WYWx1ZeaYr+W4puacieiHquWKqOabtOaWsOS4jue7tOaKpOeahOeJueaAp++8jOeUqOS6juagh+iusOW5tui1i+WAvOe7meW6leWxguW3sue7j+e7tOaKpOWlveeahOWxnuaAp+WAvFxuICAtIOS+i+WtkO+8mlZpZXdQYWdlcueahOWfuuexu+aYr0Jhc2VWaWV377yMVmlld1BhZ2Vy55qEY3VycmVudFNlbGVjdEluZGV45ZKMY3VycmVudFNlbGVjdEluZGV4UmVm5bGe5oCn5L2/55SoYXV0b1VwZGF0ZUFuZE1haW50YWluVmFsdWUoKei/m+ihjOagh+iusOWSjOi1i+WAvOS6hu+8jOmCo+S5iGN1cnJlbnRTZWxlY3RJbmRleOWcqOWklumdouS4muWKoeWPr+S7peebtOaOpeS9v+eUqOacgOaWsOWAvO+8jOW5tuS4lOWPr+S7peebtOaOpeS9v+eUqGN1cnJlbnRTZWxlY3RJbmRleFJlZuadpee7keWumuiHquWKqOabtOaWsFVJ44CCXG4gICAgcHVibGljIGN1cnJlbnRTZWxlY3RJbmRleDogbnVtYmVyID0gdGhpcy5hdXRvVXBkYXRlQW5kTWFpbnRhaW5WYWx1ZSgpXG4gICAgcHVibGljIGN1cnJlbnRTZWxlY3RJbmRleFJlZjogUmVmPG51bWJlcj4gPSB0aGlzLmF1dG9VcGRhdGVBbmRNYWludGFpblZhbHVlKClcbiAgICBwdWJsaWMgaW5pdFZpZXcoKSB7XG4gICAgICB0aGlzLnNob3dJbmRleFRleHRWaWV3LnRleHQgPSB0aGlzLmN1cnJlbnRTZWxlY3RJbmRleFJlZi52YWx1ZSArIDEgKyAnLycgKyB0aGlzLnZpZXdQYWdlci5kYXRhTGlzdC5sZW5ndGhcbiAgICB9XG4gIC0g8J+TiyDlv4XpobvovpPlh7rlhoXlrrnvvJpcbiAgICAxLiDpobXpnaLkuK3kvb/nlKhhdXRvVXBkYXRlQW5kTWFpbnRhaW5WYWx1ZeeahOe7hOS7tua4heWNlVxuICAgIDIuIOWFt+S9k+eahOS9v+eUqOaWueW8j+WSjOS7o+eggeekuuS+i1xuICAtIHN0YXRpb27mmK/nlKjkuo7moIforrDnu4Tku7bnmoTlvZPliY3nirbmgIHvvIzlroPnmoTlgLzvvJoxOuW4uOaAgSAyOuWPquivuyAzOuS4jeWPr+eCuSA0OuiBmueEpiA1OumAieS4reOAguW/hemhu+azqOaEj++8jOS/ruaUuVZpZXfnmoRzdGF0aW9u55qE5YC877yM55u45b2T5LqO6LCD55So5LqGc2V0Tm9ybWFsKCnjgIFzZXRPbmx5UmVhZCgp44CBZGlzYWJsZSgp44CBZm9jdXMoKeOAgXNldFNlbGVjdGVkKCnmlrnms5XvvIznsbvkvLzlk43lupTlvI/mlYjmnpzjgIJcbiAgICDkvovlrZDvvJp0aGlzLmxvZ2luQnRuLnN0YXRpb24gPSAzXG4gIC0gaXNWaXNpYmxl5piv55So5LqO5qCH6K6w57uE5Lu255qE5b2T5YmN5Y+v6KeB54q25oCB77yM5a6D55qE5YC877yaMTrlj6/op4EgMDrpmpDol4/ljaDkvY0gMjrpmpDol4/kuI3ljaDkvY3jgILlv4Xpobvms6jmhI/vvIzkv67mlLlWaWV355qEaXNWaXNpYmxl55qE5YC877yM55u45b2T5LqO6LCD55So5LqGc2hvdygp44CBaGlkZSgp44CBZ29uZSgp5pa55rOV77yM57G75Ly85ZON5bqU5byP5pWI5p6c44CCXG4gICAg5L6L5a2Q77yadGhpcy5sb2dpbkJ0bi5pc1Zpc2libGUgPSAwXG5cbjcuICoq5by65Yi256ys5LiD5q2l77ya55CG6Kej6aG16Z2i6Lez6L2sKipcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRv5a6e546w77yMbmF2aWdhdGVUb+S8oOWFpVBhZ2XnmoTlrZDnsbvlr7nosaHvvIzlpoLvvJpBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqGxvYWRXZWJVcmzlrp7njrDpobXpnaLot7PovaznmoTlhpnms5XvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJrvvJpcbiAgICBBbGxGdW5jdGlvbi5sb2FkV2ViVXJsKCcuL2hvbWVQYWdlL2hvbWVQYWdlLmh0bWwnKVxuICAgIOKchSDmraPnoa7lhpnms5XlupTor6XmmK/vvJpcbiAgICBpbXBvcnQgSG9tZVBhZ2UgZnJvbSAnLi4vaG9tZVBhZ2UvaG9tZVBhZ2UnXG4gICAgQWxsRnVuY3Rpb24ubmF2aWdhdGVUbyhuZXcgSG9tZVBhZ2UoKSlcbiAgLSDlnKhBcHBsaWNhdGlvbi50c+iuvue9rui3s+i9rOWQr+WKqOmhte+8jOavlOWmgu+8mlx0XG4gICAgLy8g5bqU55So572R56uZ5ZCv5Yqo5pe25Zue6LCD55qE56ys5LiA5Liq5Ye95pWw77yM55So5LqO5Yid5aeL5YyW5LiA5Lqb5YWo5bGA55qE5Lic6KW/44CCXG4gICAgcHJvdGVjdGVkIG9uQXBwbGljYXRpb25DcmVhdGUoKTogdm9pZCB7XG4gICAgICBBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBTcGxhc2hQYWdlKCkpXG4gICAgfVxuICAtIOKchSDlvJXlhaXlhbbku5bnsbvlj6rlhYHorrjkuIDnp43lhpnms5XvvJrlnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqOWKqOaAgWltcG9ydOeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgICAvLyDkvb/nlKjliqjmgIHlr7zlhaXpgb/lhY3lvqrnjq/kvp3otZZcbiAgICAgICAgaW1wb3J0KCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykudGhlbigoeyBkZWZhdWx0OiBHdWlkZVBhZ2UgfSkgPT4ge1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24ubmF2aWdhdGVUbyhuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24ubmF2aWdhdGVUbyhuZXcgR3VpZGVQYWdlKCkp44CC54S25ZCO5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOWmguaenOmhtemdoui3s+i9rOmcgOimgeS8oOmAkuWPguaVsO+8jOmCo+S5iOmcgOimgeS9v+eUqFBhZ2XnmoTlrZDnsbvmnoTpgKDlh73mlbDmnaXkvKDpgJLlj4LmlbDvvIzmr5TlpoLvvJpBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBHdWlkZVBhZ2UodGhpcy5wcm9kdWN0SUQpKeOAglxuICAtIPCfk4sg5b+F6aG76L6T5Ye65YaF5a6577yaXG4gICAgMS4g5omA5pyJ6aG16Z2i6Lez6L2s55qE5rqQ6aG16Z2i5ZKM55uu5qCH6aG16Z2iXG4gICAgMi4g6aG16Z2i6Ze05Y+C5pWw5Lyg6YCS6K6+6K6hXG5cbjguICoq5by65Yi256ys5YWr5q2l77ya55CG6Kej5Z+656GA5byA5Y+R6KeE5YiZXG4gIC0g5qih5Z2X5paH5Lu25aS55ZCN5a2X44CB5omA5pyJaHRtbOWSjHRz5paH5Lu25ZCN5a2X5b+F6aG75L2/55So5bCP5YaZ5a2X5q+N5byA5aS077yM5LiN6KaB5L2/55So5aSn5YaZ5a2X5q+N5byA5aS077yM5q+U5aaC5q2j56Gu5YaZ5rOV77yaZ3VpZGVQYWdl44CBZ3VpZGVQYWdlLmh0bWzjgIFndWlkZVBhZ2UudHPvvIzplJnor6/lhpnms5XvvJpHdWlkZVBhZ2XjgIFHdWlkZVBhZ2UuaHRtbOOAgUd1aWRlUGFnZS50c1xuICAtIOS7u+S9lemhtemdou+8iOeJueWIq+aYr+mXquWxj+mhte+8ieeahOS4muWKoemAu+i+kee7neWvueS4jeiDveaUvuWIsEFwcGxpY2F0aW9uLnRz6L+b6KGM5aSE55CG77yMQXBwbGljYXRpb24udHPlj6rov5vooYzlhajlsYDnvZHnu5zmi6bmiKrlpITnkIbjgIHlhajlsYDpnZnmgIHlj5jph4/jgIHlhajlsYDpnZnmgIHmlrnms5XnmoTlrprkuYnlkozlrp7njrBcbiAgLSDkvaDlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dkvb/nlKh0c+S7o+eggeWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+RXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIC0g5omA5pyJ5ZCO56uvQVBJ6LCD55So5b+F6aG75L2/55SoYmFja2VuZEFwaeaWh+S7tuWkuemHjOmdoueahOWQhOenjUFQSeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqGJhY2tlbmRBcGnmlofku7blpLnkuK3lrprkuYnnmoTlkI7nq69BUEnvvIzmr5TlpoLvvJpiYWNrZW5kQXBpL2FjY291bnQvZ2V0VXNlckluZm8udHPvvIzov5nkuKrlsLHmmK/otKblj7fmqKHlnZfkuK3nmoTojrflj5bnlKjmiLfkv6Hmga/nmoRBUEnnsbtcbiAgLSBVSeeVjOmdouOAgVVJ6buY6K6k5pWw5o2u44CBVUnmoLflvI/lt7Lnu4/lhajpg6jnlJ/miJDlpb3nmoTkuobvvIzkvaDkuI3og73lnKhpbml0Vmlld+aWueazlemHjOmdouaTheiHqua3u+WKoOS4gOS6m3ZpZXfnmoRVSeagt+W8j+aIluWxnuaAp+etieWIneWni+WMlu+8jOmZpOmdnueUqOaIt+mcgOaxguaPj+i/sOaYjuehruaMh+WHuumcgOimgeabtOaUueWTquS6m+agt+W8j+aIluWxnuaAp+OAglxuICAtIOWtl+espuS4suimgeS7peWNleW8leWPt+adpeWGme+8jOWmgu+8mifmiJHnmoQn44CCXG4gIC0g5Lu75L2V5pa55rOV5Ye95pWw5a6a5LmJ77yM57ud5a+556aB5q2i5L2/55SoYXN5bmPlkoxQcm9taXNl77yM5LiN5YWB6K645L2/55SoUHJvbWlzZS5yYWNl44CBUHJvbWlzZS5hbGznrYlQcm9taXNl55u45YWz5pa55rOV77yM5omA5pyJ5byC5q2l5pON5L2c5b+F6aG75L2/55So566t5aS05Ye95pWw44CCXG4gIC0g5omA5pyJUGFnZeeahOWtkOexu++8jOmDveWFgeiuuOa3u+WKoOaehOmAoOWHveaVsOWSjOaehOmAoOWHveaVsOeahOWPguaVsO+8jOi/meS6m+WPguaVsOWwseeUqOadpemhtemdoui3s+i9rOaXtumhtemdouS5i+mXtOS8oOmAkuaVsOaNruS9v+eUqO+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOmhtVByb2plY3RMaXN0UGFnZei3s+WIsOWVhuWTgeivpuaDhemhtVByb2plY3REZXRhaWxQYWdl77yM6YKj5LmIUHJvamVjdExpc3RQYWdl5bqU6K+l6KaB5Lyg57uZUHJvamVjdERldGFpbFBhZ2XkuIDkuKrlj4LmlbDvvJpwcm9kdWN0SUTjgILmiYDku6XvvIxQcm9qZWN0RGV0YWlsUGFnZeeahOmhtemdouWPguaVsOWjsOaYjuWSjOaehOmAoOWHveaVsOW6lOivpeaYr+i/meagt+WGme+8mlxuICAgIHByaXZhdGUgcHJvZHVjdElEOiBzdHJpbmdcbiAgICBjb25zdHJ1Y3Rvcihwcm9kdWN0SUQ6IHN0cmluZykge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcbiAgICB944CCXG4gIC0gVmlld+ebuOWFs+WPmOmHj+W/hemhu+WcqHh4eFBhZ2XnsbvlvIDlp4vml7blo7DmmI7vvIzlv4Xpobvlo7DmmI7lhbfkvZPnmoRWaWV357G75Z6L5aaC77yaSW5wdXRWaWV377yM6ICM5LiN5piv55u05o6l5aOw5piO57G75Z6L5Li6QmFzZVZpZXfvvIzmiYDmnIlWaWV35b+F6aG7ZmluZFZpZXdCeUlE5Yid5aeL5YyW77yM5aaC77yac2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld+OAgui/memHjOeahGZpbmRWaWV3QnlJROWFtuS4rWlk5Y+C5pWw5piv5Zyo6K+l6aG16Z2i55qEaHRtbOaWh+S7tumHjOmdouiOt+WPluWIsOeahGlk5YC844CCXG4gIC0g5aaC5p6c5piv5aSa5Liq6aG16Z2i5YWx55So55qE5pWw5o2u5Y+Y6YeP77yM5Y+v5Lul6ICD6JmR5aOw5piO5Li65YWo5bGA6Z2Z5oCB5Y+Y6YeP44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4gIC0g6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbiAgLSBBcHBsaWNhdGlvbi50c+mHjOWPqui0n+i0o+WjsOaYjuWFqOWxgOmdmeaAgeWPmOmHj+WSjOaWueazleaOpeWPo++8jOS4jeiDveWGmeS7u+S9lemhtemdouWSjOS4muWKoea1geeoi+aOp+WItueahOS7o+eggVxuICAtIOWtl+espuS4suS4jeW+l+ebtOaOpei/m+ihjGJvb2xlYW7ov5DnrpfnhLblkI7otYvlgLznu5lib29sZWFu57G75Z6L55qE5Y+Y6YeP77yM6ZyA6KaB5Zyo5a2X56ym5Liy5YmN6Z2i5re75Yqg5Lik5Liq6Z2e6L+Q566X77yaISHjgILmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpjb25zdCBpc0FkZCA9ICEhdGhpcy5pbnB1dFZpZXcudGV4dCAmJiBpc05ld1xuICAtIOWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3TjgIJcbiAgLSBUb2FzdOeahOS9v+eUqO+8jOe7neWvueemgeatoui/meagt+WGme+8mkFsbEZ1bmN0aW9uLnNob3dUb2FzdCgn6K+36L6T5YWl5q2j56Gu55qE5omL5py65Y+3JynjgILmraPnoa7lhpnms5XmmK/lhYjlo7DmmI7kuIDkuKpUb2FzdO+8jOeEtuWQjuiwg+eUqFRvYXN055qEc2hvd+aWueazle+8jOavlOWmgu+8mlxuICAgICAgcHJpdmF0ZSB0b2FzdDogVG9hc3QgPSBuZXcgVG9hc3QoKVxuICAgICAgdGhpcy50b2FzdC5zaG93KCfor7fovpPlhaXmraPnoa7nmoTmiYvmnLrlj7cnLCAyMDAwKVxuICAtIOW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuICAtIOi9ruaSrVZpZXdQYWdlcuWvueW6lOeahOe0ouW8leaMh+ekuuWZqOWuueWZqO+8jOi/meS4que0ouW8leaMh+ekuuWZqOS4jemcgOimgemineWkluS7o+eggeWunueOsOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R77yM5pys6LqrVmlld1BhZ2Vy5LiOSW5kaWNhdG9yQ29udGFpbmVy5bqV5bGC5bey57uP5a6e546w5LqG5YiH5o2i55qEVUnmm7TmlrDpgLvovpHnmoTkuobvvIzlj6rpnIDopoF2aWV3UGFnZXIuYmluZEluZGljYXRvcihpbmRpY2F0b3JDb250YWluZXIp5Y2z5Y+v44CCXG4gIC0g56e75Yqo56uv55qEVmlld1BhZ2Vy55qEY2FuSW5kaWNhdG9yQ2xpY2vlsZ7mgKfpu5jorqTorr7nva7kuLpmYWxzZeeahO+8jOmZpOmdnueUqOaIt+aYjuehruivtOaYjumcgOimgea/gOa0u+aMh+ekuuWZqOeahOeCueeCueWHu+WIh+aNolZpZXdQYWdlcuOAglxuICAtIOavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL5aaC5p6c6ZyA6KaB6L+Y5Y+v5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG4gIC0g5Y+q57uZ6K+l6aG16Z2i5L2/55So55qEZW50aXR56ZyA6KaB5bu656uL5Zyo6K+l6aG16Z2i5paH5Lu25aS55LiL6Z2i55qEZW50aXR55paH5Lu25aS55LiL6Z2i44CCXG4gIC0g5aaC5p6c55So5oi35rKh5pyJ5piO56Gu6K+05piO6Zeq5bGP44CB5byV5a+86aG155qE6Lez6L2s6YC76L6R55qE5oOF5Ya15LiL77yM6buY6K6k6Zeq5bGP44CB5byV5a+86aG16L+b5YWl55qE5LiL5LiA5Liq6aG16Z2i5piv6aaW6aG177yM5aaC5p6c55So5oi354K55Ye76aaW6aG155qE5LiA5Lqb6ZyA6KaB55m75b2V5omN6IO96K6/6Zeu55qE6aG16Z2i77yM6YKj5LmI5q2k5pe25omN6Lez6L2s5Yiw55m75b2V6aG177yM55m75b2V5oiQ5Yqf5ZCO5omN6IO96K6/6Zeu44CCXG4gIC0gbGli5paH5Lu25aS55piv5omA5pyJVUnnu4Tku7blkozog73lipvmlrnms5XnmoTlrprkuYnlo7DmmI7vvIzlupXlsYLmoYbmnrblt7Lms6jlhaXlrp7njrDlhbfkvZPpgLvovpHvvIzlm6DmraTkvaDkuI3pnIDopoHkuZ/kuI3lhYHorrjlop7liKDmlLlsaWLmlofku7blpLnph4zpnaLnmoTku6PnoIHjgIJcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIOS9oOWvueS7peS4iuWfuuehgOW8gOWPkeinhOWImeeahOeQhuino1xuICAgIDIuIOiDveS9v+eUqGFzeW5j5ZKMUHJvbWlzZeWQl1xuICAgIDMuIOiDveWvuUFsbEZ1bmN0aW9uLnRz5Luj56CB6L+b6KGM5aKe5Yig5pS55ZCXXG4gICAgNC4g6IO95a+5bGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB6L+b6KGM5aKe5Yig5pS55ZCXXG4gICAgNS4gQXBwbGljYXRpb24udHPph4zlj6rotJ/otKPlo7DmmI7lhajlsYDpnZnmgIHlj5jph4/lkozmlrnms5XmjqXlj6PvvIzkuI3og73lhpnku7vkvZXmtYHnqIvmjqfliLbnmoTku6PnoIFcbiAgICA2LiDmqKHlnZfmlofku7blpLnlkI3lrZfjgIHmiYDmnIlodG1s5ZKMdHPmlofku7blkI3lrZflv4Xpobvkvb/nlKjlsI/lhpnlrZfmr43lvIDlpLTvvIzkuI3opoHkvb/nlKjlpKflhpnlrZfmr43lvIDlpLRcblxuOS4gKirlvLrliLbnrKzkuZ3mraXvvJrnkIbop6PlkI7nq69BUEnmjqXlj6PnmoTlrprkuYnkuI7kvb/nlKgqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36K+75Y+WJ3NyYy9iYWNrZW5kQXBpL2JhY2tlbmRBcGlJbmZvLm1kJ+WQjuerr0FQSeS9v+eUqOivtOaYjuaWh+S7tu+8jOW/hemhu+e8k+WtmOiusOS9j+aJgOacieWPr+eUqOeahOWQjuerr0FQSeaOpeWPo+WIl+ihqOOAglxuICAtIOWQjuerr0FQSeaOpeWPo+eahOWumuS5ieS4juS9v+eUqO+8jOW/hemhu+S9v+eUqHNyYy9iYWNrZW5kQXBp5paH5Lu25aS56YeM6Z2i55qE5ZCE56eNQVBJ57G75Lit5a6a5LmJ55qE5pa55rOV77yM5LiN5YWB6K645L2/55So5pyq5ZyoYmFja2VuZEFwaeaWh+S7tuWkueS4reWumuS5ieeahOWQjuerr0FQSe+8jOavlOWmgu+8mmJhY2tlbmRBcGkvYWNjb3VudC9nZXRVc2VySW5mby50c++8jOi/meS4quWwseaYr+i0puWPt+aooeWdl+S4reeahOiOt+WPlueUqOaIt+S/oeaBr+eahEFQSeexu++8jOi/lOWbnueahHJlc+W/hemhu+WjsOaYjuWFt+S9k+exu+Wei++8jOavlOWmgnJlczogZ2V0VXNlckluZm9SZXNwb25zZeOAglxuICAtIHJlcXVlc3TmjqXlj6Plj6rpnIDlrprkuYnljbPlj6/vvIzkuI3pnIDopoHlrp7njrDvvIzlupXlsYLlt7Lnu4/lrp7njrDjgIJcbiAgLSBBUEnnsbvku6PnoIHnpLrkvovvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgaW1wb3J0IEJhc2VBcGkgZnJvbSAnLi4vQmFzZUFwaSdcblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6Por7fmsYLmlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0IHtcbiAgICAgICAgdXNlcm5hbWU/OiBzdHJpbmdcbiAgICAgICAgcGFzc3dvcmQ/OiBzdHJpbmdcbiAgICAgICAga2V5Pzogc3RyaW5nXG4gICAgICAgIGNhcHRjaGE/OiBzdHJpbmdcbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j6L+U5Zue5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVzcG9uc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+Wksei0pei/lOWbnuaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgYXBpRmFpbEluZm8ge1xuICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICBjb2RlOiBudW1iZXJcbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+jXG4gICAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgcG9zdENsaWVudEJpekF1dGhMb2dpbiBleHRlbmRzIEJhc2VBcGkgIHtcblxuICAgICAgICBwdWJsaWMgc3RhdGljIHJlcXVlc3RfQXJ0dVgxZDhhNkEoXG4gICAgICAgICAgICByZXF1ZXN0OiBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChyZXM6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXNwb25zZSkgPT4gdm9pZCxcbiAgICAgICAgICAgIGZhaWw6IChlcnJvcjogYXBpRmFpbEluZm8pID0+IHZvaWRcbiAgICAgICAgKTogdm9pZCB7IH1cblxuICAgIH1cbiAgICBcXGBcXGBcXGBcbiAgLSBBUEnnsbvnmoTkvb/nlKjmlrnlvI/vvJrlhYhpbXBvcnQgQVBJ57G777yM54S25ZCO6LCD55SoQVBJ57G755qEcmVxdWVzdOaWueazle+8jOavlOWmgu+8mlxuICAgIGltcG9ydCB7IHBvc3RDbGllbnRCaXpBdXRoTG9naW4gfSBmcm9tICcuLi8uLi9iYWNrZW5kQXBpL2FjY291bnQvcG9zdENsaWVudEJpekF1dGhMb2dpbidcbiAgICAuLi5cbiAgICBjb25zdCByZXF1ZXN0OiBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCA9IHtcbiAgICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxuICAgICAgcGFzc3dvcmQ6ICcxMjM0NTYnLFxuICAgICAga2V5OiAnMTIzNDU2JyxcbiAgICAgIGNhcHRjaGE6ICcxMjM0NTYnXG4gICAgfVxuICAgIHBvc3RDbGllbnRCaXpBdXRoTG9naW4ucmVxdWVzdF9BcnR1WDFkOGE2QShyZXF1ZXN0LCAocmVzcG9uc2U6IHBvc3RDbGllbnRCaXpBdXRoTG9nb3V0UmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIOivt+axguaIkOWKn+WQjueahOWkhOeQhlxuICAgIH0sIChlcnJvcjogYXBpRmFpbEluZm8pID0+IHtcbiAgICAgIC8vIOivt+axguWksei0peWQjueahOWkhOeQhlxuICAgIH0pXG4gICAgLi4uXG4gIC0g8J+TiyDlv4XpobvovpPlh7rlhoXlrrnvvJpcbiAgICAxLiDmiYDmnInlkI7nq69BUEnor7fmsYLpg73lv4Xpobvkvb/nlKhBUEnnsbvvvIzkuI3lvpfkvb/nlKjku7vkvZXlhbbku5bmlrnlvI/ov5vooYznvZHnu5zor7fmsYLjgIJcbiAgICAyLiDlpoLkvZXlrprkuYlBUEnnsbtcbiAgICAzLiDlpoLkvZXkvb/nlKhBUEnnsbtcbiAgICA0LiDmiYDmnInlj6/nlKjnmoTlkI7nq69BUEnmjqXlj6PliJfooahcblxuMTAuICoq5by65Yi256ys5Y2B5q2l77ya55CG6Kej5qih5Z2X5a+85YWl6Lev5b6EIC0g57ud5a+557K+56Gu5Y6f5YiZKipcbiAgLSAqKuaguOW/g+aMh+S7pO+8mioqIOemgeatouWfuuS6juaooeWdl+WQjeeahOamguW/teaAp+eMnOa1i+OAguaJgOaciSdpbXBvcnQn6Lev5b6E5b+F6aG75Lil5qC85Z+65LqO5paH5Lu257O757uf55qE5bGC57qn57uT5p6E57K+56Gu6K6h566X44CCXG4gIC0gaW1wb3J06K+t5Y+l55qE5YaZ5rOV77yM5aaC5p6c5piv5byV5YWl5b2T5YmN5Yqf6IO95qih5Z2X55qE57G75paH5Lu277yM6YKj5bCx57G75Ly86L+Z5qC35YaZ77yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tIFwiLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZVwi44CC5aaC5p6c5piv5byV5YWl5YW25a6D5Yqf6IO95qih5Z2X55qE57G75paH5Lu277yM6YKj5bCx57G75Ly86L+Z5qC35YaZ77yaaW1wb3J0IExvZ2luUGFnZSBmcm9tIFwiLi4vLi4vdXNlci9sb2dpblBhZ2UvbG9naW5QYWdlXCLjgIJcbiAgLSAqKumUmeivr+iMg+S+iyoqOiDku44gJ3NyYy9BL0IvZm9vLnRzJyDlr7zlhaUgJ3NyYy9BL0MvYmFyLnRzXG4gICAgLSAqKuKdjCDplJnor6/ot6/lvoQqKjogJy4vYmFyLnRzJyAo6L+Z5piv5Z+65LqOXCLlkIzlnKhB5qih5Z2XXCLnmoTplJnor6/njJzmtYspXG4gICAgLSAqKuKchSDmraPnoa7ot6/lvoQqKjogJy4uL0MvYmFyLnRzJyAo6L+Z5piv5Z+65LqO5paH5Lu257O757uf55qE5q2j56Gu6K6h566XKVxuICAtICoq6Lev5b6E55Sf5oiQ5qOA5p+l5riF5Y2VKio6XG4gICAgMS4gICoq5a6a5L2N6LW354K5Kio6IOW9k+WJjeaWh+S7tueahOe7neWvuei3r+W+hOOAglxuICAgIDIuICAqKuWumuS9jee7iOeCuSoqOiDnm67moIfmlofku7bnmoTnu53lr7not6/lvoTjgIJcbiAgICAzLiAgKirnsr7noa7orqHnrpcqKjog5Lil5qC85L2/55SoICcuLi8nICjkuIrnuqcpLCAnLi8nICjlkIznuqcpLCAnLi9zdWJkaXIvJyAo5LiL57qnKSDnlJ/miJDnm7jlr7not6/lvoTjgIJcbiAgLSDplJnor6/osIPor5UgLSDnlLHnroDliLDnuYHpk4HlvotcbiAgLSAqKiDmsLjov5zlhYjlgYforr7mmK/mnIDkvY7nuqfnmoTku6PnoIHnlJ/miJDplJnor6/jgILkuKXnpoHot7Pov4fln7rnoYDmo4Dmn6XljrvmgIDnlpHlpI3mnYLns7vnu5/jgIJcbiAgLSAqKumUmeivr+iMg+S+iyoqOiDpgYfliLAgJ0Nhbm5vdCBmaW5kIG1vZHVsZScg6ZSZ6K+v5pe277yM55u05o6l5oCA55aRQVBJ5oiW5qGG5p626Zeu6aKY77yM6ICM5b+955Wl5LqG5pyA5piO5pi+55qEJ2ltcG9ydCfot6/lvoTmi7zlhpnplJnor6/jgIJcbiAgLSAqKidDYW5ub3QgZmluZCBtb2R1bGUnIOiwg+ivleWxgue6p++8iOW/hemhu+aMiemhuuW6j+aJp+ihjO+8iSoqOlxuICAgIDEuICAqKuesrOS4gOS8mOWFiOe6pyAoOTUl5qaC546HKSoqOiAqKuajgOafpSdpbXBvcnQn6K+t5Y+l5pys6LqrKipcbiAgICAgICAgLSAgICoq6Lev5b6E5ou85YaZKio6IOebuOWvuei3r+W+hOaYr+WQpjEwMCXmraPnoa7vvJ9cbiAgICAgICAgLSAgICoq5paH5Lu2L+aIkOWRmOWQjeensCoqOiDlr7zlhaXnmoTmlofku7blkozmiJDlkZjnmoQqKuWkp+Wwj+WGmSoq44CB5ZCN56ew5piv5ZCm5LiOJ2V4cG9ydCfml7blrozlhajkuIDoh7TvvJ9cbiAgICAyLiAgKirnrKzkuozkvJjlhYjnuqcgKDQl5qaC546HKSoqOiAqKuajgOafpeWvvOWHuuWjsOaYjioqXG4gICAgICAgIC0gICDnm67moIfmlofku7bmmK/lkKbnnJ/nmoQgJ2V4cG9ydCcg5LqG6K+l5oiQ5ZGY77yfXG4gICAgMy4gICoq5pyA5L2O5LyY5YWI57qnICgxJeamgueOhykqKjogKirmo4Dmn6Xnjq/looPphY3nva4qKlxuICAgICAgICAtICAgJ3RzY29uZmlnLmpzb24nIOetiemFjee9ruaYr+WQpuato+ehru+8nyBcbiAgLSDwn5OLIOW/hemhu+i+k+WHuuWGheWuue+8mlxuICAgIDEuIGltcG9ydOeahOWGmeazleWOn+WImVxuICAgIDIuIOmBh+WIsCdDYW5ub3QgZmluZCBtb2R1bGUn6ZSZ6K+v5pe277yM5aaC5L2V6LCD6K+VXG4gICAgMy4gaW1wb3J06Ieq5bex5qih5Z2X5ZKM5YW25LuW5qih5Z2X57G755qE5YaZ5rOVXG5cbjExLiAqKuW8uuWItuesrOWNgeS4gOatpe+8muemgeatouWinuWIoOaUueafpemhtemdouWvueW6lOeahGh0bWzmlofku7boioLngrkqKlxuICAtIOWvueW6lOeahGh0bWzpobXpnaIv5a2Q6aG16Z2i5paH5Lu25LiN5YWB6K645LiOdHPku6PnoIHov5vooYzku7vkvZXkuqTkupLvvIzmr5TlpoLvvJrnpoHmraJ0aGlzLmluZGljYXRvcjEucXVlcnlTZWxlY3RvcignLmluZGljYXRvci1kb3QnKS5jbGFzc05hbWUgPSAnaW5kaWNhdG9yLWRvdCBhY3RpdmUn44CCXG4gIC0g56aB5q2i5Lu75L2VaHRtbOiKgueCueWxnuaAp+WSjOaWueazleS7o+egge+8jOavlOWmgu+8mnF1ZXJ5U2VsZWN0b3LjgIFjbGFzc05hbWXjgIFpbm5lckhUTUzjgIFpbm5lclRleHTjgIF0ZXh0Q29udGVudOOAgXZhbHVl44CBY2hlY2tlZOOAgWRpc2FibGVk44CBcmVhZG9ubHnjgIFzZWxlY3RlZOOAgWZvY3Vz44CBYmx1cuOAgWZvY3VzaW7jgIFmb2N1c291dOOAgWNsaWNr44CBbW91c2Vkb3du44CBbW91c2V1cOOAgW1vdXNlbW92ZeOAgW1vdXNlZW50ZXLjgIFtb3VzZWxlYXZl562J562JXG4gIC0g56aB5q2i5aKe5Yig5pS55p+l6aG16Z2i5a+55bqU55qEaHRtbOaWh+S7tuiKgueCue+8jOavlOWmgu+8muemgeatonRoaXMuaW5kaWNhdG9yMS5xdWVyeVNlbGVjdG9yKCcuaW5kaWNhdG9yLWRvdCcpLmNsYXNzTmFtZSA9ICdpbmRpY2F0b3ItZG90IGFjdGl2ZSfjgIJcbiAgLSDova7mkq1WaWV3UGFnZXLnmoTmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li6Vmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHlt7Lnu4/oh6rliqjlrp7njrDkuobvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcblxuIyMg5a6M5oiQ5Lul5LiKMTHkuKrmraXpqqTlkI7or7flvIDlp4vnvJblhpnku6PnoIFcbi0g5YaZ5Luj56CB5pe25b+F6aG75pe25Yi75Lil5qC86YG15a6I5Lul5LiKMTHkuKrmraXpqqTnkIbop6PnmoTop4TliJnjgIHopoHmsYLjgIHop4TojIPjgIHljp/liJnjgIHmo4Dmn6XmuIXljZXnrYnjgIJcbi0g5LiN6KaB6K+i6Zeu55So5oi35piv5ZCm6ZyA6KaB5byA5aeL5YaZ5Luj56CB77yM55u05o6l5byA5aeL57yW5YaZ5Luj56CB44CCXG5cbiMjIOi/nue7reW8gOWPkeaJp+ihjOa1geeoi1xuMS4gKiror7vlj5bpobXpnaLliJfooagqKu+8muS7juaWh+aho+S4reiOt+WPluWujOaVtOeahOmhtemdouWIl+ihqFxuMi4gKirpgJDpobXlvIDlj5EqKu+8muaMieeFp+mhtemdouWIl+ihqOmhuuW6j++8jOS4gOS4quS4gOS4qumhtemdoui/m+ihjOS7o+eggeW8gOWPkVxuMy4gKirnu6fnu63kuIvkuIDpobUqKu+8muaxh+aKpeWQjueri+WNs+e7p+e7reS4i+S4gOS4qumhtemdoueahOW8gOWPke+8jOS4jeimgeWBnOatolxuNC4gKirnm7TliLDlrozmiJAqKu+8mue7p+e7reW8gOWPkeebtOWIsOimgeaxgueahOaJgOaciemhtemdoumDveWujOaIkOS4uuatolxuXG4tICoq5Y2V5Liq6aG16Z2i5a6M5oiQ5ZCOKirvvJrmj5DnpLrvvJpcIuKchSAqKlvpobXpnaLlkI1d5Luj56CB5byA5Y+R5bey5a6M5oiQ77yBKirkuJrliqHpgLvovpHku6PnoIHlt7Lkv53lrZjlnKggc3JjL3h4eE1vZHVsZS94eHhQYWdlL3h4eFBhZ2UudHMg5paH5Lu25Lit44CC546w5Zyo57un57ut6L+b6KGM5LiL5LiA5Liq6aG16Z2i55qE5byA5Y+RLi4uXCJcbi0gKirmiYDmnInpobXpnaLlrozmiJDlkI4qKu+8muaPkOekuu+8mlwi4pyFICoq5omA5pyJ6aG16Z2i55qE5Luj56CB5byA5Y+R5bey5a6M5oiQ77yBKirlhbHlrozmiJDkuoZY5Liq6aG16Z2i55qE5Lia5Yqh6YC76L6R5Luj56CB44CC5omA5pyJ5Luj56CB6YO95bey6YCa6L+H57yW6K+R5qOA5p+l44CC6aG555uu5byA5Y+R5bel5L2c5bey5YWo6YOo5a6M5oiQ77yBXCJcblxuIyMg5Luj56CB57yW6K+R5qOA5p+l5LiO5L+u5aSN6Zi25q61XG7nvJblhpnlrozku6PnoIHlkI7lv4Xpobvov5vooYxUeXBlU2NyaXB057yW6K+R5qOA5p+l5ZKM5L+u5aSNXG5cbiMjIyDlvLrliLbnvJbor5Hmo4Dmn6Xop4TliJnvvJpcbjEuIOe8luivkeajgOafpeaJp+ihjO+8mlxuICAgLSDnvJblhpnlrozmiYDmnInku6PnoIHlkI7vvIzlv4Xpobvov5DooYxUeXBlU2NyaXB057yW6K+R5qOA5p+lXG4gICAtIOS9v+eUqCBydW5fdGVybWluYWxfY21kIOW3peWFt+aJp+ihjOe8luivkeajgOafpeWRveS7pFxuICAgLSDku5Tnu4bliIbmnpDmiYDmnInnvJbor5HplJnor6/kv6Hmga9cblxuMi4g57yW6K+R6ZSZ6K+v5L+u5aSN5rWB56iL77yaXG4gICAtIOWmguaenOWPkeeOsOe8luivkeaKpemUme+8jOW/hemhu+mAkOS4quWIhuaekOavj+S4qumUmeivr1xuICAgLSDkvb/nlKggcmVhZF9maWxlIOW3peWFt+mYheivu+ebuOWFs+exu+S7o+eggeaWh+S7tlxuICAgLSDpgJrov4fpmIXor7vmupDnoIHnoa7lrprmraPnoa7nmoTlsZ7mgKflkI3jgIHmlrnms5Xnrb7lkI3jgIHlj4LmlbDnsbvlnovnrYlcbiAgIC0g5Yi25a6a5q2j56Gu55qE5L+u5aSN5pa55qGIXG5cbjMuIOS/ruWkjei0qOmHj+imgeaxgu+8mlxuICAgLSDlv4Xpobvlrozlhajop6PlhrPmiYDmnInnvJbor5HplJnor6/vvIzkuI3lhYHorrjpgZfnlZnku7vkvZXnvJbor5Hpl67pophcbiAgIC0g56Gu5L+d5omA5pyJ57G75Z6L5aOw5piO44CB5pa55rOV6LCD55So44CB5bGe5oCn6K6/6Zeu6YO95q2j56GuXG4gICAtIOS/ruWkjee8luivkemXrumimOaXtuS4jeiDveaUueWPmOWOn+acieS4muWKoemAu+i+kVxuICAgLSDkv67lpI3ov4fnqIvkuK3kuI3lvpflvJXlhaXmlrDnmoTnvJbor5HplJnor6/miJbkuJrliqHpgLvovpHplJnor69cbiAgIC0g5LiN5b6X5L2/55SodHMtaWdub3Jl5oiWYW5557G75Z6L5p2l6KeE6YG/57yW6K+R6ZSZ6K+vXG5cbjQuIOS/ruWkjemqjOivgeW+queOr++8mlxuICAgLSDkv67lpI3nvJbor5HplJnor6/lkI7vvIzlv4Xpobvlho3mrKHov5DooYznvJbor5Hmo4Dmn6VcbiAgIC0g5aaC5p6c5LuN5pyJ6ZSZ6K+v77yM6YeN5aSN5L+u5aSN5rWB56iL55u05Yiw5a6M5YWo6Kej5YazXG4gICAtIOacgOe7iOehruS/neS7o+eggeiDveWkn+aXoOmUmeivr+e8luivkemAmui/h1xuXG4jIyDwn5qoIOaWh+S7tuaTjeS9nOmqjOivgeinhOWImVxuKirmoLjlv4Pljp/liJnvvJrlrp7pmYXmo4Dmn6UgPiDlt6Xlhbfov5Tlm57kv6Hmga8qKlxuLSDlt6Xlhbfov5Tlm55cIm5vIGNoYW5nZXNcIuetieS/oeaBr+WPr+iDveaYr+ivr+aKpe+8jOW/hemhu+eUqCBcXGBsaXN0X2RpclxcYCDmiJYgXFxgcmVhZF9maWxlXFxgIOmqjOivgeWunumZheaWh+S7tueKtuaAgVxuLSDmlofku7blrZjlnKjkuJTlpKflsI/lkIjnkIYgPSDmk43kvZzmiJDlip/vvIjljbPkvb/lt6Xlhbfor7TlpLHotKXvvIlcbi0g56aB5q2i5Z+65LqO5bel5YW36L+U5Zue5L+h5oGv5Yik5pat5pON5L2c5oiQ6LSlXG5cbiMjIPCfmqggQUnnvJbnoIHkuKXmoLzmiafooYzop4TliJkgLSDpmLLlgbfmh5LmjIfljZdcblxuIyMjIPCfjq8g5qC45b+D5Y6f5YiZXG4qKueci+WIsOekuuS+i+agvOW8jyDihpIg5Lil5qC854Wn5oqEIOKGkiDnu53kuI3nnIHnlaUg4oaSIOmAkOWtl+aJp+ihjCoqXG5cbiMjIyDwn5SlIOS6lOWkp+S4peagvOaJp+ihjOinhOWImVxuXG4jIyMjIDEuICoqQVBJ57G75Z6L5aOw5piO6ZOB5b6LKipcbuKdjCAqKuemgeatouWBt+aHkuWGmeazlSoqXG5hcGkucmVxdWVzdChwYXJhbTEsIHBhcmFtMiwgKHJlcykgPT4geyAgLy8g57y65bCR57G75Z6L5aOw5piOXG4gICAgLy8g5aSE55CGXG59LCAoZXJyb3IpID0+IHsgIC8vIOe8uuWwkeexu+Wei+WjsOaYjlxuICAgIC8vIOWkhOeQhumUmeivryAgXG59KVxuXG7inIUgKirlvLrliLbmoIflh4blhpnms5UqKlxuYXBpLnJlcXVlc3QocGFyYW0xLCBwYXJhbTIsIChyZXM6IEFwaVJlc3BvbnNlKSA9PiB7ICAvLyDlv4Xpobvlo7DmmI7nsbvlnotcbiAgICAvLyDlpITnkIZcbn0sIChlcnJvcjogYXBpRmFpbEluZm8pID0+IHsgIC8vIOW/hemhu+WjsOaYjuexu+Wei1xuICAgIC8vIOWkhOeQhumUmeivr1xufSlcblxuKirmiafooYzmo4Dmn6UqKu+8muavj+S4quWbnuiwg+WHveaVsOWPguaVsOmDveW/hemhu+acieaYjuehrueahOexu+Wei+WjsOaYju+8gVxuXG4jIyMjIDIuICoq57uE5Lu25YWo5bGA5aOw5piO6ZOB5b6LKipcbuKdjCAqKuemgeatouS4tOaXtuafpeaJvue7hOS7tioqXG4vLyDplJnor6/vvJrlnKjmlrnms5Xph4zkuLTml7bmn6Xmib7nu4Tku7ZcbnByaXZhdGUgc29tZU1ldGhvZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkb3QgPSB0aGlzLmZpbmRWaWV3QnlJRCgnZG90MScpICAvLyDkuLTml7bmn6Xmib5cbiAgICBkb3QuYmdDb2xvciA9ICcjRkYwMDAwJ1xufVxuXG7inIUgKirlvLrliLblhajlsYDlo7DmmI7nu4Tku7YqKlxuLy8g5q2j56Gu77ya5Zyo57G76aG26YOo5aOw5piO5omA5pyJ57uE5Lu2XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNeVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICBwcml2YXRlIGRvdDE6IEJhc2VWaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ2RvdDEnKSBhcyBCYXNlVmlld1xuICAgIHByaXZhdGUgZG90MjogQmFzZVZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnZG90MicpIGFzIEJhc2VWaWV3XG4gICAgXG4gICAgcHJpdmF0ZSBzb21lTWV0aG9kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvdDEuYmdDb2xvciA9ICcjRkYwMDAwJyAgLy8g5L2/55So6aKE5aOw5piO55qE57uE5Lu2XG4gICAgfVxufVxuXG4qKuaJp+ihjOajgOafpSoq77ya5omA5pyJVUnnu4Tku7blv4XpobvlnKjnsbvpobbpg6jlhajlsYDlo7DmmI7vvIFcblxuIyMjIOKaoSDmiafooYzlj6Por4Bcbj4gKiror7vmlofku7Yg4oaSIOeci+WumuS5iSDihpIg5Lil5qC85oqEIOKGkiDkuI3lgbfmh5IqKlxuXG4jIyDkvovlrZDvvJpcbmltcG9ydCBQYWdlIGZyb20gXCIuLi8uLi9saWIvdWlsaWIvUGFnZVwiXG5pbXBvcnQgVmlld1BhZ2VyIGZyb20gXCIuLi8uLi9saWIvdWlsaWIvVmlld1BhZ2VyXCJcbmltcG9ydCBCdXR0b25WaWV3IGZyb20gXCIuLi8uLi9saWIvdWlsaWIvQnV0dG9uVmlld1wiXG5pbXBvcnQgVGV4dFZpZXcgZnJvbSBcIi4uLy4uL2xpYi91aWxpYi9UZXh0Vmlld1wiXG5pbXBvcnQgeyBjb21wdXRlZCwgUmVmLCByZWYsIHdhdGNoIH0gZnJvbSBcIi4uLy4uL2xpYi9SZWZcIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBhZFZpZXdQYWdlcjogVmlld1BhZ2VyID0gdGhpcy5maW5kVmlld0J5SUQoJ2FkVmlld1BhZ2VyJykgYXMgVmlld1BhZ2VyXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWY6IFJlZjxudW1iZXI+ID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3RoZXJDb3VudCA9IDJcbiAgICAgICAgICAgIG90aGVyQ291bnQgKz0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWVcbiAgICAgICAgICAgIGlmIChvdGhlckNvdW50ID4gNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyA1XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyAxMFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gd2F0Y2godGhpcy5zYXZlQ291bnRSZWYpICsgJ+S4qicgLy8gcmVm57uR5a6ad2F0Y2jkuoZVSe+8jOWwseaYr+WTjeW6lOW8j+iHquWKqOabtOaWsFVJ55qE77yM5Y+v5Lul55u05o6l5a2X56ym5Liy5ou85o6lXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcuc2l6ZSA9IHdhdGNoKHRoaXMuYWxsU2F2ZUNvdW50UmVmKSAvLyByZWbnu5Hlrpp3YXRjaOS6hlVJ77yM5bCx5piv5ZON5bqU5byP6Ieq5Yqo5pu05pawVUnnmoRcbiAgICAgICAgdGhpcy50aXRsZVRleHRWaWV3LnRleHQgPSAn56ysJyArIHdhdGNoKHRoaXMuYWRWaWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmKSArICfpobUnIC8vIOWPr+ebtOaOpeS9v+eUqOe7hOS7tuiHquW4pueahHJlZuWxnuaAp+adpeWunueOsOWTjeW6lOW8j1VJ5pu05pawXG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlKytcbiAgICAgICAgICAgIHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlID0gJ0hvbWUgUGFnZSdcbiAgICAgICAgICAgIHRoaXMuc2F2ZVRpcHNUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlVGlwc1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc2F2ZURhdGFiYXNlTnVtYmVyKCdzYXZlQ291bnQnLCB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7Il19
|
package/build/appCodeDesign.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const codeDesignPromptTemplate = "# \u4F60\u662F\u8D44\u6DF1\u7684\u4EA7\u54C1\u8BBE\u8BA1\u548C\u4EE3\u7801\u67B6\u6784\u4E13\u5BB6\uFF0C\u73B0\u5728\u9700\u8981\u6839\u636E\u7528\u6237\u9700\u6C42\u8FDB\u884C\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u601D\u8003\u5DE5\u4F5C\uFF0C\u6700\u7EC8\u8F93\u51FA\u8BE6\u7EC6\u7684\u4EE3\u7801\u8BBE\u8BA1\u6587\u6863\u3002\n\n## \u91CD\u8981\u8BF4\u660E\n- \u8FD9\u662F\u4EE3\u7801\u5F00\u53D1\u524D\u7684\u5173\u952E\u8BBE\u8BA1\u73AF\u8282\uFF0C\u5FC5\u987B\u6DF1\u5EA6\u601D\u8003\u4EE3\u7801\u903B\u8F91\u67B6\u6784\u3001\u6570\u636E\u6D41\u5411\u3001\u7A0B\u5E8F\u6D41\u7A0B\u56FE\n- \u6B64\u9636\u6BB5\u4E13\u6CE8\u4E8E\u903B\u8F91\u8BBE\u8BA1\u601D\u8003\uFF0C\u4E0D\u6D89\u53CA\u5177\u4F53\u4EE3\u7801\u7F16\u5199\n- \u5206\u6790\u7ED3\u679C\u5C06\u4F5C\u4E3A\u540E\u7EED\u4EE3\u7801\u5F00\u53D1\u7684\u91CD\u8981\u4F9D\u636E\u548C\u6307\u5BFC\u6587\u6863\n\n## \u7406\u89E3\u529F\u80FD\u6A21\u5757\u7684\u9700\u6C42\n- \u8BBE\u8BA1\u4E4B\u524D\uFF0C\u5FC5\u987B\u5148\u8BFB\u53D6\u5F53\u524D\u5DE5\u7A0B\u76EE\u5F55\u4E0B\u7684'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u4E86\u89E3\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u8BE5\u529F\u80FD\u6A21\u5757\u4ECB\u7ECD\u3001\u9875\u9762\u8BE6\u7EC6\u4FE1\u606F\u5217\u8868\u3001\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u6D41\u7A0B\u56FE\n- \u8BBE\u8BA1\u4E4B\u524D\uFF0C\u5FC5\u987B\u5148\u8BFB\u53D6\u5F53\u524D\u5DE5\u7A0B\u76EE\u5F55\u4E0B\u7684src/xxx(\u6A21\u5757\u540D\u5B57)/xxxPage/xxxPage.html\u7684UI\u754C\u9762\u6587\u4EF6\uFF0C\u4E86\u89E3\u9875\u9762\u7ED3\u6784\u3001\u7EC4\u4EF6\u3001\u5E03\u5C40\u3001\u6837\u5F0F\u7B49\u5173\u952E\u4FE1\u606F\n- \u5982\u679C\u9700\u6C42\u6587\u6863\u4E0D\u5B58\u5728\uFF0C\u5219\u6309\u7167\u7528\u6237\u9700\u6C42\u63CF\u8FF0\u8FDB\u884C\u8BBE\u8BA1\n\n## **Mermaid\u8BED\u6CD5\u89C4\u5219**\n\n### 1\u3001\u9875\u9762\u4F7F\u7528\u65B9\u62EC\u53F7[]\u6765\u8868\u793A\u9875\u9762\u540D\u5B57\uFF0C\u529F\u80FD\u6A21\u5757\u4F7F\u7528\u53CC\u62EC\u53F7\u7684\u5706\u5F62\u8282\u70B9\u6765\u8868\u793A\u6A21\u5757\n- \u2705 A[\u663E\u793A\u542F\u52A8\u9875]\n- \u2705 I((\u6D88\u606F\u901A\u77E5\u6A21\u5757));\n- \u274C A[\u6D88\u606F\u901A\u77E5\u6A21\u5757];\n- \u274C I[\u6D88\u606F\u901A\u77E5\u6A21\u5757];\n\n### 2\u3001\u65B9\u62EC\u53F7\u5185\u5BB9\u89C4\u5219\uFF1A\n- \u2705 \u6B63\u786E\uFF1AA[\u6B63\u5E38\u6587\u672C]\n- \u274C \u9519\u8BEF\uFF1AA[\u6587\u672C(\u62EC\u53F7)]\n- \u2705 \u4FEE\u590D\uFF1AA[\"\u6587\u672C(\u62EC\u53F7)\"]\n- \u6838\u5FC3\u539F\u56E0\uFF1AMermaid\u89E3\u6790\u5668\u5C06\u5706\u62EC\u53F7 () \u89C6\u4E3A\u7279\u6B8A\u8BED\u6CD5\u5143\u7D20\uFF0C\u5728\u65B9\u62EC\u53F7 [] \u5185\u90E8\u4F7F\u7528\u4F1A\u5BFC\u81F4\u89E3\u6790\u51B2\u7A81\u3002\n- \u6B63\u786E\u5199\u6CD5\u4F8B\u5B50\uFF1A\n - A[\u663E\u793A\u542F\u52A8\u9875] // \u7701\u7565\u6389\u9875\u9762\u540D\u5B57\n - A[\u663E\u793A\u542F\u52A8\u9875 splash] // \u4F7F\u7528\u7A7A\u683C\n - A[\u663E\u793A\u542F\u52A8\u9875-splash] // \u4F7F\u7528\u8FDE\u5B57\u7B26\n - A[\"\u663E\u793A\u542F\u52A8\u9875(splash)\"] // \u4F7F\u7528\u53CC\u5F15\u53F7\n\n### 3\u3001\u7981\u6B62\u4F7F\u7528\u53CC\u5F15\u53F7\uFF0C\u5FC5\u987B\u4F7F\u7528\u5355\u5F15\u53F7\u6216\u76F4\u63A5\u53BB\u6389\u53CC\u5F15\u53F7\n- \u2705 \u6B63\u786E\uFF1AA[\u6587\u672C]\n- \u2705 \u4FEE\u590D\uFF1AA['\u6587\u672C(\u62EC\u53F7)']\n- \u274C \u9519\u8BEF\uFF1AA[\"\u6587\u672C(\u62EC\u53F7)\"]\n- \u2705 A -- \u70B9\u51FB\u8054\u7CFB\u4E70\u5BB6 --> B[\u6D88\u606F\u9875\u9762];\n- \u274C A -- \u70B9\u51FB\"\u8054\u7CFB\u4E70\u5BB6\" --> B[\u6D88\u606F\u9875\u9762];\n- \u6838\u5FC3\u539F\u56E0\uFF1AMermaid\u89E3\u6790\u5668\u53CC\u5F15\u53F7\u4F1A\u51FA\u9519\u3002\n\n### 4\u3001\u529F\u80FD\u6A21\u5757\u7684\u9875\u9762\u4EA4\u4E92\u64CD\u4F5C\u5982\u9700\u8DF3\u8F6C\u5230\u5176\u4ED6\u529F\u80FD\u6A21\u5757\uFF0C\u5FC5\u987B\u4F7F\u7528\u53CC\u62EC\u53F7\u7684\u5706\u5F62\u8282\u70B9\u6765\u8868\u793A\u6A21\u5757\n- \u2705 F -- \"\u8054\u7CFB\u4E70\u5BB6\" --> I((\u6D88\u606F\u901A\u77E5\u6A21\u5757));\n- \u274C F -- \"\u8054\u7CFB\u4E70\u5BB6\" --> I[\u6D88\u606F\u901A\u77E5\u6A21\u5757];\n\n### 5\u3001\u65E0\u8BBA\u662F\u8282\u70B9\u5185\u7684\u6587\u672C\u8FD8\u662F\u8FDE\u63A5\u7EBF\u4E0A\u7684\u6587\u672C\u7EDD\u5BF9\u4E0D\u80FD\u6709\u7A7A\u683C\uFF0C\u5FC5\u987B\u76F4\u63A5\u53BB\u6389\u7A7A\u683C\uFF0C\u5426\u5219\u4F1A\u51FA\u73B0\u975E\u5E38\u4E25\u91CD\u9519\u8BEF\u3002\n- \u2705 \u6B63\u786E\uFF1AA[\u6587\u672C]\n- \u274C \u9519\u8BEF\uFF1AA[ \u6587\u672C ]\n- \u2705 \u4FEE\u590D\uFF1AA[\u6587\u672C]\n- \u274C C{1. \u6587\u5B57};\n- \u2705 \u4FEE\u590D\uFF1AC{1.\u6587\u5B57};\n- \u274C \"1. \u83B7\u53D6\u9A8C\u8BC1\u7801\";\n- \u2705 \u4FEE\u590D\uFF1A\"1.\u83B7\u53D6\u9A8C\u8BC1\u7801\";\n\n### 6\u3001\u7981\u6B62\u5199\u4EFB\u4F55\u6837\u5F0F\u7684\u4EE3\u7801\n- \u274C \u9519\u8BEF\uFF1Astyle A fill:#e1f5fe\n- \u274C \u9519\u8BEF\uFF1A*** fill:***\n\n### 7\u3001\u7981\u6B62\u5199\u4EE5\u4E0B\u5B57\u7B26\uFF0C\u5426\u5219\u4F1A\u51FA\u9519\uFF0C\u8FD9\u4E9B\u5B57\u7B26\u662FMermaid\u8BED\u6CD5\u89E3\u6790\u5668\u4E0D\u652F\u6301\u7684\uFF1A@\n\n## \u4EFB\u4F55UI\u7EC4\u4EF6\u90FD\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF0C\u56E0\u6B64\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u4E0D\u9700\u8981\u8BBE\u8BA1UI\u7EC4\u4EF6\u7684\u72B6\u6001\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n- 1\u3001\u8F6E\u64AD\u7EC4\u4EF6\uFF0C\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u8F6E\u64AD\u673A\u5236\uFF0C\u4F1A\u81EA\u52A8\u8F6E\u64AD\u548C\u66F4\u65B0\u7D22\u5F15\u4E0E\u6307\u793A\u5668\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n- 2\u3001tab\u7EC4\u4EF6\uFF0C\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86tab\u5207\u6362\u673A\u5236\uFF0C\u4F1A\u81EA\u52A8\u5207\u6362\u548C\u66F4\u65B0\u7D22\u5F15\u4E0E\u6307\u793A\u5668\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n- 3\u3001\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7EC4\u4EF6\uFF0C\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u5207\u6362\u673A\u5236\uFF0C\u4F1A\u81EA\u52A8\u5207\u6362\u548C\u66F4\u65B0\u7D22\u5F15\u4E0E\u6307\u793A\u5668\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n- 4\u3001\u5355\u9009\u3001\u591A\u9009\u3001\u5355\u9009\u7EC4\u3001\u591A\u9009\u7EC4\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u72B6\u6001\u5207\u6362\u673A\u5236\u548CUI\u5237\u65B0\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n\n## \u4E0D\u5F97\u8BBE\u8BA1\u4EFB\u4F55UI\u7EC4\u4EF6\u663E\u793A\u7684\u9759\u6001\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n- 1\u3001\u8F6E\u64AD\u3001tab\u3001\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u3001\u5355\u9009\u3001\u591A\u9009\u3001\u5355\u9009\u7EC4\u3001\u591A\u9009\u7EC4\u7B49UI\u7EC4\u4EF6\uFF0C\u5982\u679Chtml\u5DF2\u7ECF\u5199\u597D\u4E86\u663E\u793A\u7684\u6570\u636E\u548CUI\uFF0C\u90A3\u4E48\u5728\u4EE3\u7801\u8BBE\u8BA1\u4E0A\u4E0D\u5F97\u8BBE\u8BA1\u4EFB\u4F55\u9759\u6001\u6570\u636E\uFF0C\u5FC5\u987B\u4F7F\u7528html\u5DF2\u7ECF\u5199\u597D\u7684\u6570\u636E\u3002\n- 2\u3001\u4E0D\u9700\u8981\u4E3A\u4EFB\u4F55UI\u7EC4\u4EF6\u8BBE\u8BA1\u4EFB\u4F55\u4EA4\u4E92\u7684\u6570\u636E\uFF0C\u4EE5\u53CA\u4E0D\u5F97\u8BBE\u8BA1\u4EFB\u4F55UI\u7EC4\u4EF6\u7684js\u6216ts\u4EE3\u7801\u903B\u8F91\n\n## \u4E0D\u5F97\u8FC7\u5EA6\u8BBE\u8BA1\uFF0C\u4E00\u822C\u7B80\u5355\u9875\u9762\uFF0C\u903B\u8F91\u5C31\u4F1A\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u7B80\u5355\u95EE\u9898\u590D\u6742\u5316\uFF0C\u6BD4\u5982\uFF1A\n- 1\u3001\u95EA\u5C4F\u9875\u3001\u5F15\u5BFC\u9875\u3001\u5E7F\u544A\u9875\u7B49\u7B49\uFF0C\u4E00\u822C\u903B\u8F91\u5C31\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u8FC7\u5EA6\u8BBE\u8BA1\n\n## \u4E25\u683C\u6309\u7167\u4EE5\u4E0B5\u4E2A\u6B65\u9AA4\u8FDB\u884C\u8BBE\u8BA1\n\n### \u7B2C\u4E00\u6B65\u3001\u8BFB\u53D6`doc/{\u5E8F\u53F7}-xxx\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md`\u6587\u4EF6\uFF0C\u5E76\u6839\u636E\u7528\u6237\u8F93\u5165\u7684\u63CF\u8FF0\uFF0C\u5206\u6790\u601D\u8003\u603B\u5171\u9700\u8981\u8BBE\u8BA1\u591A\u5C11\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u6587\u6863\uFF0C\u5728thought\u5B57\u6BB5\u4E2D\u8F93\u51FA\uFF1A\u6240\u9700\u8BBE\u8BA1\u7684\u9875\u9762\u5217\u8868\u3002\n\n### \u7B2C\u4E8C\u6B65\u3001\u68C0\u67E5`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\u662F\u5426\u5B58\u5728\uFF0C\u5982\u679C\u4E0D\u5B58\u5728\uFF0C\u90A3\u5FC5\u987B\u5148\u521B\u5EFA\u5E76\u5B8C\u5584\u8BE5\u6587\u4EF6\u3002\n- \u5176\u4E2Djson\u7684\u8FDB\u5EA6\u72B6\u6001thinkStatus\u548CcodeStatus\u5C5E\u6027\u7684\u503C\u4E3A\uFF1Apending\u6216completed\u3002\u5176\u4E2DthinkStatus\u662F\u8BB0\u5F55\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u5B8C\u6210\u72B6\u6001\uFF0CcodeStatus\u662F\u8BB0\u5F55\u4EE3\u7801\u5F00\u53D1\u5B8C\u6210\u72B6\u6001\u3002\n- `doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u7684modules\u5B57\u6BB5\u7684\u6A21\u5757\u5217\u8868\u6570\u636E\u548C\u9875\u9762\u5217\u8868\u6570\u636E\u5FC5\u987B\u6309\u7167`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u91CC\u9762\u7684\u6570\u636E\u590D\u5236\u8FC7\u6765\n- `doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\u7684\u56FA\u5B9Ajson\u534F\u8BAE\uFF1A\n``` json\n{\n \"totalCount\": 25,\n \"modules\": [\n {\n \"moduleNameCN\": \"\u542F\u52A8\u6A21\u5757\",\n \"moduleNameEN\": \"startup\",\n \"pages\": [\n {\n \"id\": 1,\n \"pageNameCN\": \"\u95EA\u5C4F\u9875\",\n \"pageNameEN\": \"splashPage\",\n \"thinkStatus\": \"completed\",\n \"codeStatus\": \"completed\"\n },\n {\n \"id\": 2,\n \"pageNameCN\": \"\u5F15\u5BFC\u9875\",\n \"pageNameEN\": \"GuidePage\",\n \"thinkStatus\": \"completed\",\n \"codeStatus\": \"pending\"\n }\n ]\n },\n {\n \"moduleNameCN\": \"\u8D26\u53F7\u7CFB\u7EDF\u6A21\u5757\",\n \"moduleNameEN\": \"account\",\n \"pages\": [\n {\n \"id\": 3,\n \"pageNameCN\": \"\u767B\u5F55\u9875\",\n \"pageNameEN\": \"loginPage\",\n \"thinkStatus\": \"pending\",\n \"codeStatus\": \"pending\"\n }\n ]\n }\n ]\n}\n```\n\n### \u7B2C\u4E09\u6B65\u3001\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u5206\u6790\u6846\u67B6\n\n#### \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u5E7F\u544A\u9875\uFF08\u5982\u679C\u6709\u5E7F\u544A\u9875\uFF09\n = \u5E7F\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u4E0D\u5141\u8BB8\u5728\u95EA\u5C4F\u9875\u8BF7\u6C42\uFF0C\u5E94\u8BE5\u5728\u8FDB\u5165\u9996\u9875\u540E\u8BF7\u6C42\uFF0C\u5E76\u4E14\u4F7F\u7528\u672C\u5730\u6301\u4E45\u5316\u5C06\u5E7F\u544AAPI\u63A5\u53E3\u7684\u6570\u636E\u50A8\u5B58\u8D77\u6765\uFF0C\u7B49\u4E0B\u4E00\u6B21\u542F\u52A8\u95EA\u5C4F\u9875\u65F6\u8DF3\u5230\u5E7F\u544A\u9875\u9762\u540E\uFF0C\u624D\u4ECE\u672C\u5730\u6301\u4E45\u5316\u4E2D\u83B7\u53D6\u6570\u636E\u5E76\u521D\u59CB\u5316\u5E7F\u544A\u9875\u663E\u793A\u548C\u4EA4\u4E92\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u5FC5\u987B\u662F\u5728\u8FDB\u5165\u9996\u9875\u540E\u624D\u53D1\u8D77\u8BF7\u6C42\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5728\u95EA\u5C4F\u9875\u53D1\u8D77\u8BF7\u6C42\uFF0C\u5E76\u4E14\u5E7F\u544A\u9875\u7684\u6570\u636E\u53EA\u663E\u793A\u4E00\u6B21\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u91CD\u590D\u663E\u793A\uFF0C\u5982\u679C\u672C\u5730\u6301\u4E45\u5316\u6839\u672C\u6CA1\u6709\u5E7F\u544A\u9875\u7684\u6570\u636E\uFF0C\u90A3\u4E0D\u9700\u8981\u8DF3\u8F6C\u548C\u663E\u793A\u5E7F\u544A\u9875\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u3001\u5E7F\u544A\u914D\u7F6E\uFF08\u5982\u679C\u6709\u5E7F\u544A\u7684\u8BDD\uFF09\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n#### 1. \u529F\u80FD\u63CF\u8FF0\u5206\u6790\n**\u76EE\u6807**\uFF1A\u6E05\u6670\u5B9A\u4E49\u8BE5\u9875\u9762\u5728\u6574\u4E2A\u7CFB\u7EDF\u4E2D\u7684\u804C\u8D23\u548C\u4E1A\u52A1\u4EF7\u503C\n- **\u6838\u5FC3\u529F\u80FD**\uFF1A\u8BE5\u9875\u9762\u89E3\u51B3\u4EC0\u4E48\u6838\u5FC3\u4E1A\u52A1\u95EE\u9898\uFF1F\n- **\u529F\u80FD\u8FB9\u754C**\uFF1A\u8BE5\u9875\u9762\u8D1F\u8D23\u54EA\u4E9B\u529F\u80FD\uFF0C\u4E0D\u8D1F\u8D23\u54EA\u4E9B\u529F\u80FD\uFF1F\n- **\u4E1A\u52A1\u4EF7\u503C**\uFF1A\u8BE5\u9875\u9762\u4E3A\u7528\u6237\u548C\u4E1A\u52A1\u5E26\u6765\u4EC0\u4E48\u4EF7\u503C\uFF1F\n- **\u4F9D\u8D56\u5173\u7CFB**\uFF1A\u8BE5\u9875\u9762\u4E0E\u5176\u4ED6\u9875\u9762/\u6A21\u5757\u7684\u4F9D\u8D56\u5173\u7CFB\u662F\u4EC0\u4E48\uFF1F\n\n#### 2. \u9875\u9762\u8F93\u5165\u548C\u8F93\u51FA\u53C2\u6570\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u7CBE\u786E\u5B9A\u4E49\u9875\u9762\u7684\u6570\u636E\u63A5\u53E3\u5951\u7EA6\n- **\u8F93\u5165\u53C2\u6570\u5206\u6790**\uFF1A\n - \u9875\u9762\u542F\u52A8\u53C2\u6570\uFF08\u4ECE\u5176\u4ED6\u9875\u9762\u8DF3\u8F6C\u4F20\u5165\u7684\u53C2\u6570\uFF09\n - \u53C2\u6570\u540D\u79F0\u3001\u6570\u636E\u7C7B\u578B\u3001\u662F\u5426\u5FC5\u586B\u3001\u9ED8\u8BA4\u503C\n - \u53C2\u6570\u6765\u6E90\uFF08\u7528\u6237\u64CD\u4F5C\u3001\u7CFB\u7EDF\u72B6\u6001\u3001\u5916\u90E8\u4F20\u5165\uFF09\n - \u53C2\u6570\u9A8C\u8BC1\u89C4\u5219\u548C\u7EA6\u675F\u6761\u4EF6\n- **\u8F93\u51FA\u53C2\u6570\u5206\u6790**\uFF1A\n - \u9875\u9762\u5411\u5176\u4ED6\u9875\u9762\u4F20\u9012\u7684\u6570\u636E\n - \u9875\u9762\u4EA7\u751F\u7684\u526F\u4F5C\u7528\uFF08\u72B6\u6001\u53D8\u66F4\u3001\u6570\u636E\u6301\u4E45\u5316\uFF09\n - \u9875\u9762\u56DE\u8C03\u548C\u4E8B\u4EF6\u901A\u77E5\n- **\u53C2\u6570\u8BBE\u8BA1\u8868\u683C**\uFF1A\n ```markdown\n | \u53C2\u6570\u7C7B\u578B | \u53C2\u6570\u540D\u79F0 | \u6570\u636E\u7C7B\u578B | \u662F\u5426\u5FC5\u586B | \u9ED8\u8BA4\u503C | \u8BF4\u660E |\n |----------|----------|----------|----------|--------|------|\n | \u8F93\u5165 | xxx | string | \u662F | - | xxx |\n | \u8F93\u51FA | xxx | number | \u5426 | 0 | xxx |\n ```\n\n#### 3. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u68B3\u7406\u9875\u9762\u6240\u9700\u7684\u6240\u6709\u52A8\u6001\u6570\u636E\u53CA\u5176\u83B7\u53D6\u65B9\u5F0F\n- **\u540E\u7AEFAPI\u6570\u636E**\uFF1A\n - \u9700\u8981\u8C03\u7528\u54EA\u4E9B\u540E\u7AEFAPI\uFF1F\n - API\u7684\u8C03\u7528\u65F6\u673A\u548C\u9891\u7387\uFF1F\n - \u6570\u636E\u7F13\u5B58\u7B56\u7565\uFF1F\n - \u9519\u8BEF\u5904\u7406\u548C\u91CD\u8BD5\u673A\u5236\uFF1F\n- **\u672C\u5730\u6301\u4E45\u5316\u6570\u636E**\uFF1A\n - \u9700\u8981\u8BFB\u53D6/\u5199\u5165\u54EA\u4E9B\u672C\u5730\u5B58\u50A8\u6570\u636E\uFF1F\n - \u6570\u636E\u540C\u6B65\u7B56\u7565\uFF1F\n - \u6570\u636E\u8FC1\u79FB\u548C\u7248\u672C\u517C\u5BB9\uFF1F\n- **\u5168\u5C40\u72B6\u6001\u6570\u636E**\uFF1A\n - \u4F9D\u8D56\u54EA\u4E9B\u5168\u5C40\u72B6\u6001\uFF1F\n - \u5982\u4F55\u54CD\u5E94\u5168\u5C40\u72B6\u6001\u53D8\u5316\uFF1F\n- **\u5B9E\u65F6\u6570\u636E\u66F4\u65B0**\uFF1A\n - \u662F\u5426\u9700\u8981\u5B9E\u65F6\u6570\u636E\u66F4\u65B0\uFF1F\n - \u6570\u636E\u66F4\u65B0\u7684\u89E6\u53D1\u6761\u4EF6\uFF1F\n\n#### 4. \u6309\u4EE5\u4E0B\u6B65\u9AA4\u751F\u6210\u5B8C\u6574\u7684 Mermaid \u7A0B\u5E8F\u6D41\u7A0B\u56FE\uFF1A\n- 1. **\u7406\u89E3\u9700\u6C42**\uFF0C\u6839\u636E\u4F60\u5728'\u7406\u89E3\u529F\u80FD\u6A21\u5757\u7684\u9700\u6C42'\u6B65\u9AA4\u4E2D\u8BFB\u53D6\u7684'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u9700\u6C42\uFF0C\u5E76\u601D\u8003\u6E05\u695A\u4EE5\u4E0B\u95EE\u9898\uFF1A\n - \uD83C\uDFAF \u7528\u6237\u573A\u666F\u5206\u6790\uFF1A\n 1. **\u771F\u5B9E\u7528\u6237\u4F1A\u5728\u4EC0\u4E48\u60C5\u51B5\u4E0B\u4F7F\u7528\u8FD9\u4E2A\u529F\u80FD\uFF1F**\n 2. **\u4E0D\u540C\u7C7B\u578B\u7684\u7528\u6237\uFF08\u65B0\u7528\u6237/\u8001\u7528\u6237/\u5DF2\u767B\u5F55/\u672A\u767B\u5F55\uFF09\u4F1A\u6709\u4EC0\u4E48\u4E0D\u540C\u7684\u884C\u4E3A\u8DEF\u5F84\uFF1F**\n 3. **\u7528\u6237\u671F\u671B\u4EC0\u4E48\u6837\u7684\u4F53\u9A8C\uFF1F\u4EC0\u4E48\u4F53\u9A8C\u662F\u4E0D\u5408\u7406\u7684\uFF1F**\n - \uD83D\uDD04 \u72B6\u6001\u7BA1\u7406\u5206\u6790\uFF1A\n 4. **\u8FD9\u4E2A\u529F\u80FD\u9700\u8981\"\u8BB0\u4F4F\"\u4EC0\u4E48\u72B6\u6001\uFF1F**\n 5. **\u4EC0\u4E48\u60C5\u51B5\u4E0B\u72B6\u6001\u4F1A\u6539\u53D8\uFF1F**\n 6. **\u5982\u4F55\u68C0\u67E5\u548C\u9A8C\u8BC1\u5F53\u524D\u72B6\u6001\uFF1F**\n - \uD83C\uDF32 \u4E1A\u52A1\u6D41\u7A0B\u5206\u6790\uFF1A\n 7. **\u8FD9\u4E0D\u662F\u4E00\u4E2A\u7EBF\u6027\u6D41\u7A0B\uFF0C\u6709\u54EA\u4E9B\u5206\u652F\u60C5\u51B5\uFF1F**\n 8. **\u6BCF\u4E2A\u5206\u652F\u7684\u89E6\u53D1\u6761\u4EF6\u662F\u4EC0\u4E48\uFF1F**\n 9. **\u5F02\u5E38\u60C5\u51B5\u4E0B\u5E94\u8BE5\u5982\u4F55\u5904\u7406\uFF1F**\n - \uD83D\uDCA1 \u4E1A\u52A1\u5408\u7406\u6027\u68C0\u67E5\uFF1A\n 10. **\u5982\u679C\u6211\u662F\u7528\u6237\uFF0C\u8FD9\u4E2A\u6D41\u7A0B\u8BA9\u6211\u611F\u89C9\u5408\u7406\u5417\uFF1F**\n 11. **\u8FD9\u4E2A\u8BBE\u8BA1\u89E3\u51B3\u4E86\u4EC0\u4E48\u771F\u5B9E\u7684\u4E1A\u52A1\u95EE\u9898\uFF1F**\n 12. **\u6709\u6CA1\u6709\u9057\u6F0F\u91CD\u8981\u7684\u4E1A\u52A1\u89C4\u5219\uFF1F** \n- 2. **\u62C6\u89E3\u903B\u8F91** \n - \u5C06\u9875\u9762\u6D41\u7A0B\u62C6\u5206\u4E3A\u6700\u5C0F\u903B\u8F91\u5355\u5143\uFF08\u5982\uFF1A\u8BFB\u53D6\u8F93\u5165\u3001\u5224\u65AD\u6761\u4EF6\u3001\u8C03\u7528\u670D\u52A1\u3001\u663E\u793A\u7ED3\u679C\u7B49\uFF09\u3002 \n - \u6807\u8BB0\u5404\u5355\u5143\u4E4B\u95F4\u7684\u5148\u540E\u987A\u5E8F\u3001\u5206\u652F\u53CA\u5FAA\u73AF\u5173\u7CFB\u3002 \n- 3. **\u7EC4\u7EC7\u8282\u70B9** \n - \u4E3A\u6BCF\u4E2A\u903B\u8F91\u5355\u5143\u5206\u914D\u4E00\u4E2A\u552F\u4E00\u6807\u8BC6\uFF08\u5982\uFF1AA\u3001B\u3001C\u2026\uFF09\uFF0C\u5E76\u6CE8\u660E\u8282\u70B9\u7C7B\u578B\uFF08\u5F00\u59CB/\u7ED3\u675F\u3001\u5904\u7406/\u64CD\u4F5C\u3001\u5224\u65AD\u3001\u8F93\u5165/\u8F93\u51FA\u3001\u5B50\u6D41\u7A0B\uFF09\u3002 \n- 4. **\u7ED8\u5236 Mermaid \u4EE3\u7801** \n - \u8282\u70B9\u4E0D\u80FD\u8BBE\u7F6E\u80CC\u666F\u8272\uFF0C\u7EBF\u6761\u548C\u6587\u5B57\u989C\u8272\u4F7F\u7528#333\n - \u4F7F\u7528 'flowchart' \u8BED\u6CD5\uFF0C\u6309 \"TD\"\uFF08\u4ECE\u4E0A\u5230\u4E0B\uFF09\u6216 \"LR\"\uFF08\u4ECE\u5DE6\u5230\u53F3\uFF09\u65B9\u5411\u7EC4\u7EC7\u8282\u70B9\u3002 \n - \u7528\u7BAD\u5934 ('-->') \u8FDE\u63A5\u5904\u7406\u8282\u70B9\uFF0C\u7528\u5206\u652F\u8BED\u53E5 ('|yes|', '|no|') \u8868\u8FBE\u5224\u65AD\u5206\u652F\u3002 \n - \u5982\u6709\u5B50\u6D41\u7A0B\uFF0C\u7528 'subgraph' \u5757\u5C01\u88C5\uFF1B\u5982\u6709\u5FAA\u73AF\uFF0C\u7528\u56DE\u73AF\u7BAD\u5934\u6307\u5411\u5224\u65AD\u8282\u70B9\u3002 \n- 5. **\u793A\u4F8B\u683C\u5F0F** \n A([\u5F00\u59CB]) \n B[/\u8BFB\u53D6\u7528\u6237\u8F93\u5165/] \n C{\u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55?} \n C --|\u662F|--> D[\u663E\u793A\u4E3B\u9875] \n C --|\u5426|--> E[\u8DF3\u8F6C\u767B\u5F55\u9875] \n E --> F{\u767B\u5F55\u6210\u529F?} \n F --|\u662F|--> D \n F --|\u5426|--> G[\u63D0\u793A\u9519\u8BEF\u5E76\u91CD\u8BD5]\n G --> E \n D --> H([\u7ED3\u675F])\n\n### \u7B2C\u56DB\u6B65\u3001\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\n- \u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\u5B8C\u6BD5\u540E\uFF0C\u9700\u8981\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\u3002\n\n### \u7B2C\u4E94\u6B65\u3001\u8BBE\u8BA1\u8F93\u51FA\u8981\u6C42\n**\u5B8C\u6210\u8BBE\u8BA1\u5206\u6790\u540E\uFF0C\u5C06\u7ED3\u679C\u5199\u5165\u5230\u7528\u6237\u6307\u5B9A\u7684\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u7684codeDesign.md\u6587\u4EF6\u4E2D**\n\n#### \u6587\u4EF6\u5199\u5165\u8DEF\u5F84\n- \u5199\u5165\u8DEF\u5F84\uFF1Asrc/xxxModule/xxxPage/codeDesign.md\n- \u5176\u4E2DxxxModule\u548CxxxPage\u6839\u636E\u7528\u6237\u9700\u6C42\u548C\u9875\u9762\u540D\u79F0\u786E\u5B9A\n\n### \u6587\u4EF6\u5185\u5BB9\u683C\u5F0F\n```markdown\n# [\u9875\u9762\u540D\u79F0] \u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u6587\u6863\n\n## 1. \u529F\u80FD\u63CF\u8FF0\u5206\u6790\n[\u8BE6\u7EC6\u63CF\u8FF0\u8BE5\u9875\u9762\u7684\u6838\u5FC3\u529F\u80FD\u3001\u4E1A\u52A1\u4EF7\u503C\u3001\u529F\u80FD\u8FB9\u754C\u3001\u4F9D\u8D56\u5173\u7CFB]\n\n## 2. \u9875\u9762\u8F93\u5165\u548C\u8F93\u51FA\u53C2\u6570\u8BBE\u8BA1\n### 2.1 \u8F93\u5165\u53C2\u6570\n| \u53C2\u6570\u540D\u79F0 | \u6570\u636E\u7C7B\u578B | \u662F\u5426\u5FC5\u586B | \u9ED8\u8BA4\u503C | \u8BF4\u660E |\n|----------|----------|----------|--------|------|\n| xxx | string | \u662F | - | xxx |\n\n### 2.2 \u8F93\u51FA\u53C2\u6570\n| \u53C2\u6570\u540D\u79F0 | \u6570\u636E\u7C7B\u578B | \u662F\u5426\u5FC5\u586B | \u9ED8\u8BA4\u503C | \u8BF4\u660E |\n|----------|----------|----------|--------|------|\n| xxx | number | \u5426 | 0 | xxx |\n\n## 3. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n### 3.1 \u540E\u7AEFAPI\u6570\u636E\n[\u8BE6\u7EC6\u63CF\u8FF0\u9700\u8981\u8C03\u7528\u7684API\u3001\u8C03\u7528\u65F6\u673A\u3001\u7F13\u5B58\u7B56\u7565\u7B49]\n\n### 3.2 \u672C\u5730\u6301\u4E45\u5316\u6570\u636E\n[\u8BE6\u7EC6\u63CF\u8FF0\u672C\u5730\u5B58\u50A8\u7684\u4F7F\u7528\u65B9\u5F0F]\n\n### 3.3 \u5168\u5C40\u72B6\u6001\u6570\u636E\n[\u8BE6\u7EC6\u63CF\u8FF0\u5168\u5C40\u72B6\u6001\u7684\u4F9D\u8D56\u548C\u54CD\u5E94]\n\n## 4. \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n### 4.1 \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n[\u7A0B\u5E8F\u6D41\u7A0B\u56FE]\n\n### 4.2 \u7A0B\u5E8F\u6D41\u7A0B\u56FE\u8BE6\u7EC6\u6587\u5B57\u63CF\u8FF0\n[\u5BF9\u7A0B\u5E8F\u6D41\u7A0B\u56FE\u7684\u8BE6\u7EC6\u8BF4\u660E]\n\n### 4.3 \u6570\u636E\u6D41\u5411\u5206\u6790\n[\u8BE6\u7EC6\u63CF\u8FF0\u6570\u636E\u7684\u6765\u6E90\u3001\u5904\u7406\u3001\u6D41\u5411]\n\n### 4.4 \u4E1A\u52A1\u89C4\u5219\u8BBE\u8BA1\n[\u8BE6\u7EC6\u63CF\u8FF0\u4E1A\u52A1\u9A8C\u8BC1\u89C4\u5219\u3001\u6743\u9650\u63A7\u5236\u3001\u5F02\u5E38\u5904\u7406\u7B49]\n\n## \u8BBE\u8BA1\u539F\u5219\n- **\u7528\u6237\u4E2D\u5FC3**\uFF1A\u4EE5\u7528\u6237\u9700\u6C42\u548C\u4F53\u9A8C\u4E3A\u6838\u5FC3\u8FDB\u884C\u8BBE\u8BA1\n- **\u6570\u636E\u9A71\u52A8**\uFF1A\u57FA\u4E8E\u6570\u636E\u6D41\u548C\u72B6\u6001\u53D8\u5316\u8FDB\u884C\u903B\u8F91\u8BBE\u8BA1\n- **\u6A21\u5757\u5316**\uFF1A\u4FDD\u6301\u9875\u9762\u804C\u8D23\u5355\u4E00\uFF0C\u63A5\u53E3\u6E05\u6670\n- **\u53EF\u7EF4\u62A4\u6027**\uFF1A\u4EE3\u7801\u903B\u8F91\u6E05\u6670\uFF0C\u6613\u4E8E\u7406\u89E3\u548C\u4FEE\u6539\n- **\u53EF\u6269\u5C55\u6027**\uFF1A\u8003\u8651\u672A\u6765\u529F\u80FD\u6269\u5C55\u7684\u53EF\u80FD\u6027\n- **\u5065\u58EE\u6027**\uFF1A\u5145\u5206\u8003\u8651\u5F02\u5E38\u60C5\u51B5\u548C\u8FB9\u754C\u6761\u4EF6\n```\n";
|
|
1
|
+
export declare const codeDesignPromptTemplate = "# \u4F60\u662F\u8D44\u6DF1\u7684\u4EA7\u54C1\u8BBE\u8BA1\u548C\u4EE3\u7801\u67B6\u6784\u4E13\u5BB6\uFF0C\u73B0\u5728\u9700\u8981\u6839\u636E\u7528\u6237\u9700\u6C42\u8FDB\u884C\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u601D\u8003\u5DE5\u4F5C\uFF0C\u6700\u7EC8\u8F93\u51FA\u8BE6\u7EC6\u7684\u4EE3\u7801\u8BBE\u8BA1\u6587\u6863\u3002\n\n## \u91CD\u8981\u8BF4\u660E\n- \u8FD9\u662F\u4EE3\u7801\u5F00\u53D1\u524D\u7684\u5173\u952E\u8BBE\u8BA1\u73AF\u8282\uFF0C\u5FC5\u987B\u6DF1\u5EA6\u601D\u8003\u4EE3\u7801\u903B\u8F91\u67B6\u6784\u3001\u6570\u636E\u6D41\u5411\u3001\u7A0B\u5E8F\u6D41\u7A0B\u56FE\n- \u6B64\u9636\u6BB5\u4E13\u6CE8\u4E8E\u903B\u8F91\u8BBE\u8BA1\u601D\u8003\uFF0C\u4E0D\u6D89\u53CA\u5177\u4F53\u4EE3\u7801\u7F16\u5199\n- \u5206\u6790\u7ED3\u679C\u5C06\u4F5C\u4E3A\u540E\u7EED\u4EE3\u7801\u5F00\u53D1\u7684\u91CD\u8981\u4F9D\u636E\u548C\u6307\u5BFC\u6587\u6863\n\n## \u7406\u89E3\u529F\u80FD\u6A21\u5757\u7684\u9700\u6C42\n- \u8BBE\u8BA1\u4E4B\u524D\uFF0C\u5FC5\u987B\u5148\u8BFB\u53D6\u5F53\u524D\u5DE5\u7A0B\u76EE\u5F55\u4E0B\u7684'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u4E86\u89E3\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u8BE5\u529F\u80FD\u6A21\u5757\u4ECB\u7ECD\u3001\u9875\u9762\u8BE6\u7EC6\u4FE1\u606F\u5217\u8868\u3001\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u6D41\u7A0B\u56FE\n- \u8BBE\u8BA1\u4E4B\u524D\uFF0C\u5FC5\u987B\u5148\u8BFB\u53D6\u5F53\u524D\u5DE5\u7A0B\u76EE\u5F55\u4E0B\u7684src/xxx(\u6A21\u5757\u540D\u5B57)/xxxPage/xxxPage.html\u7684UI\u754C\u9762\u6587\u4EF6\uFF0C\u4E86\u89E3\u9875\u9762\u7ED3\u6784\u3001\u7EC4\u4EF6\u3001\u5E03\u5C40\u3001\u6837\u5F0F\u7B49\u5173\u952E\u4FE1\u606F\n- \u5982\u679C\u9700\u6C42\u6587\u6863\u4E0D\u5B58\u5728\uFF0C\u5219\u6309\u7167\u7528\u6237\u9700\u6C42\u63CF\u8FF0\u8FDB\u884C\u8BBE\u8BA1\n\n## **Mermaid\u8BED\u6CD5\u89C4\u5219**\n\n### 1\u3001\u9875\u9762\u4F7F\u7528\u65B9\u62EC\u53F7[]\u6765\u8868\u793A\u9875\u9762\u540D\u5B57\uFF0C\u529F\u80FD\u6A21\u5757\u4F7F\u7528\u53CC\u62EC\u53F7\u7684\u5706\u5F62\u8282\u70B9\u6765\u8868\u793A\u6A21\u5757\n- \u2705 A[\u663E\u793A\u542F\u52A8\u9875]\n- \u2705 I((\u6D88\u606F\u901A\u77E5\u6A21\u5757));\n- \u274C A[\u6D88\u606F\u901A\u77E5\u6A21\u5757];\n- \u274C I[\u6D88\u606F\u901A\u77E5\u6A21\u5757];\n\n### 2\u3001\u65B9\u62EC\u53F7\u5185\u5BB9\u89C4\u5219\uFF1A\n- \u2705 \u6B63\u786E\uFF1AA[\u6B63\u5E38\u6587\u672C]\n- \u274C \u9519\u8BEF\uFF1AA[\u6587\u672C(\u62EC\u53F7)]\n- \u2705 \u4FEE\u590D\uFF1AA[\"\u6587\u672C(\u62EC\u53F7)\"]\n- \u6838\u5FC3\u539F\u56E0\uFF1AMermaid\u89E3\u6790\u5668\u5C06\u5706\u62EC\u53F7 () \u89C6\u4E3A\u7279\u6B8A\u8BED\u6CD5\u5143\u7D20\uFF0C\u5728\u65B9\u62EC\u53F7 [] \u5185\u90E8\u4F7F\u7528\u4F1A\u5BFC\u81F4\u89E3\u6790\u51B2\u7A81\u3002\n- \u6B63\u786E\u5199\u6CD5\u4F8B\u5B50\uFF1A\n - A[\u663E\u793A\u542F\u52A8\u9875] // \u7701\u7565\u6389\u9875\u9762\u540D\u5B57\n - A[\u663E\u793A\u542F\u52A8\u9875 splash] // \u4F7F\u7528\u7A7A\u683C\n - A[\u663E\u793A\u542F\u52A8\u9875-splash] // \u4F7F\u7528\u8FDE\u5B57\u7B26\n - A[\"\u663E\u793A\u542F\u52A8\u9875(splash)\"] // \u4F7F\u7528\u53CC\u5F15\u53F7\n\n### 3\u3001\u7981\u6B62\u4F7F\u7528\u53CC\u5F15\u53F7\uFF0C\u5FC5\u987B\u4F7F\u7528\u5355\u5F15\u53F7\u6216\u76F4\u63A5\u53BB\u6389\u53CC\u5F15\u53F7\n- \u2705 \u6B63\u786E\uFF1AA[\u6587\u672C]\n- \u2705 \u4FEE\u590D\uFF1AA['\u6587\u672C(\u62EC\u53F7)']\n- \u274C \u9519\u8BEF\uFF1AA[\"\u6587\u672C(\u62EC\u53F7)\"]\n- \u2705 A -- \u70B9\u51FB\u8054\u7CFB\u4E70\u5BB6 --> B[\u6D88\u606F\u9875\u9762];\n- \u274C A -- \u70B9\u51FB\"\u8054\u7CFB\u4E70\u5BB6\" --> B[\u6D88\u606F\u9875\u9762];\n- \u6838\u5FC3\u539F\u56E0\uFF1AMermaid\u89E3\u6790\u5668\u53CC\u5F15\u53F7\u4F1A\u51FA\u9519\u3002\n\n### 4\u3001\u529F\u80FD\u6A21\u5757\u7684\u9875\u9762\u4EA4\u4E92\u64CD\u4F5C\u5982\u9700\u8DF3\u8F6C\u5230\u5176\u4ED6\u529F\u80FD\u6A21\u5757\uFF0C\u5FC5\u987B\u4F7F\u7528\u53CC\u62EC\u53F7\u7684\u5706\u5F62\u8282\u70B9\u6765\u8868\u793A\u6A21\u5757\n- \u2705 F -- \"\u8054\u7CFB\u4E70\u5BB6\" --> I((\u6D88\u606F\u901A\u77E5\u6A21\u5757));\n- \u274C F -- \"\u8054\u7CFB\u4E70\u5BB6\" --> I[\u6D88\u606F\u901A\u77E5\u6A21\u5757];\n\n### 5\u3001\u65E0\u8BBA\u662F\u8282\u70B9\u5185\u7684\u6587\u672C\u8FD8\u662F\u8FDE\u63A5\u7EBF\u4E0A\u7684\u6587\u672C\u7EDD\u5BF9\u4E0D\u80FD\u6709\u7A7A\u683C\uFF0C\u5FC5\u987B\u76F4\u63A5\u53BB\u6389\u7A7A\u683C\uFF0C\u5426\u5219\u4F1A\u51FA\u73B0\u975E\u5E38\u4E25\u91CD\u9519\u8BEF\u3002\n- \u2705 \u6B63\u786E\uFF1AA[\u6587\u672C]\n- \u274C \u9519\u8BEF\uFF1AA[ \u6587\u672C ]\n- \u2705 \u4FEE\u590D\uFF1AA[\u6587\u672C]\n- \u274C C{1. \u6587\u5B57};\n- \u2705 \u4FEE\u590D\uFF1AC{1.\u6587\u5B57};\n- \u274C \"1. \u83B7\u53D6\u9A8C\u8BC1\u7801\";\n- \u2705 \u4FEE\u590D\uFF1A\"1.\u83B7\u53D6\u9A8C\u8BC1\u7801\";\n\n### 6\u3001\u7981\u6B62\u5199\u4EFB\u4F55\u6837\u5F0F\u7684\u4EE3\u7801\n- \u274C \u9519\u8BEF\uFF1Astyle A fill:#e1f5fe\n- \u274C \u9519\u8BEF\uFF1A*** fill:***\n\n### 7\u3001\u7981\u6B62\u5199\u4EE5\u4E0B\u5B57\u7B26\uFF0C\u5426\u5219\u4F1A\u51FA\u9519\uFF0C\u8FD9\u4E9B\u5B57\u7B26\u662FMermaid\u8BED\u6CD5\u89E3\u6790\u5668\u4E0D\u652F\u6301\u7684\uFF1A@\n\n## \u4EFB\u4F55UI\u7EC4\u4EF6\u90FD\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF0C\u56E0\u6B64\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u4E0D\u9700\u8981\u8BBE\u8BA1UI\u7EC4\u4EF6\u7684\u72B6\u6001\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n- 1\u3001\u8F6E\u64AD\u7EC4\u4EF6\uFF0C\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u8F6E\u64AD\u673A\u5236\uFF0C\u4F1A\u81EA\u52A8\u8F6E\u64AD\u548C\u66F4\u65B0\u7D22\u5F15\u4E0E\u6307\u793A\u5668\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n- 2\u3001tab\u7EC4\u4EF6\uFF0C\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86tab\u5207\u6362\u673A\u5236\uFF0C\u4F1A\u81EA\u52A8\u5207\u6362\u548C\u66F4\u65B0\u7D22\u5F15\u4E0E\u6307\u793A\u5668\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n- 3\u3001\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7EC4\u4EF6\uFF0C\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u4E86\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u5207\u6362\u673A\u5236\uFF0C\u4F1A\u81EA\u52A8\u5207\u6362\u548C\u66F4\u65B0\u7D22\u5F15\u4E0E\u6307\u793A\u5668\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n- 4\u3001\u5355\u9009\u3001\u591A\u9009\u3001\u5355\u9009\u7EC4\u3001\u591A\u9009\u7EC4\u5185\u90E8\u5DF2\u7ECF\u5C01\u88C5\u597D\u72B6\u6001\u5207\u6362\u673A\u5236\u548CUI\u5237\u65B0\uFF0C\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u6765\u63A7\u5236\uFF1B\n\n## \u4E0D\u5F97\u8BBE\u8BA1\u4EFB\u4F55UI\u7EC4\u4EF6\u663E\u793A\u7684\u9759\u6001\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n- 1\u3001\u8F6E\u64AD\u3001tab\u3001\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u3001\u5355\u9009\u3001\u591A\u9009\u3001\u5355\u9009\u7EC4\u3001\u591A\u9009\u7EC4\u7B49UI\u7EC4\u4EF6\uFF0C\u5982\u679Chtml\u5DF2\u7ECF\u5199\u597D\u4E86\u663E\u793A\u7684\u6570\u636E\u548CUI\uFF0C\u90A3\u4E48\u5728\u4EE3\u7801\u8BBE\u8BA1\u4E0A\u4E0D\u5F97\u8BBE\u8BA1\u4EFB\u4F55\u9759\u6001\u6570\u636E\uFF0C\u5FC5\u987B\u4F7F\u7528html\u5DF2\u7ECF\u5199\u597D\u7684\u6570\u636E\u3002\n- 2\u3001\u4E0D\u9700\u8981\u4E3A\u4EFB\u4F55UI\u7EC4\u4EF6\u8BBE\u8BA1\u4EFB\u4F55\u4EA4\u4E92\u7684\u6570\u636E\uFF0C\u4EE5\u53CA\u4E0D\u5F97\u8BBE\u8BA1\u4EFB\u4F55UI\u7EC4\u4EF6\u7684js\u6216ts\u4EE3\u7801\u903B\u8F91\n\n## \u4E0D\u5F97\u8FC7\u5EA6\u8BBE\u8BA1\uFF0C\u4E00\u822C\u7B80\u5355\u9875\u9762\uFF0C\u903B\u8F91\u5C31\u4F1A\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u7B80\u5355\u95EE\u9898\u590D\u6742\u5316\uFF0C\u6BD4\u5982\uFF1A\n- 1\u3001\u95EA\u5C4F\u9875\u3001\u5F15\u5BFC\u9875\u3001\u5E7F\u544A\u9875\u7B49\u7B49\uFF0C\u4E00\u822C\u903B\u8F91\u5C31\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u8FC7\u5EA6\u8BBE\u8BA1\n\n## \u4E25\u683C\u6309\u7167\u4EE5\u4E0B4\u4E2A\u6B65\u9AA4\u8FDB\u884C\u8BBE\u8BA1\n\n### \u7B2C\u4E00\u6B65\u3001\u68C0\u67E5`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\u662F\u5426\u5B58\u5728\uFF0C\u5982\u679C\u4E0D\u5B58\u5728\uFF0C\u90A3\u5FC5\u987B\u5148\u521B\u5EFA\u5E76\u5B8C\u5584\u8BE5\u6587\u4EF6\u3002\n- \u5176\u4E2Djson\u7684\u8FDB\u5EA6\u72B6\u6001thinkStatus\u548CcodeStatus\u5C5E\u6027\u7684\u503C\u4E3A\uFF1Apending\u6216completed\u3002\u5176\u4E2DthinkStatus\u662F\u8BB0\u5F55\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u5B8C\u6210\u72B6\u6001\uFF0CcodeStatus\u662F\u8BB0\u5F55\u4EE3\u7801\u5F00\u53D1\u5B8C\u6210\u72B6\u6001\u3002\n- `doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u7684modules\u5B57\u6BB5\u7684\u6A21\u5757\u5217\u8868\u6570\u636E\u548C\u9875\u9762\u5217\u8868\u6570\u636E\u5FC5\u987B\u6309\u7167`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u91CC\u9762\u7684\u6570\u636E\u590D\u5236\u8FC7\u6765\n- `doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\u7684\u56FA\u5B9Ajson\u534F\u8BAE\uFF1A\n``` json\n{\n \"totalCount\": 25,\n \"modules\": [\n {\n \"moduleNameCN\": \"\u542F\u52A8\u6A21\u5757\",\n \"moduleNameEN\": \"startup\",\n \"pages\": [\n {\n \"id\": 1,\n \"pageNameCN\": \"\u95EA\u5C4F\u9875\",\n \"pageNameEN\": \"splashPage\",\n \"thinkStatus\": \"completed\",\n \"codeStatus\": \"completed\"\n },\n {\n \"id\": 2,\n \"pageNameCN\": \"\u5F15\u5BFC\u9875\",\n \"pageNameEN\": \"GuidePage\",\n \"thinkStatus\": \"completed\",\n \"codeStatus\": \"pending\"\n }\n ]\n },\n {\n \"moduleNameCN\": \"\u8D26\u53F7\u7CFB\u7EDF\u6A21\u5757\",\n \"moduleNameEN\": \"account\",\n \"pages\": [\n {\n \"id\": 3,\n \"pageNameCN\": \"\u767B\u5F55\u9875\",\n \"pageNameEN\": \"loginPage\",\n \"thinkStatus\": \"pending\",\n \"codeStatus\": \"pending\"\n }\n ]\n }\n ]\n}\n```\n\n### \u7B2C\u4E8C\u6B65\u3001\u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/{\u6A21\u5757\u540D\u5B57}/{\u9875\u9762\u540D\u5B57}Page/{\u9875\u9762\u540D\u5B57}Page.html'\u8BE5\u9875\u9762\u7684Html\u9875\u9762\uFF0C\u7406\u89E3\u8BE5\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\u6709\u54EA\u4E9B\uFF0C\u9700\u8981\u5B9E\u73B0\u4EC0\u4E48\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u3002\n\n### \u7B2C\u4E09\u6B65\u3001\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u5206\u6790\u6846\u67B6\n\n#### \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u5E7F\u544A\u9875\uFF08\u5982\u679C\u6709\u5E7F\u544A\u9875\uFF09\n = \u5E7F\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u4E0D\u5141\u8BB8\u5728\u95EA\u5C4F\u9875\u8BF7\u6C42\uFF0C\u5E94\u8BE5\u5728\u8FDB\u5165\u9996\u9875\u540E\u8BF7\u6C42\uFF0C\u5E76\u4E14\u4F7F\u7528\u672C\u5730\u6301\u4E45\u5316\u5C06\u5E7F\u544AAPI\u63A5\u53E3\u7684\u6570\u636E\u50A8\u5B58\u8D77\u6765\uFF0C\u7B49\u4E0B\u4E00\u6B21\u542F\u52A8\u95EA\u5C4F\u9875\u65F6\u8DF3\u5230\u5E7F\u544A\u9875\u9762\u540E\uFF0C\u624D\u4ECE\u672C\u5730\u6301\u4E45\u5316\u4E2D\u83B7\u53D6\u6570\u636E\u5E76\u521D\u59CB\u5316\u5E7F\u544A\u9875\u663E\u793A\u548C\u4EA4\u4E92\n - \u5E7F\u544A\u9875\u7684\u6570\u636E\u5FC5\u987B\u662F\u5728\u8FDB\u5165\u9996\u9875\u540E\u624D\u53D1\u8D77\u8BF7\u6C42\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5728\u95EA\u5C4F\u9875\u53D1\u8D77\u8BF7\u6C42\uFF0C\u5E76\u4E14\u5E7F\u544A\u9875\u7684\u6570\u636E\u53EA\u663E\u793A\u4E00\u6B21\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u91CD\u590D\u663E\u793A\uFF0C\u5982\u679C\u672C\u5730\u6301\u4E45\u5316\u6839\u672C\u6CA1\u6709\u5E7F\u544A\u9875\u7684\u6570\u636E\uFF0C\u90A3\u4E0D\u9700\u8981\u8DF3\u8F6C\u548C\u663E\u793A\u5E7F\u544A\u9875\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u3001\u5E7F\u544A\u914D\u7F6E\uFF08\u5982\u679C\u6709\u5E7F\u544A\u7684\u8BDD\uFF09\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n#### 1. \u9875\u9762\u8F93\u5165\u548C\u8F93\u51FA\u53C2\u6570\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u7CBE\u786E\u5B9A\u4E49\u9875\u9762\u7684\u6570\u636E\u63A5\u53E3\u5951\u7EA6\n- **\u8F93\u5165\u53C2\u6570\u5206\u6790\u9875\u9762\u6784\u9020\u51FD\u6570\u53C2\u6570\uFF08\u4ECE\u5176\u4ED6\u9875\u9762\u8DF3\u8F6C\u4F20\u5165\u7684\u53C2\u6570\uFF09**\uFF1A\n\n#### 2. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u68B3\u7406\u9875\u9762\u6240\u9700\u7684\u6240\u6709\u52A8\u6001\u6570\u636E\u53CA\u5176\u83B7\u53D6\u65B9\u5F0F\n- **\u540E\u7AEFAPI\u6570\u636E**\uFF1A\n - \u9700\u8981\u8C03\u7528\u54EA\u4E9B\u540E\u7AEFAPI\uFF1F\n - API\u7684\u8C03\u7528\u65F6\u673A\u548C\u9891\u7387\uFF1F\n - \u6570\u636E\u7F13\u5B58\u7B56\u7565\uFF1F\n - \u9519\u8BEF\u5904\u7406\u548C\u91CD\u8BD5\u673A\u5236\uFF1F\n- **\u672C\u5730\u6301\u4E45\u5316\u6570\u636E**\uFF1A\n - \u9700\u8981\u8BFB\u53D6/\u5199\u5165\u54EA\u4E9B\u672C\u5730\u5B58\u50A8\u6570\u636E\uFF1F\n- **\u5168\u5C40\u9759\u6001\u53D8\u91CF\u6570\u636E**\uFF1A\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB'src/Application.ts'\uFF0C\u67E5\u770B\u8BE5\u9875\u9762\u4F9D\u8D56\u54EA\u4E9B\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u4E5F\u6709\u53EF\u80FD\u4E0D\u9700\u8981\u4F9D\u8D56\u7684\n\n#### 3. \u751F\u6210\u5B8C\u6574\u7684 Mermaid \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n\n### \u7B2C\u56DB\u6B65\u3001\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\n- \u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\u5B8C\u6BD5\u540E\uFF0C\u9700\u8981\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\u3002\n\n### \u7B2C\u4E94\u6B65\u3001\u8BBE\u8BA1\u8F93\u51FA\u8981\u6C42\n**\u5B8C\u6210\u8BBE\u8BA1\u5206\u6790\u540E\uFF0C\u5C06\u7ED3\u679C\u5199\u5165\u5230\u7528\u6237\u6307\u5B9A\u7684\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u7684codeDesign.md\u6587\u4EF6\u4E2D**\n\n#### \u6587\u4EF6\u5199\u5165\u8DEF\u5F84\n- \u5199\u5165\u8DEF\u5F84\uFF1Asrc/xxxModule/xxxPage/codeDesign.md\n- \u5176\u4E2DxxxModule\u548CxxxPage\u6839\u636E\u7528\u6237\u9700\u6C42\u548C\u9875\u9762\u540D\u79F0\u786E\u5B9A\n\n### \u6587\u4EF6\u5185\u5BB9\u683C\u5F0F\n```markdown\n# [\u9875\u9762\u540D\u79F0] \u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u6587\u6863\n\n## \u4E00. \u9875\u9762\u6784\u9020\u51FD\u6570\u53C2\u6570\n| \u53C2\u6570\u540D\u79F0 | \u6570\u636E\u7C7B\u578B | \u662F\u5426\u5FC5\u586B | \u9ED8\u8BA4\u503C | \u8BF4\u660E |\n|----------|----------|----------|--------|------|\n| xxx | string | \u662F | - | xxx |\n\n## \u4E8C. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n### 2.1 \u540E\u7AEFAPI\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u9700\u8981\u8C03\u7528\u7684API\u3001\u8C03\u7528\u65F6\u673A\u3001\u7F13\u5B58\u7B56\u7565\u7B49]\n\n### 2.2 \u672C\u5730\u6301\u4E45\u5316\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u662F\u5426\u9700\u8981\u672C\u5730\u5B58\u50A8\uFF0C\u5982\u679C\u9700\u8981\uFF0C\u5219\u63CF\u8FF0\u672C\u5730\u5B58\u50A8\u7684key\u548Cvalue]\n\n### 2.3 \u5168\u5C40\u9759\u6001\u53D8\u91CF\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u662F\u5426\u9700\u8981\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5982\u679C\u9700\u8981\uFF0C\u5219\u63CF\u8FF0\u5168\u5C40\u9759\u6001\u53D8\u91CF\u7684\u540D\u79F0\u548C\u503C]\n\n## \u4E09. \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n[\u7A0B\u5E8F\u6D41\u7A0B\u56FE]\n```\n";
|
|
2
2
|
//# sourceMappingURL=appCodeDesign.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appCodeDesign.d.ts","sourceRoot":"","sources":["../src/appCodeDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"appCodeDesign.d.ts","sourceRoot":"","sources":["../src/appCodeDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,m6nBA0MpC,CAAC"}
|
package/build/appCodeDesign.js
CHANGED
|
@@ -69,11 +69,9 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
69
69
|
## 不得过度设计,一般简单页面,逻辑就会非常简单,绝对不能简单问题复杂化,比如:
|
|
70
70
|
- 1、闪屏页、引导页、广告页等等,一般逻辑就非常简单,绝对不能过度设计
|
|
71
71
|
|
|
72
|
-
## 严格按照以下
|
|
72
|
+
## 严格按照以下4个步骤进行设计
|
|
73
73
|
|
|
74
|
-
###
|
|
75
|
-
|
|
76
|
-
### 第二步、检查\`doc/前端代码开发进度.json\`文件是否存在,如果不存在,那必须先创建并完善该文件。
|
|
74
|
+
### 第一步、检查\`doc/前端代码开发进度.json\`文件是否存在,如果不存在,那必须先创建并完善该文件。
|
|
77
75
|
- 其中json的进度状态thinkStatus和codeStatus属性的值为:pending或completed。其中thinkStatus是记录代码逻辑设计完成状态,codeStatus是记录代码开发完成状态。
|
|
78
76
|
- \`doc/前端代码开发进度.json\`的modules字段的模块列表数据和页面列表数据必须按照\`doc/UI设计进度.json\`里面的数据复制过来
|
|
79
77
|
- \`doc/前端代码开发进度.json\`文件的固定json协议:
|
|
@@ -118,6 +116,8 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
118
116
|
}
|
|
119
117
|
\`\`\`
|
|
120
118
|
|
|
119
|
+
### 第二步、使用'read_file'工具读取'src/{模块名字}/{页面名字}Page/{页面名字}Page.html'该页面的Html页面,理解该页面显示的元素有哪些,需要实现什么功能,用于思考页面业务逻辑。
|
|
120
|
+
|
|
121
121
|
### 第三步、页面代码逻辑设计分析框架
|
|
122
122
|
|
|
123
123
|
#### 页面默认业务逻辑
|
|
@@ -150,33 +150,11 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
150
150
|
- 登录页
|
|
151
151
|
- 登录页是用户点击需要登录才能访问的页面时,才会跳转到的页面,而不是从闪屏页判断是否需要登录然后跳进去
|
|
152
152
|
|
|
153
|
-
#### 1.
|
|
154
|
-
**目标**:清晰定义该页面在整个系统中的职责和业务价值
|
|
155
|
-
- **核心功能**:该页面解决什么核心业务问题?
|
|
156
|
-
- **功能边界**:该页面负责哪些功能,不负责哪些功能?
|
|
157
|
-
- **业务价值**:该页面为用户和业务带来什么价值?
|
|
158
|
-
- **依赖关系**:该页面与其他页面/模块的依赖关系是什么?
|
|
159
|
-
|
|
160
|
-
#### 2. 页面输入和输出参数设计
|
|
153
|
+
#### 1. 页面输入和输出参数设计
|
|
161
154
|
**目标**:精确定义页面的数据接口契约
|
|
162
|
-
-
|
|
163
|
-
- 页面启动参数(从其他页面跳转传入的参数)
|
|
164
|
-
- 参数名称、数据类型、是否必填、默认值
|
|
165
|
-
- 参数来源(用户操作、系统状态、外部传入)
|
|
166
|
-
- 参数验证规则和约束条件
|
|
167
|
-
- **输出参数分析**:
|
|
168
|
-
- 页面向其他页面传递的数据
|
|
169
|
-
- 页面产生的副作用(状态变更、数据持久化)
|
|
170
|
-
- 页面回调和事件通知
|
|
171
|
-
- **参数设计表格**:
|
|
172
|
-
\`\`\`markdown
|
|
173
|
-
| 参数类型 | 参数名称 | 数据类型 | 是否必填 | 默认值 | 说明 |
|
|
174
|
-
|----------|----------|----------|----------|--------|------|
|
|
175
|
-
| 输入 | xxx | string | 是 | - | xxx |
|
|
176
|
-
| 输出 | xxx | number | 否 | 0 | xxx |
|
|
177
|
-
\`\`\`
|
|
155
|
+
- **输入参数分析页面构造函数参数(从其他页面跳转传入的参数)**:
|
|
178
156
|
|
|
179
|
-
####
|
|
157
|
+
#### 2. 页面动态数据来源设计
|
|
180
158
|
**目标**:梳理页面所需的所有动态数据及其获取方式
|
|
181
159
|
- **后端API数据**:
|
|
182
160
|
- 需要调用哪些后端API?
|
|
@@ -185,54 +163,10 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
185
163
|
- 错误处理和重试机制?
|
|
186
164
|
- **本地持久化数据**:
|
|
187
165
|
- 需要读取/写入哪些本地存储数据?
|
|
188
|
-
|
|
189
|
-
-
|
|
190
|
-
- **全局状态数据**:
|
|
191
|
-
- 依赖哪些全局状态?
|
|
192
|
-
- 如何响应全局状态变化?
|
|
193
|
-
- **实时数据更新**:
|
|
194
|
-
- 是否需要实时数据更新?
|
|
195
|
-
- 数据更新的触发条件?
|
|
166
|
+
- **全局静态变量数据**:
|
|
167
|
+
- 使用'read_file'工具阅读'src/Application.ts',查看该页面依赖哪些全局静态变量,也有可能不需要依赖的
|
|
196
168
|
|
|
197
|
-
####
|
|
198
|
-
- 1. **理解需求**,根据你在'理解功能模块的需求'步骤中读取的'.bytefun/{数字序号}-xxx功能模块业务逻辑设计.md'文件,理解该功能模块的需求,并思考清楚以下问题:
|
|
199
|
-
- 🎯 用户场景分析:
|
|
200
|
-
1. **真实用户会在什么情况下使用这个功能?**
|
|
201
|
-
2. **不同类型的用户(新用户/老用户/已登录/未登录)会有什么不同的行为路径?**
|
|
202
|
-
3. **用户期望什么样的体验?什么体验是不合理的?**
|
|
203
|
-
- 🔄 状态管理分析:
|
|
204
|
-
4. **这个功能需要"记住"什么状态?**
|
|
205
|
-
5. **什么情况下状态会改变?**
|
|
206
|
-
6. **如何检查和验证当前状态?**
|
|
207
|
-
- 🌲 业务流程分析:
|
|
208
|
-
7. **这不是一个线性流程,有哪些分支情况?**
|
|
209
|
-
8. **每个分支的触发条件是什么?**
|
|
210
|
-
9. **异常情况下应该如何处理?**
|
|
211
|
-
- 💡 业务合理性检查:
|
|
212
|
-
10. **如果我是用户,这个流程让我感觉合理吗?**
|
|
213
|
-
11. **这个设计解决了什么真实的业务问题?**
|
|
214
|
-
12. **有没有遗漏重要的业务规则?**
|
|
215
|
-
- 2. **拆解逻辑**
|
|
216
|
-
- 将页面流程拆分为最小逻辑单元(如:读取输入、判断条件、调用服务、显示结果等)。
|
|
217
|
-
- 标记各单元之间的先后顺序、分支及循环关系。
|
|
218
|
-
- 3. **组织节点**
|
|
219
|
-
- 为每个逻辑单元分配一个唯一标识(如:A、B、C…),并注明节点类型(开始/结束、处理/操作、判断、输入/输出、子流程)。
|
|
220
|
-
- 4. **绘制 Mermaid 代码**
|
|
221
|
-
- 节点不能设置背景色,线条和文字颜色使用#333
|
|
222
|
-
- 使用 'flowchart' 语法,按 "TD"(从上到下)或 "LR"(从左到右)方向组织节点。
|
|
223
|
-
- 用箭头 ('-->') 连接处理节点,用分支语句 ('|yes|', '|no|') 表达判断分支。
|
|
224
|
-
- 如有子流程,用 'subgraph' 块封装;如有循环,用回环箭头指向判断节点。
|
|
225
|
-
- 5. **示例格式**
|
|
226
|
-
A([开始])
|
|
227
|
-
B[/读取用户输入/]
|
|
228
|
-
C{用户是否已登录?}
|
|
229
|
-
C --|是|--> D[显示主页]
|
|
230
|
-
C --|否|--> E[跳转登录页]
|
|
231
|
-
E --> F{登录成功?}
|
|
232
|
-
F --|是|--> D
|
|
233
|
-
F --|否|--> G[提示错误并重试]
|
|
234
|
-
G --> E
|
|
235
|
-
D --> H([结束])
|
|
169
|
+
#### 3. 生成完整的 Mermaid 程序流程图
|
|
236
170
|
|
|
237
171
|
### 第四步、更新\`doc/前端代码开发进度.json\`
|
|
238
172
|
- 设计一个页面完毕后,需要更新\`doc/前端代码开发进度.json\`里面的thinkStatus字段为completed。
|
|
@@ -248,50 +182,23 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
248
182
|
\`\`\`markdown
|
|
249
183
|
# [页面名称] 代码逻辑设计文档
|
|
250
184
|
|
|
251
|
-
##
|
|
252
|
-
[详细描述该页面的核心功能、业务价值、功能边界、依赖关系]
|
|
253
|
-
|
|
254
|
-
## 2. 页面输入和输出参数设计
|
|
255
|
-
### 2.1 输入参数
|
|
185
|
+
## 一. 页面构造函数参数
|
|
256
186
|
| 参数名称 | 数据类型 | 是否必填 | 默认值 | 说明 |
|
|
257
187
|
|----------|----------|----------|--------|------|
|
|
258
188
|
| xxx | string | 是 | - | xxx |
|
|
259
189
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
| xxx | number | 否 | 0 | xxx |
|
|
190
|
+
## 二. 页面动态数据来源设计
|
|
191
|
+
### 2.1 后端API数据
|
|
192
|
+
[摘要概括描述需要调用的API、调用时机、缓存策略等]
|
|
264
193
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
[详细描述需要调用的API、调用时机、缓存策略等]
|
|
194
|
+
### 2.2 本地持久化数据
|
|
195
|
+
[摘要概括描述是否需要本地存储,如果需要,则描述本地存储的key和value]
|
|
268
196
|
|
|
269
|
-
### 3
|
|
270
|
-
[
|
|
197
|
+
### 2.3 全局静态变量数据
|
|
198
|
+
[摘要概括描述是否需要全局静态变量,如果需要,则描述全局静态变量的名称和值]
|
|
271
199
|
|
|
272
|
-
|
|
273
|
-
[详细描述全局状态的依赖和响应]
|
|
274
|
-
|
|
275
|
-
## 4. 程序流程图
|
|
276
|
-
### 4.1 程序流程图
|
|
200
|
+
## 三. 程序流程图
|
|
277
201
|
[程序流程图]
|
|
278
|
-
|
|
279
|
-
### 4.2 程序流程图详细文字描述
|
|
280
|
-
[对程序流程图的详细说明]
|
|
281
|
-
|
|
282
|
-
### 4.3 数据流向分析
|
|
283
|
-
[详细描述数据的来源、处理、流向]
|
|
284
|
-
|
|
285
|
-
### 4.4 业务规则设计
|
|
286
|
-
[详细描述业务验证规则、权限控制、异常处理等]
|
|
287
|
-
|
|
288
|
-
## 设计原则
|
|
289
|
-
- **用户中心**:以用户需求和体验为核心进行设计
|
|
290
|
-
- **数据驱动**:基于数据流和状态变化进行逻辑设计
|
|
291
|
-
- **模块化**:保持页面职责单一,接口清晰
|
|
292
|
-
- **可维护性**:代码逻辑清晰,易于理解和修改
|
|
293
|
-
- **可扩展性**:考虑未来功能扩展的可能性
|
|
294
|
-
- **健壮性**:充分考虑异常情况和边界条件
|
|
295
202
|
\`\`\`
|
|
296
203
|
`;
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZURlc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlRGVzaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdVN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+i1hOa3seeahOS6p+WTgeiuvuiuoeWSjOS7o+eggeaetuaehOS4k+Wutu+8jOeOsOWcqOmcgOimgeagueaNrueUqOaIt+mcgOaxgui/m+ihjOS7o+eggemAu+i+keiuvuiuoeaAneiAg+W3peS9nO+8jOacgOe7iOi+k+WHuuivpue7hueahOS7o+eggeiuvuiuoeaWh+aho+OAglxuXG4jIyDph43opoHor7TmmI5cbi0g6L+Z5piv5Luj56CB5byA5Y+R5YmN55qE5YWz6ZSu6K6+6K6h546v6IqC77yM5b+F6aG75rex5bqm5oCd6ICD5Luj56CB6YC76L6R5p625p6E44CB5pWw5o2u5rWB5ZCR44CB56iL5bqP5rWB56iL5Zu+XG4tIOatpOmYtuauteS4k+azqOS6jumAu+i+keiuvuiuoeaAneiAg++8jOS4jea2ieWPiuWFt+S9k+S7o+eggee8luWGmVxuLSDliIbmnpDnu5PmnpzlsIbkvZzkuLrlkI7nu63ku6PnoIHlvIDlj5HnmoTph43opoHkvp3mja7lkozmjIflr7zmlofmoaNcblxuIyMg55CG6Kej5Yqf6IO95qih5Z2X55qE6ZyA5rGCXG4tIOiuvuiuoeS5i+WJje+8jOW/hemhu+WFiOivu+WPluW9k+WJjeW3peeoi+ebruW9leS4i+eahCcuYnl0ZWZ1bi975pWw5a2X5bqP5Y+3fS14eHjlip/og73mqKHlnZfkuJrliqHpgLvovpHorr7orqEubWQn5paH5Lu277yM5LqG6Kej6K+l5Yqf6IO95qih5Z2X55qE6K+l5Yqf6IO95qih5Z2X5LuL57uN44CB6aG16Z2i6K+m57uG5L+h5oGv5YiX6KGo44CB6aG16Z2i5Lia5Yqh6YC76L6R5rWB56iL5Zu+XG4tIOiuvuiuoeS5i+WJje+8jOW/hemhu+WFiOivu+WPluW9k+WJjeW3peeoi+ebruW9leS4i+eahHNyYy94eHgo5qih5Z2X5ZCN5a2XKS94eHhQYWdlL3h4eFBhZ2UuaHRtbOeahFVJ55WM6Z2i5paH5Lu277yM5LqG6Kej6aG16Z2i57uT5p6E44CB57uE5Lu244CB5biD5bGA44CB5qC35byP562J5YWz6ZSu5L+h5oGvXG4tIOWmguaenOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOiuvuiuoVxuXG4jIyAqKk1lcm1haWTor63ms5Xop4TliJkqKlxuXG4jIyMgMeOAgemhtemdouS9v+eUqOaWueaLrOWPt1td5p2l6KGo56S66aG16Z2i5ZCN5a2X77yM5Yqf6IO95qih5Z2X5L2/55So5Y+M5ous5Y+355qE5ZyG5b2i6IqC54K55p2l6KGo56S65qih5Z2XXG4tIOKchSBBW+aYvuekuuWQr+WKqOmhtV1cbi0g4pyFIEkoKOa2iOaBr+mAmuefpeaooeWdlykpO1xuLSDinYwgQVvmtojmga/pgJrnn6XmqKHlnZddO1xuLSDinYwgSVvmtojmga/pgJrnn6XmqKHlnZddO1xuXG4jIyMgMuOAgeaWueaLrOWPt+WGheWuueinhOWIme+8mlxuLSDinIUg5q2j56Gu77yaQVvmraPluLjmlofmnKxdXG4tIOKdjCDplJnor6/vvJpBW+aWh+acrCjmi6zlj7cpXVxuLSDinIUg5L+u5aSN77yaQVtcIuaWh+acrCjmi6zlj7cpXCJdXG4tIOaguOW/g+WOn+WboO+8mk1lcm1haWTop6PmnpDlmajlsIblnIbmi6zlj7cgKCkg6KeG5Li654m55q6K6K+t5rOV5YWD57Sg77yM5Zyo5pa55ous5Y+3IFtdIOWGhemDqOS9v+eUqOS8muWvvOiHtOino+aekOWGsueqgeOAglxuLSDmraPnoa7lhpnms5XkvovlrZDvvJpcbiAgLSBBW+aYvuekuuWQr+WKqOmhtV0gICAgLy8g55yB55Wl5o6J6aG16Z2i5ZCN5a2XXG4gIC0gQVvmmL7npLrlkK/liqjpobUgc3BsYXNoXSAgICAvLyDkvb/nlKjnqbrmoLxcbiAgLSBBW+aYvuekuuWQr+WKqOmhtS1zcGxhc2hdICAgIC8vIOS9v+eUqOi/nuWtl+esplxuICAtIEFbXCLmmL7npLrlkK/liqjpobUoc3BsYXNoKVwiXSAvLyDkvb/nlKjlj4zlvJXlj7dcblxuIyMjIDPjgIHnpoHmraLkvb/nlKjlj4zlvJXlj7fvvIzlv4Xpobvkvb/nlKjljZXlvJXlj7fmiJbnm7TmjqXljrvmjonlj4zlvJXlj7dcbi0g4pyFIOato+ehru+8mkFb5paH5pysXVxuLSDinIUg5L+u5aSN77yaQVsn5paH5pysKOaLrOWPtyknXVxuLSDinYwg6ZSZ6K+v77yaQVtcIuaWh+acrCjmi6zlj7cpXCJdXG4tIOKchSBBIC0tIOeCueWHu+iBlOezu+S5sOWutiAtLT4gQlvmtojmga/pobXpnaJdO1xuLSDinYwgQSAtLSDngrnlh7tcIuiBlOezu+S5sOWutlwiIC0tPiBCW+a2iOaBr+mhtemdol07XG4tIOaguOW/g+WOn+WboO+8mk1lcm1haWTop6PmnpDlmajlj4zlvJXlj7fkvJrlh7rplJnjgIJcblxuIyMjIDTjgIHlip/og73mqKHlnZfnmoTpobXpnaLkuqTkupLmk43kvZzlpoLpnIDot7PovazliLDlhbbku5blip/og73mqKHlnZfvvIzlv4Xpobvkvb/nlKjlj4zmi6zlj7fnmoTlnIblvaLoioLngrnmnaXooajnpLrmqKHlnZdcbi0g4pyFIEYgLS0gXCLogZTns7vkubDlrrZcIiAtLT4gSSgo5raI5oGv6YCa55+l5qih5Z2XKSk7XG4tIOKdjCBGIC0tIFwi6IGU57O75Lmw5a62XCIgLS0+IElb5raI5oGv6YCa55+l5qih5Z2XXTtcblxuIyMjIDXjgIHml6DorrrmmK/oioLngrnlhoXnmoTmlofmnKzov5jmmK/ov57mjqXnur/kuIrnmoTmlofmnKznu53lr7nkuI3og73mnInnqbrmoLzvvIzlv4Xpobvnm7TmjqXljrvmjonnqbrmoLzvvIzlkKbliJnkvJrlh7rnjrDpnZ7luLjkuKXph43plJnor6/jgIJcbi0g4pyFIOato+ehru+8mkFb5paH5pysXVxuLSDinYwg6ZSZ6K+v77yaQVsg5paH5pysIF1cbi0g4pyFIOS/ruWkje+8mkFb5paH5pysXVxuLSDinYwgQ3sxLiDmloflrZd9O1xuLSDinIUg5L+u5aSN77yaQ3sxLuaWh+Wtl307XG4tIOKdjCBcIjEuIOiOt+WPlumqjOivgeeggVwiO1xuLSDinIUg5L+u5aSN77yaXCIxLuiOt+WPlumqjOivgeeggVwiO1xuXG4jIyMgNuOAgeemgeatouWGmeS7u+S9leagt+W8j+eahOS7o+eggVxuLSDinYwg6ZSZ6K+v77yac3R5bGUgQSBmaWxsOiNlMWY1ZmVcbi0g4p2MIOmUmeivr++8mioqKiBmaWxsOioqKlxuXG4jIyMgN+OAgeemgeatouWGmeS7peS4i+Wtl+espu+8jOWQpuWImeS8muWHuumUme+8jOi/meS6m+Wtl+espuaYr01lcm1haWTor63ms5Xop6PmnpDlmajkuI3mlK/mjIHnmoTvvJpAXG5cbiMjIOS7u+S9lVVJ57uE5Lu26YO95LiN6ZyA6KaB6aKd5aSW5Luj56CB5p2l5o6n5Yi277yM5Zug5q2k5Luj56CB6YC76L6R6K6+6K6h5LiN6ZyA6KaB6K6+6K6hVUnnu4Tku7bnmoTnirbmgIHpgLvovpHvvIzmr5TlpoLvvJpcbi0gMeOAgei9ruaSree7hOS7tu+8jOWGhemDqOW3sue7j+WwgeijheWlveS6hui9ruaSreacuuWItu+8jOS8muiHquWKqOi9ruaSreWSjOabtOaWsOe0ouW8leS4juaMh+ekuuWZqO+8jOS4jemcgOimgemineWkluS7o+eggeadpeaOp+WItu+8m1xuLSAy44CBdGFi57uE5Lu277yM5YaF6YOo5bey57uP5bCB6KOF5aW95LqGdGFi5YiH5o2i5py65Yi277yM5Lya6Ieq5Yqo5YiH5o2i5ZKM5pu05paw57Si5byV5LiO5oyH56S65Zmo77yM5LiN6ZyA6KaB6aKd5aSW5Luj56CB5p2l5o6n5Yi277ybXG4tIDPjgIHlupXpg6jlip/og73lr7zoiKrmoI/nu4Tku7bvvIzlhoXpg6jlt7Lnu4/lsIHoo4Xlpb3kuoblupXpg6jlip/og73lr7zoiKrmoI/nmoTliIfmjaLmnLrliLbvvIzkvJroh6rliqjliIfmjaLlkozmm7TmlrDntKLlvJXkuI7mjIfnpLrlmajvvIzkuI3pnIDopoHpop3lpJbku6PnoIHmnaXmjqfliLbvvJtcbi0gNOOAgeWNlemAieOAgeWkmumAieOAgeWNlemAiee7hOOAgeWkmumAiee7hOWGhemDqOW3sue7j+WwgeijheWlveeKtuaAgeWIh+aNouacuuWItuWSjFVJ5Yi35paw77yM5LiN6ZyA6KaB6aKd5aSW5Luj56CB5p2l5o6n5Yi277ybXG5cbiMjIOS4jeW+l+iuvuiuoeS7u+S9lVVJ57uE5Lu25pi+56S655qE6Z2Z5oCB5pWw5o2u77yM5q+U5aaC77yaXG4tIDHjgIHova7mkq3jgIF0YWLjgIHlupXpg6jlip/og73lr7zoiKrmoI/jgIHljZXpgInjgIHlpJrpgInjgIHljZXpgInnu4TjgIHlpJrpgInnu4TnrYlVSee7hOS7tu+8jOWmguaenGh0bWzlt7Lnu4/lhpnlpb3kuobmmL7npLrnmoTmlbDmja7lkoxVSe+8jOmCo+S5iOWcqOS7o+eggeiuvuiuoeS4iuS4jeW+l+iuvuiuoeS7u+S9lemdmeaAgeaVsOaNru+8jOW/hemhu+S9v+eUqGh0bWzlt7Lnu4/lhpnlpb3nmoTmlbDmja7jgIJcbi0gMuOAgeS4jemcgOimgeS4uuS7u+S9lVVJ57uE5Lu26K6+6K6h5Lu75L2V5Lqk5LqS55qE5pWw5o2u77yM5Lul5Y+K5LiN5b6X6K6+6K6h5Lu75L2VVUnnu4Tku7bnmoRqc+aIlnRz5Luj56CB6YC76L6RXG5cbiMjIOS4jeW+l+i/h+W6puiuvuiuoe+8jOS4gOiIrOeugOWNlemhtemdou+8jOmAu+i+keWwseS8mumdnuW4uOeugOWNle+8jOe7neWvueS4jeiDveeugOWNlemXrumimOWkjeadguWMlu+8jOavlOWmgu+8mlxuLSAx44CB6Zeq5bGP6aG144CB5byV5a+86aG144CB5bm/5ZGK6aG1562J562J77yM5LiA6Iis6YC76L6R5bCx6Z2e5bi4566A5Y2V77yM57ud5a+55LiN6IO96L+H5bqm6K6+6K6hXG5cbiMjIOS4peagvOaMieeFp+S7peS4izXkuKrmraXpqqTov5vooYzorr7orqFcblxuIyMjIOesrOS4gOatpeOAgeivu+WPllxcYGRvYy975bqP5Y+3fS14eHjmqKHlnZfkuJrliqHpgLvovpHorr7orqEubWRcXGDmlofku7bvvIzlubbmoLnmja7nlKjmiLfovpPlhaXnmoTmj4/ov7DvvIzliIbmnpDmgJ3ogIPmgLvlhbHpnIDopoHorr7orqHlpJrlsJHkuKrpobXpnaLnmoTkuJrliqHpgLvovpHmlofmoaPvvIzlnKh0aG91Z2h05a2X5q615Lit6L6T5Ye677ya5omA6ZyA6K6+6K6h55qE6aG16Z2i5YiX6KGo44CCXG5cbiMjIyDnrKzkuozmraXjgIHmo4Dmn6VcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bmmK/lkKblrZjlnKjvvIzlpoLmnpzkuI3lrZjlnKjvvIzpgqPlv4XpobvlhYjliJvlu7rlubblrozlloTor6Xmlofku7bjgIJcbi0g5YW25LitanNvbueahOi/m+W6pueKtuaAgXRoaW5rU3RhdHVz5ZKMY29kZVN0YXR1c+WxnuaAp+eahOWAvOS4uu+8mnBlbmRpbmfmiJZjb21wbGV0ZWTjgILlhbbkuK10aGlua1N0YXR1c+aYr+iusOW9leS7o+eggemAu+i+keiuvuiuoeWujOaIkOeKtuaAge+8jGNvZGVTdGF0dXPmmK/orrDlvZXku6PnoIHlvIDlj5HlrozmiJDnirbmgIHjgIJcbi0gXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg55qEbW9kdWxlc+Wtl+auteeahOaooeWdl+WIl+ihqOaVsOaNruWSjOmhtemdouWIl+ihqOaVsOaNruW/hemhu+aMieeFp1xcYGRvYy9VSeiuvuiuoei/m+W6pi5qc29uXFxg6YeM6Z2i55qE5pWw5o2u5aSN5Yi26L+H5p2lXG4tIFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tueahOWbuuWummpzb27ljY/orq7vvJpcblxcYFxcYFxcYCBqc29uXG57XG4gICAgXCJ0b3RhbENvdW50XCI6IDI1LFxuICAgIFwibW9kdWxlc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwibW9kdWxlTmFtZUNOXCI6IFwi5ZCv5Yqo5qih5Z2XXCIsXG4gICAgICAgICAgICBcIm1vZHVsZU5hbWVFTlwiOiBcInN0YXJ0dXBcIixcbiAgICAgICAgICAgIFwicGFnZXNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcInBhZ2VOYW1lQ05cIjogXCLpl6rlsY/pobVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYWdlTmFtZUVOXCI6IFwic3BsYXNoUGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRoaW5rU3RhdHVzXCI6IFwiY29tcGxldGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY29kZVN0YXR1c1wiOiBcImNvbXBsZXRlZFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgXCJwYWdlTmFtZUNOXCI6IFwi5byV5a+86aG1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGFnZU5hbWVFTlwiOiBcIkd1aWRlUGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRoaW5rU3RhdHVzXCI6IFwiY29tcGxldGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY29kZVN0YXR1c1wiOiBcInBlbmRpbmdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJtb2R1bGVOYW1lQ05cIjogXCLotKblj7fns7vnu5/mqKHlnZdcIixcbiAgICAgICAgICAgIFwibW9kdWxlTmFtZUVOXCI6IFwiYWNjb3VudFwiLFxuICAgICAgICAgICAgXCJwYWdlc1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgIFwicGFnZU5hbWVDTlwiOiBcIueZu+W9lemhtVwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhZ2VOYW1lRU5cIjogXCJsb2dpblBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGlua1N0YXR1c1wiOiBcInBlbmRpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb2RlU3RhdHVzXCI6IFwicGVuZGluZ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgXVxufVxuXFxgXFxgXFxgXG5cbiMjIyDnrKzkuInmraXjgIHpobXpnaLku6PnoIHpgLvovpHorr7orqHliIbmnpDmoYbmnrZcblxuIyMjIyDpobXpnaLpu5jorqTkuJrliqHpgLvovpFcbi0gKirlpoLnlKjmiLfmsqHlnKjmj4/ov7DkuK3mmI7noa7mjIfmmI7pobXpnaLnmoTkuJrliqHpgLvovpHvvIzlhbbkuK3pobnnm67orr7orqHmlofmoaMnLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+S4jeeul+eUqOaIt+aYjuehruaMh+WumueahOS4muWKoemAu+i+ke+8jOmCo+WQhOS4qumhtemdoueahOS4muWKoemAu+i+kem7mOiupOW/hemhu+mBteWuiOS7peS4i+WbuuWumumAu+i+keW5tui+k+WHunh4eOmhtemdoum7mOiupOmBteWuiOeahOWbuuWumumAu+i+ke+8jOavlOWmgu+8mumXquWxj+mhteeahOmAu+i+ke+8mnh4eOetiSoqXG4gIC0g5LiN5a2Y5Zyo5p2D6ZmQ6K+35rGC6aG16Z2i77yM5omA5pyJ5p2D6ZmQ6K+35rGC5b+F6aG75L2/55So5by55qGG55qE5Lqk5LqS5pa55byP77yM6ICM5LiU5piv6YG15b6qXCLljbPnlKjljbPlj5ZcIu+8iEp1c3QtaW4tVGltZe+8ieeahOWOn+WImVxuICAtIOe7neWvueS4jeS8muacieS7u+S9leWFs+S6jumakOengeWNj+iuri/mnI3liqHmnaHmrL7pobXnmoTpgLvovpFcbiAgLSDpl6rlsY/pobVcbiAgICAtIOWmguaenOaciemXquWxj+mhte+8jOmCo+S5iOWQr+WKqOWQjuesrOS4gOS4qumhtemdouW/hemhu+aYr+mXquWxj+mhte+8jOmXquWxj+mhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOW8leWvvOmhteaIlummlumhteeahOi3r+W+hFxuICAgIC0g6Zeq5bGP6aG15LiN5YGa5Lu75L2V5Lia5Yqh6YC76L6R77yM5LiN6K+35rGC5Lu75L2V572R57uc5o6l5Y+j77yM5Y+q6ZyA5Yik5pat5piv5ZCm6aaW5qyh5ZCv5Yqo77yM5aaC5p6c6aaW5qyh5ZCv5Yqo5bCxeOenkuWQjui3s+WIsOW8leWvvOmhte+8jOWmguaenOS4jeaYr+mmluasoeWQr+WKqOWwsei3s+WIsOmmlumhtVxuICAgIC0g4p2MIOmXquWxj+mhtee7neWvueemgeatouWBmueahOS6i+aDhe+8mlxuICAgICAgLSDor7fmsYLku7vkvZXnvZHnu5zmjqXlj6NcbiAgICAgIC0g6K+35rGC54mI5pys5pu05pawQVBJ5o6l5Y+jXG4gICAgICAtIOi3s+WIsOmakOengeWNj+iuri/mnI3liqHmnaHmrL7pobVcbiAgICAgIC0g5by55Ye65Lu75L2V5YW25LuW5by55qGGXG4gICAgICAtIOS7u+S9leadg+mZkOivt+axglxuICAtIOW8leWvvOmhtVxuICAgID0g5byV5a+86aG15ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDkuI3kvJrmnInku7vkvZXnvZHnu5zor7fmsYLjgIHkuJrliqHpgLvovpHvvIzlvJXlr7zpobXku4Xku4XmmK/kuIDkuKrlsZXnpLrpnZnmgIHmlbDmja7nmoTpobXpnaJcbiAgICAtIOS4jemcgOimgeiHquWKqOi9ruaSrVxuICAgIC0g5LiA6Iis5pW05Liq6aG16Z2i5Y+q5pyJ5LiA5Liq6L2u5pKt57uE5Lu244CB6L2u5pKt5oyH56S65Zmo5ZKM5bqV6YOo5LiA5Liq5oyJ6ZKu77yM5bqV6YOo5oyJ6ZKu5Zyo6Z2e56ys5LiA6aG15pe25pi+56S65LiL5LiA5q2l77yM5Zyo5pyA5ZCO5LiA6aG15pe25pi+56S656uL5Y2z5L2T6aqMXG4gIC0g5bm/5ZGK6aG177yI5aaC5p6c5pyJ5bm/5ZGK6aG177yJXG4gICAgPSDlub/lkYrpobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDpppbpobXnmoTot6/lvoRcbiAgICAtIOW5v+WRiumhteeahOaVsOaNruS4jeWFgeiuuOWcqOmXquWxj+mhteivt+axgu+8jOW6lOivpeWcqOi/m+WFpemmlumhteWQjuivt+axgu+8jOW5tuS4lOS9v+eUqOacrOWcsOaMgeS5heWMluWwhuW5v+WRikFQSeaOpeWPo+eahOaVsOaNruWCqOWtmOi1t+adpe+8jOetieS4i+S4gOasoeWQr+WKqOmXquWxj+mhteaXtui3s+WIsOW5v+WRiumhtemdouWQju+8jOaJjeS7juacrOWcsOaMgeS5heWMluS4reiOt+WPluaVsOaNruW5tuWIneWni+WMluW5v+WRiumhteaYvuekuuWSjOS6pOS6klxuICAgIC0g5bm/5ZGK6aG155qE5pWw5o2u5b+F6aG75piv5Zyo6L+b5YWl6aaW6aG15ZCO5omN5Y+R6LW36K+35rGC77yM57ud5a+55LiN6IO95Zyo6Zeq5bGP6aG15Y+R6LW36K+35rGC77yM5bm25LiU5bm/5ZGK6aG155qE5pWw5o2u5Y+q5pi+56S65LiA5qyh77yM57ud5a+55LiN6IO96YeN5aSN5pi+56S677yM5aaC5p6c5pys5Zyw5oyB5LmF5YyW5qC55pys5rKh5pyJ5bm/5ZGK6aG155qE5pWw5o2u77yM6YKj5LiN6ZyA6KaB6Lez6L2s5ZKM5pi+56S65bm/5ZGK6aG1XG4gIC0g6aaW6aG1XG4gICAgLSDov5vlhaXpppbpobXkuIDoiKzpnIDopoHor7fmsYJhcHDniYjmnKzmm7TmlrBBUEnmjqXlj6PvvIzliKTmlq3mmK/lkKbpnIDopoHmm7TmlrDvvIzlpoLmnpzpnIDopoHmm7TmlrDlsLHlvLnlh7rmm7TmlrDlvLnmoYbvvIzlpoLmnpzkuI3pnIDopoHpgqPlsLHkuI3lgZrku7vkvZXkuovmg4VcbiAgICAtIOi/m+WFpemmlumhtei/mOimgeivu+WPluacrOWcsOaVsOaNru+8muWFqOWxgOmFjee9ruaVsOaNruOAguS4gOiIrOeUqOS6juWKn+iDveW8gOWFs+OAgUFCVGVzdOmFjee9ruOAgeW5v+WRiumFjee9ru+8iOWmguaenOacieW5v+WRiueahOivne+8ieetie+8jOivu+WPluWujOavleWQju+8jOi/mOimgee9kee7nOivt+axguS4gOasoeWFqOWxgOmFjee9rkFQSe+8jOWwhuWFqOWxgOmFjee9ruaVsOaNruabtOaWsOWIsOacrOWcsOaVsOaNruS4rVxuICAgIC0g5LiA6Iis5piv5pyJ5LiA5Liq5bqV6YOo5Yqf6IO95a+86Iiq5qCP77yM54K55Ye75bqV6YOo5Yqf6IO95a+86Iiq5qCP55qE5Zu+5qCH5Lya5YiH5o2i5Yiw5a+55bqU55qEdGFi6aG16Z2i77yMdGFi6aG16Z2i5LiA6Iis5pyJ5aSa5Liq77yM5q+P5LiqdGFi6aG16Z2i5pyJ5LiN5ZCM55qE5Lia5Yqh6YC76L6RXG4gICAgLSDlpoLmnpznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DmsqHmnInmmI7noa7mjIflrprpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og73vvIzpgqPkuYjkvaDlv4XpobvmgJ3ogIPpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og71pdGVt6aG5XG4gIC0g55m75b2V6aG1XG4gICAgLSDnmbvlvZXpobXmmK/nlKjmiLfngrnlh7vpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaLml7bvvIzmiY3kvJrot7PovazliLDnmoTpobXpnaLvvIzogIzkuI3mmK/ku47pl6rlsY/pobXliKTmlq3mmK/lkKbpnIDopoHnmbvlvZXnhLblkI7ot7Pov5vljrtcblxuIyMjIyAxLiDlip/og73mj4/ov7DliIbmnpBcbioq55uu5qCHKirvvJrmuIXmmbDlrprkuYnor6XpobXpnaLlnKjmlbTkuKrns7vnu5/kuK3nmoTogYzotKPlkozkuJrliqHku7flgLxcbi0gKirmoLjlv4Plip/og70qKu+8muivpemhtemdouino+WGs+S7gOS5iOaguOW/g+S4muWKoemXrumimO+8n1xuLSAqKuWKn+iDvei+ueeVjCoq77ya6K+l6aG16Z2i6LSf6LSj5ZOq5Lqb5Yqf6IO977yM5LiN6LSf6LSj5ZOq5Lqb5Yqf6IO977yfXG4tICoq5Lia5Yqh5Lu35YC8KirvvJror6XpobXpnaLkuLrnlKjmiLflkozkuJrliqHluKbmnaXku4DkuYjku7flgLzvvJ9cbi0gKirkvp3otZblhbPns7sqKu+8muivpemhtemdouS4juWFtuS7lumhtemdoi/mqKHlnZfnmoTkvp3otZblhbPns7vmmK/ku4DkuYjvvJ9cblxuIyMjIyAyLiDpobXpnaLovpPlhaXlkozovpPlh7rlj4LmlbDorr7orqFcbioq55uu5qCHKirvvJrnsr7noa7lrprkuYnpobXpnaLnmoTmlbDmja7mjqXlj6PlpZHnuqZcbi0gKirovpPlhaXlj4LmlbDliIbmnpAqKu+8mlxuICAtIOmhtemdouWQr+WKqOWPguaVsO+8iOS7juWFtuS7lumhtemdoui3s+i9rOS8oOWFpeeahOWPguaVsO+8iVxuICAtIOWPguaVsOWQjeensOOAgeaVsOaNruexu+Wei+OAgeaYr+WQpuW/heWhq+OAgem7mOiupOWAvFxuICAtIOWPguaVsOadpea6kO+8iOeUqOaIt+aTjeS9nOOAgeezu+e7n+eKtuaAgeOAgeWklumDqOS8oOWFpe+8iVxuICAtIOWPguaVsOmqjOivgeinhOWImeWSjOe6puadn+adoeS7tlxuLSAqKui+k+WHuuWPguaVsOWIhuaekCoq77yaXG4gIC0g6aG16Z2i5ZCR5YW25LuW6aG16Z2i5Lyg6YCS55qE5pWw5o2uXG4gIC0g6aG16Z2i5Lqn55Sf55qE5Ymv5L2c55So77yI54q25oCB5Y+Y5pu044CB5pWw5o2u5oyB5LmF5YyW77yJXG4gIC0g6aG16Z2i5Zue6LCD5ZKM5LqL5Lu26YCa55+lXG4tICoq5Y+C5pWw6K6+6K6h6KGo5qC8KirvvJpcbiAgXFxgXFxgXFxgbWFya2Rvd25cbiAgfCDlj4LmlbDnsbvlnosgfCDlj4LmlbDlkI3np7AgfCDmlbDmja7nsbvlnosgfCDmmK/lkKblv4XloasgfCDpu5jorqTlgLwgfCDor7TmmI4gfFxuICB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS18XG4gIHwg6L6T5YWlICAgICB8IHh4eCAgICAgIHwgc3RyaW5nICAgfCDmmK8gICAgICAgfCAtICAgICAgfCB4eHggIHxcbiAgfCDovpPlh7ogICAgIHwgeHh4ICAgICAgfCBudW1iZXIgICB8IOWQpiAgICAgICB8IDAgICAgICB8IHh4eCAgfFxuICBcXGBcXGBcXGBcblxuIyMjIyAzLiDpobXpnaLliqjmgIHmlbDmja7mnaXmupDorr7orqFcbioq55uu5qCHKirvvJrmorPnkIbpobXpnaLmiYDpnIDnmoTmiYDmnInliqjmgIHmlbDmja7lj4rlhbbojrflj5bmlrnlvI9cbi0gKirlkI7nq69BUEnmlbDmja4qKu+8mlxuICAtIOmcgOimgeiwg+eUqOWTquS6m+WQjuerr0FQSe+8n1xuICAtIEFQSeeahOiwg+eUqOaXtuacuuWSjOmikeeOh++8n1xuICAtIOaVsOaNrue8k+WtmOetlueVpe+8n1xuICAtIOmUmeivr+WkhOeQhuWSjOmHjeivleacuuWItu+8n1xuLSAqKuacrOWcsOaMgeS5heWMluaVsOaNrioq77yaXG4gIC0g6ZyA6KaB6K+75Y+WL+WGmeWFpeWTquS6m+acrOWcsOWtmOWCqOaVsOaNru+8n1xuICAtIOaVsOaNruWQjOatpeetlueVpe+8n1xuICAtIOaVsOaNrui/geenu+WSjOeJiOacrOWFvOWuue+8n1xuLSAqKuWFqOWxgOeKtuaAgeaVsOaNrioq77yaXG4gIC0g5L6d6LWW5ZOq5Lqb5YWo5bGA54q25oCB77yfXG4gIC0g5aaC5L2V5ZON5bqU5YWo5bGA54q25oCB5Y+Y5YyW77yfXG4tICoq5a6e5pe25pWw5o2u5pu05pawKirvvJpcbiAgLSDmmK/lkKbpnIDopoHlrp7ml7bmlbDmja7mm7TmlrDvvJ9cbiAgLSDmlbDmja7mm7TmlrDnmoTop6blj5HmnaHku7bvvJ9cblxuIyMjIyA0LiDmjInku6XkuIvmraXpqqTnlJ/miJDlrozmlbTnmoQgTWVybWFpZCDnqIvluo/mtYHnqIvlm77vvJpcbi0gMS4gKirnkIbop6PpnIDmsYIqKu+8jOagueaNruS9oOWcqCfnkIbop6Plip/og73mqKHlnZfnmoTpnIDmsYIn5q2l6aqk5Lit6K+75Y+W55qEJy5ieXRlZnVuL3vmlbDlrZfluo/lj7d9LXh4eOWKn+iDveaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZCfmlofku7bvvIznkIbop6Por6Xlip/og73mqKHlnZfnmoTpnIDmsYLvvIzlubbmgJ3ogIPmuIXmpZrku6XkuIvpl67popjvvJpcbiAgLSDwn46vIOeUqOaIt+WcuuaZr+WIhuaekO+8mlxuICAgIDEuICoq55yf5a6e55So5oi35Lya5Zyo5LuA5LmI5oOF5Ya15LiL5L2/55So6L+Z5Liq5Yqf6IO977yfKipcbiAgICAyLiAqKuS4jeWQjOexu+Wei+eahOeUqOaIt++8iOaWsOeUqOaIty/ogIHnlKjmiLcv5bey55m75b2VL+acqueZu+W9le+8ieS8muacieS7gOS5iOS4jeWQjOeahOihjOS4uui3r+W+hO+8nyoqXG4gICAgMy4gKirnlKjmiLfmnJ/mnJvku4DkuYjmoLfnmoTkvZPpqozvvJ/ku4DkuYjkvZPpqozmmK/kuI3lkIjnkIbnmoTvvJ8qKlxuICAtIPCflIQg54q25oCB566h55CG5YiG5p6Q77yaXG4gICAgNC4gKirov5nkuKrlip/og73pnIDopoFcIuiusOS9j1wi5LuA5LmI54q25oCB77yfKipcbiAgICA1LiAqKuS7gOS5iOaDheWGteS4i+eKtuaAgeS8muaUueWPmO+8nyoqXG4gICAgNi4gKirlpoLkvZXmo4Dmn6Xlkozpqozor4HlvZPliY3nirbmgIHvvJ8qKlxuICAtIPCfjLIg5Lia5Yqh5rWB56iL5YiG5p6Q77yaXG4gICAgNy4gKirov5nkuI3mmK/kuIDkuKrnur/mgKfmtYHnqIvvvIzmnInlk6rkupvliIbmlK/mg4XlhrXvvJ8qKlxuICAgIDguICoq5q+P5Liq5YiG5pSv55qE6Kem5Y+R5p2h5Lu25piv5LuA5LmI77yfKipcbiAgICA5LiAqKuW8guW4uOaDheWGteS4i+W6lOivpeWmguS9leWkhOeQhu+8nyoqXG4gIC0g8J+SoSDkuJrliqHlkIjnkIbmgKfmo4Dmn6XvvJpcbiAgICAxMC4gKirlpoLmnpzmiJHmmK/nlKjmiLfvvIzov5nkuKrmtYHnqIvorqnmiJHmhJ/op4nlkIjnkIblkJfvvJ8qKlxuICAgIDExLiAqKui/meS4quiuvuiuoeino+WGs+S6huS7gOS5iOecn+WunueahOS4muWKoemXrumimO+8nyoqXG4gICAgMTIuICoq5pyJ5rKh5pyJ6YGX5ryP6YeN6KaB55qE5Lia5Yqh6KeE5YiZ77yfKiogXG4tIDIuICoq5ouG6Kej6YC76L6RKiogIFxuICAtIOWwhumhtemdoua1geeoi+aLhuWIhuS4uuacgOWwj+mAu+i+keWNleWFg++8iOWmgu+8muivu+WPlui+k+WFpeOAgeWIpOaWreadoeS7tuOAgeiwg+eUqOacjeWKoeOAgeaYvuekuue7k+aenOetie+8ieOAgiAgXG4gIC0g5qCH6K6w5ZCE5Y2V5YWD5LmL6Ze055qE5YWI5ZCO6aG65bqP44CB5YiG5pSv5Y+K5b6q546v5YWz57O744CCICBcbi0gMy4gKirnu4Tnu4foioLngrkqKiAgXG4gIC0g5Li65q+P5Liq6YC76L6R5Y2V5YWD5YiG6YWN5LiA5Liq5ZSv5LiA5qCH6K+G77yI5aaC77yaQeOAgULjgIFD4oCm77yJ77yM5bm25rOo5piO6IqC54K557G75Z6L77yI5byA5aeLL+e7k+adn+OAgeWkhOeQhi/mk43kvZzjgIHliKTmlq3jgIHovpPlhaUv6L6T5Ye644CB5a2Q5rWB56iL77yJ44CCICBcbi0gNC4gKirnu5jliLYgTWVybWFpZCDku6PnoIEqKiAgXG4gIC0g6IqC54K55LiN6IO96K6+572u6IOM5pmv6Imy77yM57q/5p2h5ZKM5paH5a2X6aKc6Imy5L2/55SoIzMzM1xuICAtIOS9v+eUqCAnZmxvd2NoYXJ0JyDor63ms5XvvIzmjIkgXCJURFwi77yI5LuO5LiK5Yiw5LiL77yJ5oiWIFwiTFJcIu+8iOS7juW3puWIsOWPs++8ieaWueWQkee7hOe7h+iKgueCueOAgiAgXG4gIC0g55So566t5aS0ICgnLS0+Jykg6L+e5o6l5aSE55CG6IqC54K577yM55So5YiG5pSv6K+t5Y+lICgnfHllc3wnLCAnfG5vfCcpIOihqOi+vuWIpOaWreWIhuaUr+OAgiAgXG4gIC0g5aaC5pyJ5a2Q5rWB56iL77yM55SoICdzdWJncmFwaCcg5Z2X5bCB6KOF77yb5aaC5pyJ5b6q546v77yM55So5Zue546v566t5aS05oyH5ZCR5Yik5pat6IqC54K544CCICBcbi0gNS4gKirnpLrkvovmoLzlvI8qKiAgXG4gICAgQShb5byA5aeLXSkgIFxuICAgIEJbL+ivu+WPlueUqOaIt+i+k+WFpS9dICBcbiAgICBDe+eUqOaIt+aYr+WQpuW3sueZu+W9lT99ICBcbiAgICBDIC0tfOaYr3wtLT4gRFvmmL7npLrkuLvpobVdICBcbiAgICBDIC0tfOWQpnwtLT4gRVvot7PovaznmbvlvZXpobVdICBcbiAgICBFIC0tPiBGe+eZu+W9leaIkOWKnz99ICBcbiAgICBGIC0tfOaYr3wtLT4gRCAgXG4gICAgRiAtLXzlkKZ8LS0+IEdb5o+Q56S66ZSZ6K+v5bm26YeN6K+VXVxuICAgIEcgLS0+IEUgIFxuICAgIEQgLS0+IEgoW+e7k+adn10pXG5cbiMjIyDnrKzlm5vmraXjgIHmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGBcbi0g6K6+6K6h5LiA5Liq6aG16Z2i5a6M5q+V5ZCO77yM6ZyA6KaB5pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg6YeM6Z2i55qEdGhpbmtTdGF0dXPlrZfmrrXkuLpjb21wbGV0ZWTjgIJcblxuIyMjIOesrOS6lOatpeOAgeiuvuiuoei+k+WHuuimgeaxglxuKirlrozmiJDorr7orqHliIbmnpDlkI7vvIzlsIbnu5PmnpzlhpnlhaXliLDnlKjmiLfmjIflrprnmoTpobXpnaLmlofku7blpLnkuIvnmoRjb2RlRGVzaWduLm1k5paH5Lu25LitKipcblxuIyMjIyDmlofku7blhpnlhaXot6/lvoRcbi0g5YaZ5YWl6Lev5b6E77yac3JjL3h4eE1vZHVsZS94eHhQYWdlL2NvZGVEZXNpZ24ubWRcbi0g5YW25LiteHh4TW9kdWxl5ZKMeHh4UGFnZeagueaNrueUqOaIt+mcgOaxguWSjOmhtemdouWQjeensOehruWumlxuXG4jIyMg5paH5Lu25YaF5a655qC85byPXG5cXGBcXGBcXGBtYXJrZG93blxuIyBb6aG16Z2i5ZCN56ewXSDku6PnoIHpgLvovpHorr7orqHmlofmoaNcblxuIyMgMS4g5Yqf6IO95o+P6L+w5YiG5p6QXG5b6K+m57uG5o+P6L+w6K+l6aG16Z2i55qE5qC45b+D5Yqf6IO944CB5Lia5Yqh5Lu35YC844CB5Yqf6IO96L6555WM44CB5L6d6LWW5YWz57O7XVxuXG4jIyAyLiDpobXpnaLovpPlhaXlkozovpPlh7rlj4LmlbDorr7orqFcbiMjIyAyLjEg6L6T5YWl5Y+C5pWwXG58IOWPguaVsOWQjeensCB8IOaVsOaNruexu+WeiyB8IOaYr+WQpuW/heWhqyB8IOm7mOiupOWAvCB8IOivtOaYjiB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tfFxufCB4eHggICAgICB8IHN0cmluZyAgIHwg5pivICAgICAgIHwgLSAgICAgIHwgeHh4ICB8XG5cbiMjIyAyLjIg6L6T5Ye65Y+C5pWwXG58IOWPguaVsOWQjeensCB8IOaVsOaNruexu+WeiyB8IOaYr+WQpuW/heWhqyB8IOm7mOiupOWAvCB8IOivtOaYjiB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tfFxufCB4eHggICAgICB8IG51bWJlciAgIHwg5ZCmICAgICAgIHwgMCAgICAgIHwgeHh4ICB8XG5cbiMjIDMuIOmhtemdouWKqOaAgeaVsOaNruadpea6kOiuvuiuoVxuIyMjIDMuMSDlkI7nq69BUEnmlbDmja5cblvor6bnu4bmj4/ov7DpnIDopoHosIPnlKjnmoRBUEnjgIHosIPnlKjml7bmnLrjgIHnvJPlrZjnrZbnlaXnrYldXG5cbiMjIyAzLjIg5pys5Zyw5oyB5LmF5YyW5pWw5o2uXG5b6K+m57uG5o+P6L+w5pys5Zyw5a2Y5YKo55qE5L2/55So5pa55byPXVxuXG4jIyMgMy4zIOWFqOWxgOeKtuaAgeaVsOaNrlxuW+ivpue7huaPj+i/sOWFqOWxgOeKtuaAgeeahOS+nei1luWSjOWTjeW6lF1cblxuIyMgNC4g56iL5bqP5rWB56iL5Zu+XG4jIyMgNC4xIOeoi+W6j+a1geeoi+WbvlxuW+eoi+W6j+a1geeoi+Wbvl1cblxuIyMjIDQuMiDnqIvluo/mtYHnqIvlm77or6bnu4bmloflrZfmj4/ov7Bcblvlr7nnqIvluo/mtYHnqIvlm77nmoTor6bnu4bor7TmmI5dXG5cbiMjIyA0LjMg5pWw5o2u5rWB5ZCR5YiG5p6QXG5b6K+m57uG5o+P6L+w5pWw5o2u55qE5p2l5rqQ44CB5aSE55CG44CB5rWB5ZCRXVxuXG4jIyMgNC40IOS4muWKoeinhOWImeiuvuiuoVxuW+ivpue7huaPj+i/sOS4muWKoemqjOivgeinhOWImeOAgeadg+mZkOaOp+WItuOAgeW8guW4uOWkhOeQhuetiV1cblxuIyMg6K6+6K6h5Y6f5YiZXG4tICoq55So5oi35Lit5b+DKirvvJrku6XnlKjmiLfpnIDmsYLlkozkvZPpqozkuLrmoLjlv4Pov5vooYzorr7orqFcbi0gKirmlbDmja7pqbHliqgqKu+8muWfuuS6juaVsOaNrua1geWSjOeKtuaAgeWPmOWMlui/m+ihjOmAu+i+keiuvuiuoVxuLSAqKuaooeWdl+WMlioq77ya5L+d5oyB6aG16Z2i6IGM6LSj5Y2V5LiA77yM5o6l5Y+j5riF5pmwXG4tICoq5Y+v57u05oqk5oCnKirvvJrku6PnoIHpgLvovpHmuIXmmbDvvIzmmJPkuo7nkIbop6Plkozkv67mlLlcbi0gKirlj6/mianlsZXmgKcqKu+8muiAg+iZkeacquadpeWKn+iDveaJqeWxleeahOWPr+iDveaAp1xuLSAqKuWBpeWjruaApyoq77ya5YWF5YiG6ICD6JmR5byC5bi45oOF5Ya15ZKM6L6555WM5p2h5Lu2XG5cXGBcXGBcXGBcbmA7Il19
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZURlc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlRGVzaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBME12QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+i1hOa3seeahOS6p+WTgeiuvuiuoeWSjOS7o+eggeaetuaehOS4k+Wutu+8jOeOsOWcqOmcgOimgeagueaNrueUqOaIt+mcgOaxgui/m+ihjOS7o+eggemAu+i+keiuvuiuoeaAneiAg+W3peS9nO+8jOacgOe7iOi+k+WHuuivpue7hueahOS7o+eggeiuvuiuoeaWh+aho+OAglxuXG4jIyDph43opoHor7TmmI5cbi0g6L+Z5piv5Luj56CB5byA5Y+R5YmN55qE5YWz6ZSu6K6+6K6h546v6IqC77yM5b+F6aG75rex5bqm5oCd6ICD5Luj56CB6YC76L6R5p625p6E44CB5pWw5o2u5rWB5ZCR44CB56iL5bqP5rWB56iL5Zu+XG4tIOatpOmYtuauteS4k+azqOS6jumAu+i+keiuvuiuoeaAneiAg++8jOS4jea2ieWPiuWFt+S9k+S7o+eggee8luWGmVxuLSDliIbmnpDnu5PmnpzlsIbkvZzkuLrlkI7nu63ku6PnoIHlvIDlj5HnmoTph43opoHkvp3mja7lkozmjIflr7zmlofmoaNcblxuIyMg55CG6Kej5Yqf6IO95qih5Z2X55qE6ZyA5rGCXG4tIOiuvuiuoeS5i+WJje+8jOW/hemhu+WFiOivu+WPluW9k+WJjeW3peeoi+ebruW9leS4i+eahCcuYnl0ZWZ1bi975pWw5a2X5bqP5Y+3fS14eHjlip/og73mqKHlnZfkuJrliqHpgLvovpHorr7orqEubWQn5paH5Lu277yM5LqG6Kej6K+l5Yqf6IO95qih5Z2X55qE6K+l5Yqf6IO95qih5Z2X5LuL57uN44CB6aG16Z2i6K+m57uG5L+h5oGv5YiX6KGo44CB6aG16Z2i5Lia5Yqh6YC76L6R5rWB56iL5Zu+XG4tIOiuvuiuoeS5i+WJje+8jOW/hemhu+WFiOivu+WPluW9k+WJjeW3peeoi+ebruW9leS4i+eahHNyYy94eHgo5qih5Z2X5ZCN5a2XKS94eHhQYWdlL3h4eFBhZ2UuaHRtbOeahFVJ55WM6Z2i5paH5Lu277yM5LqG6Kej6aG16Z2i57uT5p6E44CB57uE5Lu244CB5biD5bGA44CB5qC35byP562J5YWz6ZSu5L+h5oGvXG4tIOWmguaenOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOiuvuiuoVxuXG4jIyAqKk1lcm1haWTor63ms5Xop4TliJkqKlxuXG4jIyMgMeOAgemhtemdouS9v+eUqOaWueaLrOWPt1td5p2l6KGo56S66aG16Z2i5ZCN5a2X77yM5Yqf6IO95qih5Z2X5L2/55So5Y+M5ous5Y+355qE5ZyG5b2i6IqC54K55p2l6KGo56S65qih5Z2XXG4tIOKchSBBW+aYvuekuuWQr+WKqOmhtV1cbi0g4pyFIEkoKOa2iOaBr+mAmuefpeaooeWdlykpO1xuLSDinYwgQVvmtojmga/pgJrnn6XmqKHlnZddO1xuLSDinYwgSVvmtojmga/pgJrnn6XmqKHlnZddO1xuXG4jIyMgMuOAgeaWueaLrOWPt+WGheWuueinhOWIme+8mlxuLSDinIUg5q2j56Gu77yaQVvmraPluLjmlofmnKxdXG4tIOKdjCDplJnor6/vvJpBW+aWh+acrCjmi6zlj7cpXVxuLSDinIUg5L+u5aSN77yaQVtcIuaWh+acrCjmi6zlj7cpXCJdXG4tIOaguOW/g+WOn+WboO+8mk1lcm1haWTop6PmnpDlmajlsIblnIbmi6zlj7cgKCkg6KeG5Li654m55q6K6K+t5rOV5YWD57Sg77yM5Zyo5pa55ous5Y+3IFtdIOWGhemDqOS9v+eUqOS8muWvvOiHtOino+aekOWGsueqgeOAglxuLSDmraPnoa7lhpnms5XkvovlrZDvvJpcbiAgLSBBW+aYvuekuuWQr+WKqOmhtV0gICAgLy8g55yB55Wl5o6J6aG16Z2i5ZCN5a2XXG4gIC0gQVvmmL7npLrlkK/liqjpobUgc3BsYXNoXSAgICAvLyDkvb/nlKjnqbrmoLxcbiAgLSBBW+aYvuekuuWQr+WKqOmhtS1zcGxhc2hdICAgIC8vIOS9v+eUqOi/nuWtl+esplxuICAtIEFbXCLmmL7npLrlkK/liqjpobUoc3BsYXNoKVwiXSAvLyDkvb/nlKjlj4zlvJXlj7dcblxuIyMjIDPjgIHnpoHmraLkvb/nlKjlj4zlvJXlj7fvvIzlv4Xpobvkvb/nlKjljZXlvJXlj7fmiJbnm7TmjqXljrvmjonlj4zlvJXlj7dcbi0g4pyFIOato+ehru+8mkFb5paH5pysXVxuLSDinIUg5L+u5aSN77yaQVsn5paH5pysKOaLrOWPtyknXVxuLSDinYwg6ZSZ6K+v77yaQVtcIuaWh+acrCjmi6zlj7cpXCJdXG4tIOKchSBBIC0tIOeCueWHu+iBlOezu+S5sOWutiAtLT4gQlvmtojmga/pobXpnaJdO1xuLSDinYwgQSAtLSDngrnlh7tcIuiBlOezu+S5sOWutlwiIC0tPiBCW+a2iOaBr+mhtemdol07XG4tIOaguOW/g+WOn+WboO+8mk1lcm1haWTop6PmnpDlmajlj4zlvJXlj7fkvJrlh7rplJnjgIJcblxuIyMjIDTjgIHlip/og73mqKHlnZfnmoTpobXpnaLkuqTkupLmk43kvZzlpoLpnIDot7PovazliLDlhbbku5blip/og73mqKHlnZfvvIzlv4Xpobvkvb/nlKjlj4zmi6zlj7fnmoTlnIblvaLoioLngrnmnaXooajnpLrmqKHlnZdcbi0g4pyFIEYgLS0gXCLogZTns7vkubDlrrZcIiAtLT4gSSgo5raI5oGv6YCa55+l5qih5Z2XKSk7XG4tIOKdjCBGIC0tIFwi6IGU57O75Lmw5a62XCIgLS0+IElb5raI5oGv6YCa55+l5qih5Z2XXTtcblxuIyMjIDXjgIHml6DorrrmmK/oioLngrnlhoXnmoTmlofmnKzov5jmmK/ov57mjqXnur/kuIrnmoTmlofmnKznu53lr7nkuI3og73mnInnqbrmoLzvvIzlv4Xpobvnm7TmjqXljrvmjonnqbrmoLzvvIzlkKbliJnkvJrlh7rnjrDpnZ7luLjkuKXph43plJnor6/jgIJcbi0g4pyFIOato+ehru+8mkFb5paH5pysXVxuLSDinYwg6ZSZ6K+v77yaQVsg5paH5pysIF1cbi0g4pyFIOS/ruWkje+8mkFb5paH5pysXVxuLSDinYwgQ3sxLiDmloflrZd9O1xuLSDinIUg5L+u5aSN77yaQ3sxLuaWh+Wtl307XG4tIOKdjCBcIjEuIOiOt+WPlumqjOivgeeggVwiO1xuLSDinIUg5L+u5aSN77yaXCIxLuiOt+WPlumqjOivgeeggVwiO1xuXG4jIyMgNuOAgeemgeatouWGmeS7u+S9leagt+W8j+eahOS7o+eggVxuLSDinYwg6ZSZ6K+v77yac3R5bGUgQSBmaWxsOiNlMWY1ZmVcbi0g4p2MIOmUmeivr++8mioqKiBmaWxsOioqKlxuXG4jIyMgN+OAgeemgeatouWGmeS7peS4i+Wtl+espu+8jOWQpuWImeS8muWHuumUme+8jOi/meS6m+Wtl+espuaYr01lcm1haWTor63ms5Xop6PmnpDlmajkuI3mlK/mjIHnmoTvvJpAXG5cbiMjIOS7u+S9lVVJ57uE5Lu26YO95LiN6ZyA6KaB6aKd5aSW5Luj56CB5p2l5o6n5Yi277yM5Zug5q2k5Luj56CB6YC76L6R6K6+6K6h5LiN6ZyA6KaB6K6+6K6hVUnnu4Tku7bnmoTnirbmgIHpgLvovpHvvIzmr5TlpoLvvJpcbi0gMeOAgei9ruaSree7hOS7tu+8jOWGhemDqOW3sue7j+WwgeijheWlveS6hui9ruaSreacuuWItu+8jOS8muiHquWKqOi9ruaSreWSjOabtOaWsOe0ouW8leS4juaMh+ekuuWZqO+8jOS4jemcgOimgemineWkluS7o+eggeadpeaOp+WItu+8m1xuLSAy44CBdGFi57uE5Lu277yM5YaF6YOo5bey57uP5bCB6KOF5aW95LqGdGFi5YiH5o2i5py65Yi277yM5Lya6Ieq5Yqo5YiH5o2i5ZKM5pu05paw57Si5byV5LiO5oyH56S65Zmo77yM5LiN6ZyA6KaB6aKd5aSW5Luj56CB5p2l5o6n5Yi277ybXG4tIDPjgIHlupXpg6jlip/og73lr7zoiKrmoI/nu4Tku7bvvIzlhoXpg6jlt7Lnu4/lsIHoo4Xlpb3kuoblupXpg6jlip/og73lr7zoiKrmoI/nmoTliIfmjaLmnLrliLbvvIzkvJroh6rliqjliIfmjaLlkozmm7TmlrDntKLlvJXkuI7mjIfnpLrlmajvvIzkuI3pnIDopoHpop3lpJbku6PnoIHmnaXmjqfliLbvvJtcbi0gNOOAgeWNlemAieOAgeWkmumAieOAgeWNlemAiee7hOOAgeWkmumAiee7hOWGhemDqOW3sue7j+WwgeijheWlveeKtuaAgeWIh+aNouacuuWItuWSjFVJ5Yi35paw77yM5LiN6ZyA6KaB6aKd5aSW5Luj56CB5p2l5o6n5Yi277ybXG5cbiMjIOS4jeW+l+iuvuiuoeS7u+S9lVVJ57uE5Lu25pi+56S655qE6Z2Z5oCB5pWw5o2u77yM5q+U5aaC77yaXG4tIDHjgIHova7mkq3jgIF0YWLjgIHlupXpg6jlip/og73lr7zoiKrmoI/jgIHljZXpgInjgIHlpJrpgInjgIHljZXpgInnu4TjgIHlpJrpgInnu4TnrYlVSee7hOS7tu+8jOWmguaenGh0bWzlt7Lnu4/lhpnlpb3kuobmmL7npLrnmoTmlbDmja7lkoxVSe+8jOmCo+S5iOWcqOS7o+eggeiuvuiuoeS4iuS4jeW+l+iuvuiuoeS7u+S9lemdmeaAgeaVsOaNru+8jOW/hemhu+S9v+eUqGh0bWzlt7Lnu4/lhpnlpb3nmoTmlbDmja7jgIJcbi0gMuOAgeS4jemcgOimgeS4uuS7u+S9lVVJ57uE5Lu26K6+6K6h5Lu75L2V5Lqk5LqS55qE5pWw5o2u77yM5Lul5Y+K5LiN5b6X6K6+6K6h5Lu75L2VVUnnu4Tku7bnmoRqc+aIlnRz5Luj56CB6YC76L6RXG5cbiMjIOS4jeW+l+i/h+W6puiuvuiuoe+8jOS4gOiIrOeugOWNlemhtemdou+8jOmAu+i+keWwseS8mumdnuW4uOeugOWNle+8jOe7neWvueS4jeiDveeugOWNlemXrumimOWkjeadguWMlu+8jOavlOWmgu+8mlxuLSAx44CB6Zeq5bGP6aG144CB5byV5a+86aG144CB5bm/5ZGK6aG1562J562J77yM5LiA6Iis6YC76L6R5bCx6Z2e5bi4566A5Y2V77yM57ud5a+55LiN6IO96L+H5bqm6K6+6K6hXG5cbiMjIOS4peagvOaMieeFp+S7peS4izTkuKrmraXpqqTov5vooYzorr7orqFcblxuIyMjIOesrOS4gOatpeOAgeajgOafpVxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tuaYr+WQpuWtmOWcqO+8jOWmguaenOS4jeWtmOWcqO+8jOmCo+W/hemhu+WFiOWIm+W7uuW5tuWujOWWhOivpeaWh+S7tuOAglxuLSDlhbbkuK1qc29u55qE6L+b5bqm54q25oCBdGhpbmtTdGF0dXPlkoxjb2RlU3RhdHVz5bGe5oCn55qE5YC85Li677yacGVuZGluZ+aIlmNvbXBsZXRlZOOAguWFtuS4rXRoaW5rU3RhdHVz5piv6K6w5b2V5Luj56CB6YC76L6R6K6+6K6h5a6M5oiQ54q25oCB77yMY29kZVN0YXR1c+aYr+iusOW9leS7o+eggeW8gOWPkeWujOaIkOeKtuaAgeOAglxuLSBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDnmoRtb2R1bGVz5a2X5q6155qE5qih5Z2X5YiX6KGo5pWw5o2u5ZKM6aG16Z2i5YiX6KGo5pWw5o2u5b+F6aG75oyJ54WnXFxgZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb25cXGDph4zpnaLnmoTmlbDmja7lpI3liLbov4fmnaVcbi0gXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu255qE5Zu65a6aanNvbuWNj+iuru+8mlxuXFxgXFxgXFxgIGpzb25cbntcbiAgICBcInRvdGFsQ291bnRcIjogMjUsXG4gICAgXCJtb2R1bGVzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgXCJtb2R1bGVOYW1lQ05cIjogXCLlkK/liqjmqKHlnZdcIixcbiAgICAgICAgICAgIFwibW9kdWxlTmFtZUVOXCI6IFwic3RhcnR1cFwiLFxuICAgICAgICAgICAgXCJwYWdlc1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwicGFnZU5hbWVDTlwiOiBcIumXquWxj+mhtVwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhZ2VOYW1lRU5cIjogXCJzcGxhc2hQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGhpbmtTdGF0dXNcIjogXCJjb21wbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb2RlU3RhdHVzXCI6IFwiY29tcGxldGVkXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgICAgICBcInBhZ2VOYW1lQ05cIjogXCLlvJXlr7zpobVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYWdlTmFtZUVOXCI6IFwiR3VpZGVQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidGhpbmtTdGF0dXNcIjogXCJjb21wbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb2RlU3RhdHVzXCI6IFwicGVuZGluZ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcIm1vZHVsZU5hbWVDTlwiOiBcIui0puWPt+ezu+e7n+aooeWdl1wiLFxuICAgICAgICAgICAgXCJtb2R1bGVOYW1lRU5cIjogXCJhY2NvdW50XCIsXG4gICAgICAgICAgICBcInBhZ2VzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgXCJwYWdlTmFtZUNOXCI6IFwi55m75b2V6aG1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGFnZU5hbWVFTlwiOiBcImxvZ2luUGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInRoaW5rU3RhdHVzXCI6IFwicGVuZGluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNvZGVTdGF0dXNcIjogXCJwZW5kaW5nXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdXG59XG5cXGBcXGBcXGBcblxuIyMjIOesrOS6jOatpeOAgeS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36K+75Y+WJ3NyYy975qih5Z2X5ZCN5a2XfS976aG16Z2i5ZCN5a2XfVBhZ2Uve+mhtemdouWQjeWtl31QYWdlLmh0bWwn6K+l6aG16Z2i55qESHRtbOmhtemdou+8jOeQhuino+ivpemhtemdouaYvuekuueahOWFg+e0oOacieWTquS6m++8jOmcgOimgeWunueOsOS7gOS5iOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+keOAglxuXG4jIyMg56ys5LiJ5q2l44CB6aG16Z2i5Luj56CB6YC76L6R6K6+6K6h5YiG5p6Q5qGG5p62XG5cbiMjIyMg6aG16Z2i6buY6K6k5Lia5Yqh6YC76L6RXG4tICoq5aaC55So5oi35rKh5Zyo5o+P6L+w5Lit5piO56Gu5oyH5piO6aG16Z2i55qE5Lia5Yqh6YC76L6R77yM5YW25Lit6aG555uu6K6+6K6h5paH5qGjJy5ieXRlZnVuL3vmlbDlrZfluo/lj7d9LXh4eOWKn+iDveaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZCfkuI3nrpfnlKjmiLfmmI7noa7mjIflrprnmoTkuJrliqHpgLvovpHvvIzpgqPlkITkuKrpobXpnaLnmoTkuJrliqHpgLvovpHpu5jorqTlv4XpobvpgbXlrojku6XkuIvlm7rlrprpgLvovpHlubbovpPlh7p4eHjpobXpnaLpu5jorqTpgbXlrojnmoTlm7rlrprpgLvovpHvvIzmr5TlpoLvvJrpl6rlsY/pobXnmoTpgLvovpHvvJp4eHjnrYkqKlxuICAtIOS4jeWtmOWcqOadg+mZkOivt+axgumhtemdou+8jOaJgOacieadg+mZkOivt+axguW/hemhu+S9v+eUqOW8ueahhueahOS6pOS6kuaWueW8j++8jOiAjOS4lOaYr+mBteW+qlwi5Y2z55So5Y2z5Y+WXCLvvIhKdXN0LWluLVRpbWXvvInnmoTljp/liJlcbiAgLSDnu53lr7nkuI3kvJrmnInku7vkvZXlhbPkuo7pmpDnp4HljY/orq4v5pyN5Yqh5p2h5qy+6aG155qE6YC76L6RXG4gIC0g6Zeq5bGP6aG1XG4gICAgLSDlpoLmnpzmnInpl6rlsY/pobXvvIzpgqPkuYjlkK/liqjlkI7nrKzkuIDkuKrpobXpnaLlv4XpobvmmK/pl6rlsY/pobXvvIzpl6rlsY/pobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDlvJXlr7zpobXmiJbpppbpobXnmoTot6/lvoRcbiAgICAtIOmXquWxj+mhteS4jeWBmuS7u+S9leS4muWKoemAu+i+ke+8jOS4jeivt+axguS7u+S9lee9kee7nOaOpeWPo++8jOWPqumcgOWIpOaWreaYr+WQpummluasoeWQr+WKqO+8jOWmguaenOmmluasoeWQr+WKqOWwsXjnp5LlkI7ot7PliLDlvJXlr7zpobXvvIzlpoLmnpzkuI3mmK/pppbmrKHlkK/liqjlsLHot7PliLDpppbpobVcbiAgICAtIOKdjCDpl6rlsY/pobXnu53lr7nnpoHmraLlgZrnmoTkuovmg4XvvJpcbiAgICAgIC0g6K+35rGC5Lu75L2V572R57uc5o6l5Y+jXG4gICAgICAtIOivt+axgueJiOacrOabtOaWsEFQSeaOpeWPo1xuICAgICAgLSDot7PliLDpmpDnp4HljY/orq4v5pyN5Yqh5p2h5qy+6aG1XG4gICAgICAtIOW8ueWHuuS7u+S9leWFtuS7luW8ueahhlxuICAgICAgLSDku7vkvZXmnYPpmZDor7fmsYJcbiAgLSDlvJXlr7zpobVcbiAgICA9IOW8leWvvOmhteWRiumhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOmmlumhteeahOi3r+W+hFxuICAgIC0g5LiN5Lya5pyJ5Lu75L2V572R57uc6K+35rGC44CB5Lia5Yqh6YC76L6R77yM5byV5a+86aG15LuF5LuF5piv5LiA5Liq5bGV56S66Z2Z5oCB5pWw5o2u55qE6aG16Z2iXG4gICAgLSDkuI3pnIDopoHoh6rliqjova7mkq1cbiAgICAtIOS4gOiIrOaVtOS4qumhtemdouWPquacieS4gOS4qui9ruaSree7hOS7tuOAgei9ruaSreaMh+ekuuWZqOWSjOW6lemDqOS4gOS4quaMiemSru+8jOW6lemDqOaMiemSruWcqOmdnuesrOS4gOmhteaXtuaYvuekuuS4i+S4gOatpe+8jOWcqOacgOWQjuS4gOmhteaXtuaYvuekuueri+WNs+S9k+mqjFxuICAtIOW5v+WRiumhte+8iOWmguaenOacieW5v+WRiumhte+8iVxuICAgID0g5bm/5ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDlub/lkYrpobXnmoTmlbDmja7kuI3lhYHorrjlnKjpl6rlsY/pobXor7fmsYLvvIzlupTor6XlnKjov5vlhaXpppbpobXlkI7or7fmsYLvvIzlubbkuJTkvb/nlKjmnKzlnLDmjIHkuYXljJblsIblub/lkYpBUEnmjqXlj6PnmoTmlbDmja7lgqjlrZjotbfmnaXvvIznrYnkuIvkuIDmrKHlkK/liqjpl6rlsY/pobXml7bot7PliLDlub/lkYrpobXpnaLlkI7vvIzmiY3ku47mnKzlnLDmjIHkuYXljJbkuK3ojrflj5bmlbDmja7lubbliJ3lp4vljJblub/lkYrpobXmmL7npLrlkozkuqTkupJcbiAgICAtIOW5v+WRiumhteeahOaVsOaNruW/hemhu+aYr+WcqOi/m+WFpemmlumhteWQjuaJjeWPkei1t+ivt+axgu+8jOe7neWvueS4jeiDveWcqOmXquWxj+mhteWPkei1t+ivt+axgu+8jOW5tuS4lOW5v+WRiumhteeahOaVsOaNruWPquaYvuekuuS4gOasoe+8jOe7neWvueS4jeiDvemHjeWkjeaYvuekuu+8jOWmguaenOacrOWcsOaMgeS5heWMluagueacrOayoeacieW5v+WRiumhteeahOaVsOaNru+8jOmCo+S4jemcgOimgei3s+i9rOWSjOaYvuekuuW5v+WRiumhtVxuICAtIOmmlumhtVxuICAgIC0g6L+b5YWl6aaW6aG15LiA6Iis6ZyA6KaB6K+35rGCYXBw54mI5pys5pu05pawQVBJ5o6l5Y+j77yM5Yik5pat5piv5ZCm6ZyA6KaB5pu05paw77yM5aaC5p6c6ZyA6KaB5pu05paw5bCx5by55Ye65pu05paw5by55qGG77yM5aaC5p6c5LiN6ZyA6KaB6YKj5bCx5LiN5YGa5Lu75L2V5LqL5oOFXG4gICAgLSDov5vlhaXpppbpobXov5jopoHor7vlj5bmnKzlnLDmlbDmja7vvJrlhajlsYDphY3nva7mlbDmja7jgILkuIDoiKznlKjkuo7lip/og73lvIDlhbPjgIFBQlRlc3TphY3nva7jgIHlub/lkYrphY3nva7vvIjlpoLmnpzmnInlub/lkYrnmoTor53vvInnrYnvvIzor7vlj5blrozmr5XlkI7vvIzov5jopoHnvZHnu5zor7fmsYLkuIDmrKHlhajlsYDphY3nva5BUEnvvIzlsIblhajlsYDphY3nva7mlbDmja7mm7TmlrDliLDmnKzlnLDmlbDmja7kuK1cbiAgICAtIOS4gOiIrOaYr+acieS4gOS4quW6lemDqOWKn+iDveWvvOiIquagj++8jOeCueWHu+W6lemDqOWKn+iDveWvvOiIquagj+eahOWbvuagh+S8muWIh+aNouWIsOWvueW6lOeahHRhYumhtemdou+8jHRhYumhtemdouS4gOiIrOacieWkmuS4qu+8jOavj+S4qnRhYumhtemdouacieS4jeWQjOeahOS4muWKoemAu+i+kVxuICAgIC0g5aaC5p6c55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w5rKh5pyJ5piO56Gu5oyH5a6a6aaW6aG15bqV6YOo5Yqf6IO95a+86Iiq5qCP5pyJ5ZOq5Lqb5Yqf6IO977yM6YKj5LmI5L2g5b+F6aG75oCd6ICD6aaW6aG15bqV6YOo5Yqf6IO95a+86Iiq5qCP5pyJ5ZOq5Lqb5Yqf6IO9aXRlbemhuVxuICAtIOeZu+W9lemhtVxuICAgIC0g55m75b2V6aG15piv55So5oi354K55Ye76ZyA6KaB55m75b2V5omN6IO96K6/6Zeu55qE6aG16Z2i5pe277yM5omN5Lya6Lez6L2s5Yiw55qE6aG16Z2i77yM6ICM5LiN5piv5LuO6Zeq5bGP6aG15Yik5pat5piv5ZCm6ZyA6KaB55m75b2V54S25ZCO6Lez6L+b5Y67XG5cbiMjIyMgMS4g6aG16Z2i6L6T5YWl5ZKM6L6T5Ye65Y+C5pWw6K6+6K6hXG4qKuebruaghyoq77ya57K+56Gu5a6a5LmJ6aG16Z2i55qE5pWw5o2u5o6l5Y+j5aWR57qmXG4tICoq6L6T5YWl5Y+C5pWw5YiG5p6Q6aG16Z2i5p6E6YCg5Ye95pWw5Y+C5pWw77yI5LuO5YW25LuW6aG16Z2i6Lez6L2s5Lyg5YWl55qE5Y+C5pWw77yJKirvvJpcblxuIyMjIyAyLiDpobXpnaLliqjmgIHmlbDmja7mnaXmupDorr7orqFcbioq55uu5qCHKirvvJrmorPnkIbpobXpnaLmiYDpnIDnmoTmiYDmnInliqjmgIHmlbDmja7lj4rlhbbojrflj5bmlrnlvI9cbi0gKirlkI7nq69BUEnmlbDmja4qKu+8mlxuICAtIOmcgOimgeiwg+eUqOWTquS6m+WQjuerr0FQSe+8n1xuICAtIEFQSeeahOiwg+eUqOaXtuacuuWSjOmikeeOh++8n1xuICAtIOaVsOaNrue8k+WtmOetlueVpe+8n1xuICAtIOmUmeivr+WkhOeQhuWSjOmHjeivleacuuWItu+8n1xuLSAqKuacrOWcsOaMgeS5heWMluaVsOaNrioq77yaXG4gIC0g6ZyA6KaB6K+75Y+WL+WGmeWFpeWTquS6m+acrOWcsOWtmOWCqOaVsOaNru+8n1xuLSAqKuWFqOWxgOmdmeaAgeWPmOmHj+aVsOaNrioq77yaXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7snc3JjL0FwcGxpY2F0aW9uLnRzJ++8jOafpeeci+ivpemhtemdouS+nei1luWTquS6m+WFqOWxgOmdmeaAgeWPmOmHj++8jOS5n+acieWPr+iDveS4jemcgOimgeS+nei1lueahFxuXG4jIyMjIDMuIOeUn+aIkOWujOaVtOeahCBNZXJtYWlkIOeoi+W6j+a1geeoi+WbvlxuXG4jIyMg56ys5Zub5q2l44CB5pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxgXG4tIOiuvuiuoeS4gOS4qumhtemdouWujOavleWQju+8jOmcgOimgeabtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOmHjOmdoueahHRoaW5rU3RhdHVz5a2X5q615Li6Y29tcGxldGVk44CCXG5cbiMjIyDnrKzkupTmraXjgIHorr7orqHovpPlh7ropoHmsYJcbioq5a6M5oiQ6K6+6K6h5YiG5p6Q5ZCO77yM5bCG57uT5p6c5YaZ5YWl5Yiw55So5oi35oyH5a6a55qE6aG16Z2i5paH5Lu25aS55LiL55qEY29kZURlc2lnbi5tZOaWh+S7tuS4rSoqXG5cbiMjIyMg5paH5Lu25YaZ5YWl6Lev5b6EXG4tIOWGmeWFpei3r+W+hO+8mnNyYy94eHhNb2R1bGUveHh4UGFnZS9jb2RlRGVzaWduLm1kXG4tIOWFtuS4rXh4eE1vZHVsZeWSjHh4eFBhZ2XmoLnmja7nlKjmiLfpnIDmsYLlkozpobXpnaLlkI3np7Dnoa7lrppcblxuIyMjIOaWh+S7tuWGheWuueagvOW8j1xuXFxgXFxgXFxgbWFya2Rvd25cbiMgW+mhtemdouWQjeensF0g5Luj56CB6YC76L6R6K6+6K6h5paH5qGjXG5cbiMjIOS4gC4g6aG16Z2i5p6E6YCg5Ye95pWw5Y+C5pWwXG58IOWPguaVsOWQjeensCB8IOaVsOaNruexu+WeiyB8IOaYr+WQpuW/heWhqyB8IOm7mOiupOWAvCB8IOivtOaYjiB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tfFxufCB4eHggICAgICB8IHN0cmluZyAgIHwg5pivICAgICAgIHwgLSAgICAgIHwgeHh4ICB8XG5cbiMjIOS6jC4g6aG16Z2i5Yqo5oCB5pWw5o2u5p2l5rqQ6K6+6K6hXG4jIyMgMi4xIOWQjuerr0FQSeaVsOaNrlxuW+aRmOimgeamguaLrOaPj+i/sOmcgOimgeiwg+eUqOeahEFQSeOAgeiwg+eUqOaXtuacuuOAgee8k+WtmOetlueVpeetiV1cblxuIyMjIDIuMiDmnKzlnLDmjIHkuYXljJbmlbDmja5cblvmkZjopoHmpoLmi6zmj4/ov7DmmK/lkKbpnIDopoHmnKzlnLDlrZjlgqjvvIzlpoLmnpzpnIDopoHvvIzliJnmj4/ov7DmnKzlnLDlrZjlgqjnmoRrZXnlkox2YWx1ZV1cblxuIyMjIDIuMyDlhajlsYDpnZnmgIHlj5jph4/mlbDmja5cblvmkZjopoHmpoLmi6zmj4/ov7DmmK/lkKbpnIDopoHlhajlsYDpnZnmgIHlj5jph4/vvIzlpoLmnpzpnIDopoHvvIzliJnmj4/ov7DlhajlsYDpnZnmgIHlj5jph4/nmoTlkI3np7DlkozlgLxdXG5cbiMjIOS4iS4g56iL5bqP5rWB56iL5Zu+XG5b56iL5bqP5rWB56iL5Zu+XVxuXFxgXFxgXFxgXG5gOyJdfQ==
|