bytefun-ai-mcp
Version:
ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发
92 lines (85 loc) • 21.7 kB
JavaScript
export const uiDesignPromptTemplate = `# 1、UI设计要求
- **必须遵循\`.bytefun/UI设计规范.md\`的UI设计规范,并且html里面不能增删改\`:root\`颜色变量,颜色只能使用html文件的\`head\`标签里已经定义好的\`:root\`颜色变量,不能直接使用颜色值或私自定义其他颜色变量**
- 遵循iPhone 16 Pro尺寸规格(宽度393px高度852px)
- 采用明亮、活力的配色方案
- 如用户没有明确描述说明页面背景色,只有闪屏页面的背景色允许设置primary主色或primary与secondary的渐变色,其他页面必须使用非primary与非secondary的纯色做页面背景色,比如一般使用白色系,如果是暗黑风那就是黑色系。
- 输入框\`input\`如果需要展示文字label,尽量使用icon代替文字label,并且icon重叠在输入框的左侧,这样整个页面的空间利用率高。
- 页面开头必须要有一个手机状态栏phoneTopStatusBar节点,并且手机状态栏phoneTopStatusBar节点的高度必须永远设计为22px,必须设置height、min-height、max-height属性和值是22px,已经背景色是透明的,css代码如下:
\`\`\`css
...
height: 22px;
min-height: 22px;
max-height: 22px;
background-color: transparent;
...
\`\`\`
- 顶部导航栏左边的返回按钮必须使用\`icon\`图标组件来实现,不得使用\`text\`和\`button\`组件来实现。
- 任何子页面都必须禁止添加底部导航栏节点到页面,因为子页面是从父页面跳转过来的,父页面已经有底部导航栏了,子页面不需要再添加底部导航栏。
- 闪屏页面的不得添加任何js代码,不得添加N秒后跳转页面的js代码,因为闪屏页只是一个展示页,不能添加任何交互功能和动画效果。
- 所有轮播节点不得添加自动播放功能的js代码
# 2、icon图标与img图片写法和规则
- 当需要icon图标时必须使用FontAwesome图标,比如:\`<i name="微信Icon" nodeType="icon" id="wxIcon" class="fab fa-weixin"></i>\`
- 当需要img图片时,src使用图片地址:\`https://oss.bytefungo.com/f1/showImg1.jpg\`),其中结尾的’showImg1'可以换为从1到30的数字,1~30的数字必须随机挑选,不得每个页面每个图片都使用同一个数字。写法比如:\`<img src="https://oss.bytefungo.com/f1/showImg17.jpg" alt="xxx" class="xxx" nodeType="image">\`
- 绝对不能使用emoji表情符号,不得使用任何emoji表情符号,请使用icon或img图片节点来代替。
- 需要严格遵守\`UI设计规范.md\`的UI设计规范里面的\`图标规范\`来设计icon图标。
# 3、html节点规则
- 每个组件都必须包含:id、name、nodeType属性
- id属性必须是英文或数字,且不能以数字开头,并且整个页面id属性的值必须唯一
- name属性必须是中文或数字,并且不能包含特殊字符
- nodeType属性的值必须是\`组件类型枚举 (node)\` 中的一个
- 所有css样式定义只能使用以下这些css伪类选择器:hover、active、focus、disabled、checked、selected、placeholder
- 禁止写任何@media相关的(响应式调整)css代码,因为已经明确是以393*852的分辨率设计APP移动端了
- 所有轮播节点不得添加自动播放功能的js代码
- nodeType="iconSwitch"、nodeType="iconRadio"、nodeType="iconTextRadio"、nodeType="iconCheckBox"、nodeType="iconTextCheckBox"节点的孩子i标签节点必须添加一个checkedClass属性,用于表示选中状态的icon图标样式类名,比如:
\`\`\` html
<div nodeType="iconTextRadio" id="xxxRadio" name="xxx单选">
<i name="单选Icon" nodeType="icon" id="xxxRadioIcon" class="fa xxx" checkedClass="fa yyy"></i>
<span name="xxx单选文本" nodeType="text" class="xxx-text">xxx</span>
</div>
<div id="agreementCheckbox" name="协议勾选框" nodeType="iconCheckBox" class="agreement-checkbox" onclick="toggleAgreement()">
<i id="agreementIcon" name="协议勾选图标" nodeType="commonIcon" class="far fa-square" checkedClass="fas fa-check-square"></i>
</div>
\`\`\`
# 4、高级节点结构正确性
- 对话框:遮罩vtype="dialogOverlay"节点包含一个对话框vtype="dialog"节点
- 多状态容器:\`multiStateContainer\`节点包含N个\`oneStateContentContainer\`节点,使用场景:当需要展示多个不同状态的内容时,比如:登录状态下展示个人信息内容,未登录状态下展示登录注册内容。
- 单选:单选组vtype="radioGroup"节点包含多个单选项vtype="radio"节点
- 多选:多选组vtype="checkBoxGroup"节点包含多个多选项vtype="checkBox"节点
- 轮播:轮播vtype="viewPager"节点包含多个轮播项vtype="oneViewPagerContent"节点,并且有一个轮播指示器vtype="viewPagerIndicatorContainer"节点与之对应
- tab选项卡:tab选项卡vtype="tabContentContainer"节点包含多个tab选项卡内容vtype="oneTabContentContainer"节点,并且有一个tab选项卡菜单栏vtype="tabMenuBar"节点与之对应
- 底部导航:底部导航内容容器vtype="bottomTabContentContainer"节点包含多个内容子页面vtype="subPage"节点,并且有一个底部导航栏vtype="bottomTabNavigateBar"节点与之对应
# 5、数据获取方式属性fromApiOrCacheData="true"的设置条件:
- nodeType必须是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabContentContainer\`、\`radioGroup\`、\`checkBoxGroup\`、\`inlineBlockAndWrap\`类型的组件
- 该组件的数据是从网络或者本地持久化缓存拉取回来的,比如:热门商品列表组件\`verticalListView\`,该组件的数据是从网络或者本地持久化缓存拉取回来的
- 如果是一些不需要后端API联网或本地持久化缓存拉取获取的静态写死的数据,那么就不需要fromApiOrCacheData属性了,比如:个人中心列表项、设置列表项、菜单列表项,这些根本不需要经过后台API联网或本地持久化缓存拉取获取的,那么就不要fromApiOrCacheData属性
# 6、节点显示隐藏规则
- \`oneStateContentContainer\`、\`viewPagerItem\`、\`tabContentContainerItem\`节点显示与隐藏的切换必须使用\`display: none\`来实现,不能使用\`opacity: 0\`和\`visibility: hidden\`来实现
# 7、必须添加节点显示和隐藏的切换js方法
- 如果一个节点的\`nodeType\`是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabContentContainerItem\`,或者该节点使用了\`display: none\`来实现显示与隐藏,那么就必须添加一个js方法来实现显示和隐藏的切换,js方法的命名规则:\`switchTo\` + 节点id,并且该js方法不得带有任何参数。
- js方法的命名规则:\`switchTo\` + 节点id,比如:\`switchToAgeContainer\`、\`switchToPhoneContainer\`
- 切换显示和隐藏的js方法不得带有任何参数,比如:\`switchToAgeContainer()\`、\`switchToPhoneContainer()\`
# 8、组件类型枚举 (nodeType)
- 形状:\`rect\`, \`circle\`, \`line\`
- 文本:\`level1TitleText\`、\`level2TitleText\`、\`primaryText\`、\`secondaryText\`、\`smallInfoText\`、\`errorText\`、\`warningText\`、\`successText\`、\`linkText\`
- 按钮:\`smallPrimaryButton\`、\`mediumPrimaryButton\`、\`largePrimaryButton\`、\`smallSecondaryButton\`、\`mediumSecondaryButton\`、\`largeSecondaryButton\`、\`smallTextButton\`、\`mediumTextButton\`、\`largeTextButton\`、\`smallIconButton\`、\`mediumIconButton\`、\`largeIconButton\`
- 输入框:\`commonInput\`、\`verifyCodeInput\`
- 图标:\`commonIcon\`、\`titleBarBackIcon\`
- 图片: \`commonImage\`、\`logoImage\`、\`avatarImage\`
- 容器:\`container\`
- 开关:\`iconSwitch\`、\`sliderSwitch\`
- 单选:\`radioGroup\`、\`iconRadio\`、\`iconTextRadio\`
- 多选:\`checkBoxGroup\`、\`iconCheckBox\`、\`iconTextCheckBox\`
- tag标签:\`blueFillTag\`、\`greenFillTag\`、\`redFillTag\`、\`orangeFillTag\`、\`goldFillTag\`、\`grayFillTag\`、\`blueOutlineTag\`、\`greenOutlineTag\`、\`redOutlineTag\`、\`orangeOutlineTag\`、\`goldOutlineTag\`、\`grayOutlineTag\`
- 标题栏:\`secondaryPageTitleBar\`
- 多状态容器:\`multiStateContainer\`, \`oneStateContentContainer\`
- 列表:\`verticalListView\`, \`horizontalListView\`, \`listItemCard\`
- 轮播:\`viewPager\`, \`viewPagerItem\`, \`viewPagerIndicatorContainer\`
- tab选项卡:\`tabContentContainer\`, \`tabContentContainerItem\`, \`tabMenuBar\`, \`tabMenuBarItem\`
- 底部导航: \`bottomTabContentContainer\`, \`subPage\`, \`bottomTabNavigateBar\`, \`bottomTabNavigateBarItem\`
- 对话框:\`dialog\`, \`dialogOverlay\`
- toast提示:\`successToast\`、\`warningToast\`、\`errorToast\`、\`infoToast\`
- 下拉菜单:\`dropDownMenu\`, \`dropDownMenuItem\`
- 侧滑面板:\`sideSlidePanel\`
- 系统顶部状态栏: \`phoneTopStatusBar\`
`;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ25BbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdWlEZXNpZ25BbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBGckMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMgMeOAgVVJ6K6+6K6h6KaB5rGCXG4tICoq5b+F6aG76YG15b6qXFxgLmJ5dGVmdW4vVUnorr7orqHop4TojIMubWRcXGDnmoRVSeiuvuiuoeinhOiMg++8jOW5tuS4lGh0bWzph4zpnaLkuI3og73lop7liKDmlLlcXGA6cm9vdFxcYOminOiJsuWPmOmHj++8jOminOiJsuWPquiDveS9v+eUqGh0bWzmlofku7bnmoRcXGBoZWFkXFxg5qCH562+6YeM5bey57uP5a6a5LmJ5aW955qEXFxgOnJvb3RcXGDpopzoibLlj5jph4/vvIzkuI3og73nm7TmjqXkvb/nlKjpopzoibLlgLzmiJbnp4Hoh6rlrprkuYnlhbbku5bpopzoibLlj5jph48qKlxuLSDpgbXlvqppUGhvbmUgMTYgUHJv5bC65a+46KeE5qC8KOWuveW6pjM5M3B46auY5bqmODUycHgpXG4tIOmHh+eUqOaYjuS6ruOAgea0u+WKm+eahOmFjeiJsuaWueahiFxuLSDlpoLnlKjmiLfmsqHmnInmmI7noa7mj4/ov7Dor7TmmI7pobXpnaLog4zmma/oibLvvIzlj6rmnInpl6rlsY/pobXpnaLnmoTog4zmma/oibLlhYHorrjorr7nva5wcmltYXJ55Li76Imy5oiWcHJpbWFyeeS4jnNlY29uZGFyeeeahOa4kOWPmOiJsu+8jOWFtuS7lumhtemdouW/hemhu+S9v+eUqOmdnnByaW1hcnnkuI7pnZ5zZWNvbmRhcnnnmoTnuq/oibLlgZrpobXpnaLog4zmma/oibLvvIzmr5TlpoLkuIDoiKzkvb/nlKjnmb3oibLns7vvvIzlpoLmnpzmmK/mmpfpu5Hpo47pgqPlsLHmmK/pu5HoibLns7vjgIJcbi0g6L6T5YWl5qGGXFxgaW5wdXRcXGDlpoLmnpzpnIDopoHlsZXnpLrmloflrZdsYWJlbO+8jOWwvemHj+S9v+eUqGljb27ku6Pmm7/mloflrZdsYWJlbO+8jOW5tuS4lGljb27ph43lj6DlnKjovpPlhaXmoYbnmoTlt6bkvqfvvIzov5nmoLfmlbTkuKrpobXpnaLnmoTnqbrpl7TliKnnlKjnjofpq5jjgIJcbi0g6aG16Z2i5byA5aS05b+F6aG76KaB5pyJ5LiA5Liq5omL5py654q25oCB5qCPcGhvbmVUb3BTdGF0dXNCYXLoioLngrnvvIzlubbkuJTmiYvmnLrnirbmgIHmoI9waG9uZVRvcFN0YXR1c0JhcuiKgueCueeahOmrmOW6puW/hemhu+awuOi/nOiuvuiuoeS4ujIycHjvvIzlv4Xpobvorr7nva5oZWlnaHTjgIFtaW4taGVpZ2h044CBbWF4LWhlaWdodOWxnuaAp+WSjOWAvOaYrzIycHjvvIzlt7Lnu4/og4zmma/oibLmmK/pgI/mmI7nmoTvvIxjc3Pku6PnoIHlpoLkuIvvvJpcblxcYFxcYFxcYGNzc1xuLi4uXG5oZWlnaHQ6IDIycHg7XG5taW4taGVpZ2h0OiAyMnB4O1xubWF4LWhlaWdodDogMjJweDtcbmJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuLi4uXG5cXGBcXGBcXGBcbi0g6aG26YOo5a+86Iiq5qCP5bem6L6555qE6L+U5Zue5oyJ6ZKu5b+F6aG75L2/55SoXFxgaWNvblxcYOWbvuagh+e7hOS7tuadpeWunueOsO+8jOS4jeW+l+S9v+eUqFxcYHRleHRcXGDlkoxcXGBidXR0b25cXGDnu4Tku7bmnaXlrp7njrDjgIJcbi0g5Lu75L2V5a2Q6aG16Z2i6YO95b+F6aG756aB5q2i5re75Yqg5bqV6YOo5a+86Iiq5qCP6IqC54K55Yiw6aG16Z2i77yM5Zug5Li65a2Q6aG16Z2i5piv5LuO54i26aG16Z2i6Lez6L2s6L+H5p2l55qE77yM54i26aG16Z2i5bey57uP5pyJ5bqV6YOo5a+86Iiq5qCP5LqG77yM5a2Q6aG16Z2i5LiN6ZyA6KaB5YaN5re75Yqg5bqV6YOo5a+86Iiq5qCP44CCXG4tIOmXquWxj+mhtemdoueahOS4jeW+l+a3u+WKoOS7u+S9lWpz5Luj56CB77yM5LiN5b6X5re75YqgTuenkuWQjui3s+i9rOmhtemdoueahGpz5Luj56CB77yM5Zug5Li66Zeq5bGP6aG15Y+q5piv5LiA5Liq5bGV56S66aG177yM5LiN6IO95re75Yqg5Lu75L2V5Lqk5LqS5Yqf6IO95ZKM5Yqo55S75pWI5p6c44CCXG4tIOaJgOaciei9ruaSreiKgueCueS4jeW+l+a3u+WKoOiHquWKqOaSreaUvuWKn+iDveeahGpz5Luj56CBXG5cbiMgMuOAgWljb27lm77moIfkuI5pbWflm77niYflhpnms5Xlkozop4TliJlcbi0g5b2T6ZyA6KaBaWNvbuWbvuagh+aXtuW/hemhu+S9v+eUqEZvbnRBd2Vzb21l5Zu+5qCH77yM5q+U5aaC77yaXFxgPGkgbmFtZT1cIuW+ruS/oUljb25cIiBub2RlVHlwZT1cImljb25cIiBpZD1cInd4SWNvblwiIGNsYXNzPVwiZmFiIGZhLXdlaXhpblwiPjwvaT5cXGBcbi0g5b2T6ZyA6KaBaW1n5Zu+54mH5pe277yMc3Jj5L2/55So5Zu+54mH5Zyw5Z2A77yaXFxgaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMS5qcGdcXGAp77yM5YW25Lit57uT5bC+55qE4oCZc2hvd0ltZzEn5Y+v5Lul5o2i5Li65LuOMeWIsDMw55qE5pWw5a2X77yMMX4zMOeahOaVsOWtl+W/hemhu+maj+acuuaMkemAie+8jOS4jeW+l+avj+S4qumhtemdouavj+S4quWbvueJh+mDveS9v+eUqOWQjOS4gOS4quaVsOWtl+OAguWGmeazleavlOWmgu+8mlxcYDxpbWcgc3JjPVwiaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMTcuanBnXCIgYWx0PVwieHh4XCIgY2xhc3M9XCJ4eHhcIiBub2RlVHlwZT1cImltYWdlXCI+XFxgXG4tIOe7neWvueS4jeiDveS9v+eUqGVtb2pp6KGo5oOF56ym5Y+377yM5LiN5b6X5L2/55So5Lu75L2VZW1vamnooajmg4XnrKblj7fvvIzor7fkvb/nlKhpY29u5oiWaW1n5Zu+54mH6IqC54K55p2l5Luj5pu/44CCXG4tIOmcgOimgeS4peagvOmBteWuiFxcYFVJ6K6+6K6h6KeE6IyDLm1kXFxg55qEVUnorr7orqHop4TojIPph4zpnaLnmoRcXGDlm77moIfop4TojINcXGDmnaXorr7orqFpY29u5Zu+5qCH44CCXG5cbiMgM+OAgWh0bWzoioLngrnop4TliJlcbi0g5q+P5Liq57uE5Lu26YO95b+F6aG75YyF5ZCr77yaaWTjgIFuYW1l44CBbm9kZVR5cGXlsZ7mgKdcbi0gaWTlsZ7mgKflv4XpobvmmK/oi7HmlofmiJbmlbDlrZfvvIzkuJTkuI3og73ku6XmlbDlrZflvIDlpLTvvIzlubbkuJTmlbTkuKrpobXpnaJpZOWxnuaAp+eahOWAvOW/hemhu+WUr+S4gFxuLSBuYW1l5bGe5oCn5b+F6aG75piv5Lit5paH5oiW5pWw5a2X77yM5bm25LiU5LiN6IO95YyF5ZCr54m55q6K5a2X56ymXG4tIG5vZGVUeXBl5bGe5oCn55qE5YC85b+F6aG75pivXFxg57uE5Lu257G75Z6L5p6a5Li+IChub2RlKVxcYCDkuK3nmoTkuIDkuKpcbi0g5omA5pyJY3Nz5qC35byP5a6a5LmJ5Y+q6IO95L2/55So5Lul5LiL6L+Z5LqbY3Nz5Lyq57G76YCJ5oup5Zmo77yaaG92ZXLjgIFhY3RpdmXjgIFmb2N1c+OAgWRpc2FibGVk44CBY2hlY2tlZOOAgXNlbGVjdGVk44CBcGxhY2Vob2xkZXJcbi0g56aB5q2i5YaZ5Lu75L2VQG1lZGlh55u45YWz55qEKOWTjeW6lOW8j+iwg+aVtCljc3Pku6PnoIHvvIzlm6DkuLrlt7Lnu4/mmI7noa7mmK/ku6UzOTMqODUy55qE5YiG6L6o546H6K6+6K6hQVBQ56e75Yqo56uv5LqGXG4tIOaJgOaciei9ruaSreiKgueCueS4jeW+l+a3u+WKoOiHquWKqOaSreaUvuWKn+iDveeahGpz5Luj56CBXG4tIG5vZGVUeXBlPVwiaWNvblN3aXRjaFwi44CBbm9kZVR5cGU9XCJpY29uUmFkaW9cIuOAgW5vZGVUeXBlPVwiaWNvblRleHRSYWRpb1wi44CBbm9kZVR5cGU9XCJpY29uQ2hlY2tCb3hcIuOAgW5vZGVUeXBlPVwiaWNvblRleHRDaGVja0JveFwi6IqC54K555qE5a2p5a2Qaeagh+etvuiKgueCueW/hemhu+a3u+WKoOS4gOS4qmNoZWNrZWRDbGFzc+WxnuaAp++8jOeUqOS6juihqOekuumAieS4reeKtuaAgeeahGljb27lm77moIfmoLflvI/nsbvlkI3vvIzmr5TlpoLvvJpcblxcYFxcYFxcYCBodG1sXG48ZGl2IG5vZGVUeXBlPVwiaWNvblRleHRSYWRpb1wiIGlkPVwieHh4UmFkaW9cIiBuYW1lPVwieHh45Y2V6YCJXCI+XG4gICAgPGkgbmFtZT1cIuWNlemAiUljb25cIiBub2RlVHlwZT1cImljb25cIiBpZD1cInh4eFJhZGlvSWNvblwiIGNsYXNzPVwiZmEgeHh4XCIgY2hlY2tlZENsYXNzPVwiZmEgeXl5XCI+PC9pPlxuICAgIDxzcGFuIG5hbWU9XCJ4eHjljZXpgInmlofmnKxcIiBub2RlVHlwZT1cInRleHRcIiBjbGFzcz1cInh4eC10ZXh0XCI+eHh4PC9zcGFuPlxuPC9kaXY+XG48ZGl2IGlkPVwiYWdyZWVtZW50Q2hlY2tib3hcIiBuYW1lPVwi5Y2P6K6u5Yu+6YCJ5qGGXCIgbm9kZVR5cGU9XCJpY29uQ2hlY2tCb3hcIiBjbGFzcz1cImFncmVlbWVudC1jaGVja2JveFwiIG9uY2xpY2s9XCJ0b2dnbGVBZ3JlZW1lbnQoKVwiPlxuICAgIDxpIGlkPVwiYWdyZWVtZW50SWNvblwiIG5hbWU9XCLljY/orq7li77pgInlm77moIdcIiBub2RlVHlwZT1cImNvbW1vbkljb25cIiBjbGFzcz1cImZhciBmYS1zcXVhcmVcIiBjaGVja2VkQ2xhc3M9XCJmYXMgZmEtY2hlY2stc3F1YXJlXCI+PC9pPlxuPC9kaXY+XG5cXGBcXGBcXGBcblxuIyA044CB6auY57qn6IqC54K557uT5p6E5q2j56Gu5oCnXG4tIOWvueivneahhu+8mumBrue9qXZ0eXBlPVwiZGlhbG9nT3ZlcmxheVwi6IqC54K55YyF5ZCr5LiA5Liq5a+56K+d5qGGdnR5cGU9XCJkaWFsb2dcIuiKgueCuVxuLSDlpJrnirbmgIHlrrnlmajvvJpcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxg6IqC54K55YyF5ZCrTuS4qlxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOiKgueCue+8jOS9v+eUqOWcuuaZr++8muW9k+mcgOimgeWxleekuuWkmuS4quS4jeWQjOeKtuaAgeeahOWGheWuueaXtu+8jOavlOWmgu+8mueZu+W9leeKtuaAgeS4i+WxleekuuS4quS6uuS/oeaBr+WGheWuue+8jOacqueZu+W9leeKtuaAgeS4i+WxleekuueZu+W9leazqOWGjOWGheWuueOAglxuLSDljZXpgInvvJrljZXpgInnu4R2dHlwZT1cInJhZGlvR3JvdXBcIuiKgueCueWMheWQq+WkmuS4quWNlemAiemhuXZ0eXBlPVwicmFkaW9cIuiKgueCuVxuLSDlpJrpgInvvJrlpJrpgInnu4R2dHlwZT1cImNoZWNrQm94R3JvdXBcIuiKgueCueWMheWQq+WkmuS4quWkmumAiemhuXZ0eXBlPVwiY2hlY2tCb3hcIuiKgueCuVxuLSDova7mkq3vvJrova7mkq12dHlwZT1cInZpZXdQYWdlclwi6IqC54K55YyF5ZCr5aSa5Liq6L2u5pKt6aG5dnR5cGU9XCJvbmVWaWV3UGFnZXJDb250ZW50XCLoioLngrnvvIzlubbkuJTmnInkuIDkuKrova7mkq3mjIfnpLrlmah2dHlwZT1cInZpZXdQYWdlckluZGljYXRvckNvbnRhaW5lclwi6IqC54K55LiO5LmL5a+55bqUXG4tIHRhYumAiemhueWNoe+8mnRhYumAiemhueWNoXZ0eXBlPVwidGFiQ29udGVudENvbnRhaW5lclwi6IqC54K55YyF5ZCr5aSa5LiqdGFi6YCJ6aG55Y2h5YaF5a65dnR5cGU9XCJvbmVUYWJDb250ZW50Q29udGFpbmVyXCLoioLngrnvvIzlubbkuJTmnInkuIDkuKp0YWLpgInpobnljaHoj5zljZXmoI92dHlwZT1cInRhYk1lbnVCYXJcIuiKgueCueS4juS5i+WvueW6lFxuLSDlupXpg6jlr7zoiKrvvJrlupXpg6jlr7zoiKrlhoXlrrnlrrnlmah2dHlwZT1cImJvdHRvbVRhYkNvbnRlbnRDb250YWluZXJcIuiKgueCueWMheWQq+WkmuS4quWGheWuueWtkOmhtemdonZ0eXBlPVwic3ViUGFnZVwi6IqC54K577yM5bm25LiU5pyJ5LiA5Liq5bqV6YOo5a+86Iiq5qCPdnR5cGU9XCJib3R0b21UYWJOYXZpZ2F0ZUJhclwi6IqC54K55LiO5LmL5a+55bqUXG5cbiMgNeOAgeaVsOaNruiOt+WPluaWueW8j+WxnuaAp2Zyb21BcGlPckNhY2hlRGF0YT1cInRydWVcIueahOiuvue9ruadoeS7tu+8mlxuLSBub2RlVHlwZeW/hemhu+aYr1xcYHZlcnRpY2FsTGlzdFZpZXdcXGDjgIFcXGBob3Jpem9udGFsTGlzdFZpZXdcXGDjgIFcXGB2aWV3UGFnZXJcXGDjgIFcXGB0YWJDb250ZW50Q29udGFpbmVyXFxg44CBXFxgcmFkaW9Hcm91cFxcYOOAgVxcYGNoZWNrQm94R3JvdXBcXGDjgIFcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDnsbvlnovnmoTnu4Tku7Zcbi0g6K+l57uE5Lu255qE5pWw5o2u5piv5LuO572R57uc5oiW6ICF5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W5Zue5p2l55qE77yM5q+U5aaC77ya54Ot6Zeo5ZWG5ZOB5YiX6KGo57uE5Lu2XFxgdmVydGljYWxMaXN0Vmlld1xcYO+8jOivpee7hOS7tueahOaVsOaNruaYr+S7jue9kee7nOaIluiAheacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluWbnuadpeeahFxuLSDlpoLmnpzmmK/kuIDkupvkuI3pnIDopoHlkI7nq69BUEnogZTnvZHmiJbmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5bojrflj5bnmoTpnZnmgIHlhpnmrbvnmoTmlbDmja7vvIzpgqPkuYjlsLHkuI3pnIDopoFmcm9tQXBpT3JDYWNoZURhdGHlsZ7mgKfkuobvvIzmr5TlpoLvvJrkuKrkurrkuK3lv4PliJfooajpobnjgIHorr7nva7liJfooajpobnjgIHoj5zljZXliJfooajpobnvvIzov5nkupvmoLnmnKzkuI3pnIDopoHnu4/ov4flkI7lj7BBUEnogZTnvZHmiJbmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5bojrflj5bnmoTvvIzpgqPkuYjlsLHkuI3opoFmcm9tQXBpT3JDYWNoZURhdGHlsZ7mgKdcblxuIyA244CB6IqC54K55pi+56S66ZqQ6JeP6KeE5YiZXG4tIFxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOOAgVxcYHZpZXdQYWdlckl0ZW1cXGDjgIFcXGB0YWJDb250ZW50Q29udGFpbmVySXRlbVxcYOiKgueCueaYvuekuuS4jumakOiXj+eahOWIh+aNouW/hemhu+S9v+eUqFxcYGRpc3BsYXk6IG5vbmVcXGDmnaXlrp7njrDvvIzkuI3og73kvb/nlKhcXGBvcGFjaXR5OiAwXFxg5ZKMXFxgdmlzaWJpbGl0eTogaGlkZGVuXFxg5p2l5a6e546wXG5cbiMgN+OAgeW/hemhu+a3u+WKoOiKgueCueaYvuekuuWSjOmakOiXj+eahOWIh+aNompz5pa55rOVXG4tIOWmguaenOS4gOS4quiKgueCueeahFxcYG5vZGVUeXBlXFxg5pivXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxg44CBXFxgdmlld1BhZ2VySXRlbVxcYOOAgVxcYHRhYkNvbnRlbnRDb250YWluZXJJdGVtXFxg77yM5oiW6ICF6K+l6IqC54K55L2/55So5LqGXFxgZGlzcGxheTogbm9uZVxcYOadpeWunueOsOaYvuekuuS4jumakOiXj++8jOmCo+S5iOWwseW/hemhu+a3u+WKoOS4gOS4qmpz5pa55rOV5p2l5a6e546w5pi+56S65ZKM6ZqQ6JeP55qE5YiH5o2i77yManPmlrnms5XnmoTlkb3lkI3op4TliJnvvJpcXGBzd2l0Y2hUb1xcYCArIOiKgueCuWlk77yM5bm25LiU6K+lanPmlrnms5XkuI3lvpfluKbmnInku7vkvZXlj4LmlbDjgIJcbi0ganPmlrnms5XnmoTlkb3lkI3op4TliJnvvJpcXGBzd2l0Y2hUb1xcYCArIOiKgueCuWlk77yM5q+U5aaC77yaXFxgc3dpdGNoVG9BZ2VDb250YWluZXJcXGDjgIFcXGBzd2l0Y2hUb1Bob25lQ29udGFpbmVyXFxgXG4tIOWIh+aNouaYvuekuuWSjOmakOiXj+eahGpz5pa55rOV5LiN5b6X5bim5pyJ5Lu75L2V5Y+C5pWw77yM5q+U5aaC77yaXFxgc3dpdGNoVG9BZ2VDb250YWluZXIoKVxcYOOAgVxcYHN3aXRjaFRvUGhvbmVDb250YWluZXIoKVxcYFxuXG4jIDjjgIHnu4Tku7bnsbvlnovmnprkuL4gKG5vZGVUeXBlKVxuLSDlvaLnirbvvJpcXGByZWN0XFxgLCBcXGBjaXJjbGVcXGAsIFxcYGxpbmVcXGBcbi0g5paH5pys77yaXFxgbGV2ZWwxVGl0bGVUZXh0XFxg44CBXFxgbGV2ZWwyVGl0bGVUZXh0XFxg44CBXFxgcHJpbWFyeVRleHRcXGDjgIFcXGBzZWNvbmRhcnlUZXh0XFxg44CBXFxgc21hbGxJbmZvVGV4dFxcYOOAgVxcYGVycm9yVGV4dFxcYOOAgVxcYHdhcm5pbmdUZXh0XFxg44CBXFxgc3VjY2Vzc1RleHRcXGDjgIFcXGBsaW5rVGV4dFxcYFxuLSDmjInpkq7vvJpcXGBzbWFsbFByaW1hcnlCdXR0b25cXGDjgIFcXGBtZWRpdW1QcmltYXJ5QnV0dG9uXFxg44CBXFxgbGFyZ2VQcmltYXJ5QnV0dG9uXFxg44CBXFxgc21hbGxTZWNvbmRhcnlCdXR0b25cXGDjgIFcXGBtZWRpdW1TZWNvbmRhcnlCdXR0b25cXGDjgIFcXGBsYXJnZVNlY29uZGFyeUJ1dHRvblxcYOOAgVxcYHNtYWxsVGV4dEJ1dHRvblxcYOOAgVxcYG1lZGl1bVRleHRCdXR0b25cXGDjgIFcXGBsYXJnZVRleHRCdXR0b25cXGDjgIFcXGBzbWFsbEljb25CdXR0b25cXGDjgIFcXGBtZWRpdW1JY29uQnV0dG9uXFxg44CBXFxgbGFyZ2VJY29uQnV0dG9uXFxgXG4tIOi+k+WFpeahhu+8mlxcYGNvbW1vbklucHV0XFxg44CBXFxgdmVyaWZ5Q29kZUlucHV0XFxgXG4tIOWbvuagh++8mlxcYGNvbW1vbkljb25cXGDjgIFcXGB0aXRsZUJhckJhY2tJY29uXFxgXG4tIOWbvueJhzogXFxgY29tbW9uSW1hZ2VcXGDjgIFcXGBsb2dvSW1hZ2VcXGDjgIFcXGBhdmF0YXJJbWFnZVxcYFxuLSDlrrnlmajvvJpcXGBjb250YWluZXJcXGBcbi0g5byA5YWz77yaXFxgaWNvblN3aXRjaFxcYOOAgVxcYHNsaWRlclN3aXRjaFxcYFxuLSDljZXpgInvvJpcXGByYWRpb0dyb3VwXFxg44CBXFxgaWNvblJhZGlvXFxg44CBXFxgaWNvblRleHRSYWRpb1xcYFxuLSDlpJrpgInvvJpcXGBjaGVja0JveEdyb3VwXFxg44CBXFxgaWNvbkNoZWNrQm94XFxg44CBXFxgaWNvblRleHRDaGVja0JveFxcYFxuLSB0YWfmoIfnrb7vvJpcXGBibHVlRmlsbFRhZ1xcYOOAgVxcYGdyZWVuRmlsbFRhZ1xcYOOAgVxcYHJlZEZpbGxUYWdcXGDjgIFcXGBvcmFuZ2VGaWxsVGFnXFxg44CBXFxgZ29sZEZpbGxUYWdcXGDjgIFcXGBncmF5RmlsbFRhZ1xcYOOAgVxcYGJsdWVPdXRsaW5lVGFnXFxg44CBXFxgZ3JlZW5PdXRsaW5lVGFnXFxg44CBXFxgcmVkT3V0bGluZVRhZ1xcYOOAgVxcYG9yYW5nZU91dGxpbmVUYWdcXGDjgIFcXGBnb2xkT3V0bGluZVRhZ1xcYOOAgVxcYGdyYXlPdXRsaW5lVGFnXFxgXG4tIOagh+mimOagj++8mlxcYHNlY29uZGFyeVBhZ2VUaXRsZUJhclxcYFxuLSDlpJrnirbmgIHlrrnlmajvvJpcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxgLCBcXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGBcbi0g5YiX6KGo77yaXFxgdmVydGljYWxMaXN0Vmlld1xcYCwgXFxgaG9yaXpvbnRhbExpc3RWaWV3XFxgLCBcXGBsaXN0SXRlbUNhcmRcXGBcbi0g6L2u5pKt77yaXFxgdmlld1BhZ2VyXFxgLCBcXGB2aWV3UGFnZXJJdGVtXFxgLCBcXGB2aWV3UGFnZXJJbmRpY2F0b3JDb250YWluZXJcXGBcbi0gdGFi6YCJ6aG55Y2h77yaXFxgdGFiQ29udGVudENvbnRhaW5lclxcYCwgXFxgdGFiQ29udGVudENvbnRhaW5lckl0ZW1cXGAsIFxcYHRhYk1lbnVCYXJcXGAsIFxcYHRhYk1lbnVCYXJJdGVtXFxgXG4tIOW6lemDqOWvvOiIqjogXFxgYm90dG9tVGFiQ29udGVudENvbnRhaW5lclxcYCwgXFxgc3ViUGFnZVxcYCwgXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJcXGAsIFxcYGJvdHRvbVRhYk5hdmlnYXRlQmFySXRlbVxcYFxuLSDlr7nor53moYbvvJpcXGBkaWFsb2dcXGAsIFxcYGRpYWxvZ092ZXJsYXlcXGBcbi0gdG9hc3Tmj5DnpLrvvJpcXGBzdWNjZXNzVG9hc3RcXGDjgIFcXGB3YXJuaW5nVG9hc3RcXGDjgIFcXGBlcnJvclRvYXN0XFxg44CBXFxgaW5mb1RvYXN0XFxgXG4tIOS4i+aLieiPnOWNle+8mlxcYGRyb3BEb3duTWVudVxcYCwgXFxgZHJvcERvd25NZW51SXRlbVxcYFxuLSDkvqfmu5HpnaLmnb/vvJpcXGBzaWRlU2xpZGVQYW5lbFxcYFxuLSDns7vnu5/pobbpg6jnirbmgIHmoI86IFxcYHBob25lVG9wU3RhdHVzQmFyXFxgXG5gIl19