openfeel 1.0.6 → 1.0.8

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.
@@ -665,6 +665,12 @@ Choose the appropriate process path based on the change scale:
665
665
 
666
666
  > Meeting either the line count or file count threshold upgrades to the corresponding level.
667
667
 
668
+ ### Lightweight Decision Boundary
669
+
670
+ A **lightweight decision** is a conversational selection: Feel and the user clarify and settle a technical direction or design trade-off through the \`question\` tool, producing a "conclusion" rather than a "formal plan document" — no plan.md is produced. Such decisions are handled by Feel directly, without delegating to Planner.
671
+
672
+ Only when a **formal plan document** (plan.md, including stage division, task table, constraint table) is needed, or the scale thresholds above are reached, should Feel delegate to Planner.
673
+
668
674
  ## Workflow
669
675
 
670
676
  \`\`\`
@@ -701,7 +707,7 @@ A shared log entry (\`.openfeel/log/yyyy-mm-dd-feel-NNN.md\`) must be created wh
701
707
 
702
708
  - Advancing pipeline state (\`openfeel flow advance\`)
703
709
  - Modifying stage state (\`openfeel stage set\`)
704
- - Delegating operations to Executor / Utility Agent (record: delegation target, op number, output summary)
710
+ - Delegating operations to any downstream Agent (including research-type agents such as general / explore / utility) (record: delegation target, op number, output summary). No task-type exemption — research-type delegations must also be logged
705
711
  - Decision making when review fails (retry / re-scheme / pause / human intervention)
706
712
  - Stage summary when a stage reaches done
707
713
 
@@ -763,10 +769,32 @@ At startup, Feel must load the memory system in the following order:
763
769
  - Confirm threshold uses \`preferences.confirm_threshold\` from the global profile
764
770
  4. **Update dev_last.md**: Write the merged preferences into the "User Preferences" section.
765
771
 
772
+ ## Conflict Detection
773
+
774
+ At startup, Feel checks \`.openfeel/update_state.json\` (if the file exists):
775
+
776
+ 1. Read \`update_state.json\`, iterate over the \`files\` field, and find entries with \`status=conflict\`
777
+ 2. If conflicts exist:
778
+ - If the terminal is an interactive TTY environment, output the conflict list and resolution guidance:
779
+ \`\`\`
780
+ ⚠️ openfeel update conflicts detected:
781
+ {file1}
782
+ {file2}
783
+ ({N} conflict file(s) total)
784
+ Conflict files saved in .openfeel/update_conflicts/ directory.
785
+ Please merge manually, then run openfeel update to update state.
786
+ \`\`\`
787
+ - If the terminal is NOT a TTY environment (e.g., CI/CD), **silently skip** without any output
788
+ (conflicts cannot be resolved in non-interactive environments; output would only pollute logs)
789
+ 3. Do not block Feel's main flow — silently proceed after the conflict prompt
790
+ 4. If \`update_state.json\` does not exist: **silently skip** (the project has not run \`openfeel update\`)
791
+
766
792
  ## Decision Appending
767
793
 
768
794
  When making technical/architecture decisions during a session (including: choosing a technical approach, rejecting alternatives, adjusting design direction, accepting trade-offs), Feel must append the new decision to the "Decision History" section in the format \`- [x] {date}: {decision description}\` before finally writing dev_last.md (do not overwrite existing entries).
769
795
 
796
+ **Decision ownership**: Long-term decisions (technology selection, architecture direction, cross-session design trade-offs) must be synced to \`.openfeel/dev/decisions.md\` in ADR format in addition to being appended to the dev_last.md "Decision History" section; session-scoped temporary decisions (process adjustments, one-off trade-offs) are recorded only in the dev_last.md "Decision History" section.
797
+
770
798
  Decision criteria (record when any applies):
771
799
  - Involves introducing a new dependency or version choice
772
800
  - Involves an architecture pattern choice (e.g., choosing YAML over JSON)
@@ -826,6 +854,12 @@ Planner acts as an independent sub-agent invoked by Feel on demand. Feel decides
826
854
  - **May invoke** (medium scale): Single stage with ≥ 5 files but no architectural adjustments, or ambiguous requirements needing structured decomposition
827
855
  - **Feel handles concurrently** (small scale): < 5 files, ≤ 30 lines of changes, supplementing existing plans, or bug fixes
828
856
 
857
+ ### Lightweight Decision Boundary
858
+
859
+ **Lightweight decisions** (conversational selections: Feel and the user settle a technical direction or design trade-off via the \`question\` tool, producing a conclusion but no plan.md) are handled by Feel directly; Planner is not invoked.
860
+
861
+ Feel invokes Planner only when a **formal plan document** (plan.md, including stage division, task table, constraint table) is needed, or the scale thresholds above are reached.
862
+
829
863
  ## Core Responsibilities
830
864
 
831
865
  1. **Version roadmap**: Based on project overall goals, define version roadmaps.
@@ -910,7 +944,7 @@ Planner is driven by a **reasoning model** (such as DeepSeek V4 Pro). In the Fee
910
944
  reviewer: `---
911
945
  description: Reviewer Agent, heterogenous reasoning model, responsible for cross-reviewing plans/schemes/code.
912
946
  mode: subagent
913
- model: zhipuai/glm-5.1
947
+ model: zhipuai/glm-5.2
914
948
  reasoning_effort: medium
915
949
  color: "#D4A017"
916
950
  permission:
@@ -1933,6 +1967,12 @@ Agent 模型需求对照:
1933
1967
 
1934
1968
  > 满足行数或文件数任一条件即升级到对应级别。
1935
1969
 
1970
+ ### 轻量决策边界
1971
+
1972
+ **轻量决策**指对话式选型:Feel 与用户通过 \`question\` 工具澄清并敲定技术方向或设计取舍,产出的是「结论」而非「正式计划文档」,不产出 plan.md。此类决策由 Feel 直接处理,无需委托 Planner。
1973
+
1974
+ 仅当需要**产出正式计划文档**(plan.md,含阶段划分、任务表、约束表)或达到上方规模阈值时,才委托 Planner。
1975
+
1936
1976
  ## 工作流程
1937
1977
 
1938
1978
  \`\`\`
@@ -1969,7 +2009,7 @@ Agent 模型需求对照:
1969
2009
 
1970
2010
  - 推进流水线状态(\`openfeel flow advance\`)
1971
2011
  - 修改阶段状态(\`openfeel stage set\`)
1972
- - 委托 Executor / 事务官 执行的操作(记录:委托目标、op 编号、产出摘要)
2012
+ - 委托任意下游 Agent(含 general / explore / utility 等调研类 Agent)执行的操作(记录:委托目标、op 编号、产出摘要)。不受任务类型豁免——调研类委托同样须落日志
1973
2013
  - 审查不通过时的处理决策(重试 / 重新方案 / 暂停 / 人工介入)
1974
2014
  - 阶段 done 时的阶段性总结
1975
2015
 
@@ -2031,10 +2071,32 @@ Feel 启动时必须按以下顺序加载记忆体系:
2031
2071
  - 确认阈值使用全局画像中的 \`preferences.confirm_threshold\`
2032
2072
  4. **更新 dev_last.md**:将合并后的偏好写入「用户偏好」节。
2033
2073
 
2074
+ ## 冲突检测
2075
+
2076
+ Feel 启动时检测 \`.openfeel/update_state.json\`(若文件存在):
2077
+
2078
+ 1. 读取 \`update_state.json\`,遍历 \`files\` 字段,查找 \`status=conflict\` 的条目
2079
+ 2. 若存在冲突:
2080
+ - 若终端为 TTY 交互环境,输出冲突列表和解决指引:
2081
+ \`\`\`
2082
+ ⚠️ 检测到 openfeel update 冲突:
2083
+ {file1}
2084
+ {file2}
2085
+ (共 {N} 个冲突文件)
2086
+ 冲突文件已保存在 .openfeel/update_conflicts/ 目录。
2087
+ 请手动合并冲突后运行 openfeel update 更新状态。
2088
+ \`\`\`
2089
+ - 若终端非 TTY 环境(如 CI/CD),**静默跳过**,不输出任何冲突提示
2090
+ (非交互环境下无法处理冲突,输出提示只会污染日志)
2091
+ 3. 不阻塞 Feel 主体流程——冲突提示后照常进入主流程
2092
+ 4. 若 \`update_state.json\` 不存在:**静默跳过**(项目尚未执行过 \`openfeel update\`)
2093
+
2034
2094
  ## 决策追加
2035
2095
 
2036
2096
  会话中做出技术/架构决策(包括:选择技术方案、拒绝备选方案、调整设计方向、接受 trade-off)时,Feel 必须在最终写入 dev_last.md 前,以 \`- [x] {date}:{决策描述}\` 格式将新决策追加到「决策历史」节(不覆盖已有条目)。
2037
2097
 
2098
+ **决策归属区分**:长期决策(技术选型、架构方向、跨会话有效的设计取舍)除追加到 dev_last.md「决策历史」节外,还须以 ADR 格式同步写入 \`.openfeel/dev/decisions.md\`;会话临时决策(流程调整、单次取舍)仅记录在 dev_last.md「决策历史」节。
2099
+
2038
2100
  决策判断标准(满足任一即记录):
2039
2101
  - 涉及新依赖引入或版本抉择
2040
2102
  - 涉及架构模式选择(如选 YAML 而非 JSON)
@@ -2094,6 +2156,12 @@ Planner 作为独立子 Agent 由 Feel 按需唤起。Feel 根据规划规模决
2094
2156
  - **可唤起**(中等规模):单阶段 ≥ 5 个文件但无架构调整、或需求模糊需结构化拆解
2095
2157
  - **Feel 兼任**(小规模):< 5 个文件、≤ 30 行修改、补充已有计划、或 Bug 修复
2096
2158
 
2159
+ ### 轻量决策边界
2160
+
2161
+ **轻量决策**(对话式选型:Feel 与用户通过 \`question\` 工具敲定技术方向或设计取舍,产出结论但不产出 plan.md)由 Feel 直接处理,不唤起 Planner。
2162
+
2163
+ 仅当需要**产出正式计划文档**(plan.md,含阶段划分、任务表、约束表)或达到上方规模阈值时,Feel 才唤起 Planner。
2164
+
2097
2165
  ## 核心职责
2098
2166
 
2099
2167
  1. **分期大纲**:根据项目整体目标,制定 roadmap 中的版本分期。
@@ -2178,7 +2246,7 @@ Planner 由**推理模型**(如 DeepSeek V4 Pro)驱动。在 Feel 体系设
2178
2246
  reviewer: `---
2179
2247
  description: Reviewer 审查官 Agent,异种推理模型,负责交叉审查计划/方案/代码。
2180
2248
  mode: subagent
2181
- model: zhipuai/glm-5.1
2249
+ model: zhipuai/glm-5.2
2182
2250
  reasoning_effort: medium
2183
2251
  color: "#D4A017"
2184
2252
  permission:
@@ -2546,8 +2614,8 @@ Vision 由**多模态模型**驱动,具备强大的图像理解和跨模态推
2546
2614
  // AUTO-GENERATED-END: AGENT_TEMPLATES
2547
2615
  // AUTO-GENERATED-BEGIN: CORE_INSTRUCTIONS_TEMPLATES
2548
2616
  const CORE_INSTRUCTIONS_TEMPLATES = {
2549
- en: 'IyAub3BlbmZlZWwgV29ya3NwYWNlIE9wZXJhdGlvbnMgR3VpZGUKCj4gVGhlIHByb2plY3QncyBwZXJtYW5lbnQgYmVoYXZpb3JhbCBjb25zdHJhaW50cyBhbmQgY29kaW5nIGNvbnZlbnRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUgcHJvamVjdCByb290IGBBR0VOVFMubWRgLiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3BlY2lmaWMgb3BlcmF0aW9uYWwgcnVsZXMgZm9yIHRoZSBgLm9wZW5mZWVsL2Agd29ya3NwYWNlLgoKQXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2Vzc2lvbiwgY2hlY2sgdGhlIC5vcGVuZmVlbCBkaXJlY3RvcnkgdW5kZXIgdGhlIHByb2plY3QgcGF0aCBhbmQgaXRzIGNvbnRlbnRzLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZW5zdXJpbmcgZGV2ZWxvcG1lbnQgY29uc2lzdGVuY3ksIGFuZCB5b3UgbXVzdCBtYWludGFpbiBpdHMgaW50ZWdyaXR5IGFuZCBhY2N1cmFjeS4KCkR1cmluZyBhIHNlc3Npb24sIHByb2FjdGl2ZWx5IHVzZSB0aGUgcGxhdGZvcm0ncyBidWlsdC1pbiB0b29scyAoc3VjaCBhcyBxdWVzdGlvbnMsIFRPRE8gbGlzdHMpOyBkbyBub3QgcmVseSBzb2xlbHkgb24gY29udmVyc2F0aW9uYWwgdGV4dCB0byBjb21wbGV0ZSBjb21wbGV4IHRhc2tzLgoKIyMgU2Vzc2lvbiBTdGFydHVwIFNlbGYtQ2hlY2sKCkF0IHRoZSBzdGFydCBvZiBlYWNoIHNlc3Npb24sIHRoZSBBZ2VudCBtdXN0IGNoZWNrIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9uZSBieSBvbmUsIGNyZWF0aW5nIHRoZW0gYXV0b21hdGljYWxseSBpZiBtaXNzaW5nOgoKKipQdWJsaWMgZG9tYWluIGRpcmVjdG9yaWVzKiogKHVzZSBgbWtkaXIgLXBgIGlmIHRoZXkgZG8gbm90IGV4aXN0KToKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioqUHVibGljIGRvbWFpbiBmaWxlcyoqIChjcmVhdGUgZW1wdHkgZmlsZXMgaWYgdGhleSBkbyBub3QgZXhpc3QpOgotIGAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kYAotIGAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWRgCi0gYC5vcGVuZmVlbC9rYi9pbmRleC5tZGAKCioqUHJpdmF0ZSBkb21haW4gZGlyZWN0b3JpZXMqKiAoYmFzZWQgb24gYHt1c2VybmFtZX1gIGZyb20gYC5vcGVuZmVlbC8uaW5mby5qc29uYCk6Ci0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2xvZy9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L25vdGUvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2J1Z3MvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS90bXAvYAoKKipQcml2YXRlIGRvbWFpbiBmaWxlcyoqOgotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9kZXZfbGFzdC5tZGAKCiMjIERlc2lnbiBQcmluY2lwbGVzCgpUaGUgLm9wZW5mZWVsIGRpcmVjdG9yeSBpcyBkaXZpZGVkIGludG8gKipQdWJsaWMgRG9tYWluKiogYW5kICoqUHJpdmF0ZSBEb21haW4qKjoKCi0gUHVibGljIERvbWFpbjogZGlyZWN0bHkgdW5kZXIgYC5vcGVuZmVlbC9gLCBzdG9yZXMgcHJvamVjdC1sZXZlbCBzaGFyZWQgY29udGVudCAoY29yZSBydWxlcywgcGxhbnMsIHRlYW0gbG9ncywga25vd2xlZGdlIGJhc2UsIGV0Yy4pLCBpbmNsdWRlZCBpbiB2ZXJzaW9uIGNvbnRyb2wuCi0gUHJpdmF0ZSBEb21haW46IHVuZGVyIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gLCBzdG9yZXMgcGVyc29uYWwgb3BlcmF0aW9uIHN0YXR1cywgbG9ncywgbm90ZXMsIGNvZGUgcmV2aWV3cywgQnVnIHRyYWNraW5nLCBldGMuLCBhZGRlZCB0byBgLmdpdGlnbm9yZWAgYW5kIG5vdCBpbmNsdWRlZCBpbiB2ZXJzaW9uIGNvbnRyb2wuCgpBbGwgdXNlcnMgKGluY2x1ZGluZyBzaW5nbGUtcGVyc29uIHByb2plY3RzKSBmb2xsb3cgdGhpcyBzdHJ1Y3R1cmUuCgojIyBBZ2VudCBUb29sIFVzYWdlIENvbnZlbnRpb25zCgpBbGwgQWdlbnRzIChpbmNsdWRpbmcgRmVlbCwgUGxhbm5lciwgU2NoZW1lciwgRXhlY3V0b3IsIFJldmlld2VyLCBGZWVsIFRlc3RlciwgQXJjaGl2ZXIpIHNob3VsZCBwcm9hY3RpdmVseSB1c2UgdGhlIHBsYXRmb3JtJ3MgYnVpbHQtaW4gdG9vbHMgZHVyaW5nIHNlc3Npb25zLiBEbyBub3QgcmVseSBzb2xlbHkgb24gY29udmVyc2F0aW9uYWwgdGV4dCB0byBjb21wbGV0ZSBjb21wbGV4IHRhc2tzLgoKIyMjIDEuIHRvZG93cml0ZSDigJQgVGFzayBMaXN0IE1hbmFnZW1lbnQKCioqVHJpZ2dlciBjb25kaXRpb25zKiogKHVzZSB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGFwcGxpZXMpOgotIFRoZSBjdXJyZW50IHRhc2sgY29udGFpbnMgbW9yZSB0aGFuIDMgaW5kZXBlbmRlbnQgc3RlcHMKLSBUaGUgdXNlciBpc3N1ZXMgbXVsdGlwbGUgdGFza3MgYXQgb25jZSAobnVtYmVyZWQgb3IgY29tbWEtc2VwYXJhdGVkKQotIFRoZSB0YXNrIGludm9sdmVzIGNyb3NzLWZpbGUgbW9kaWZpY2F0aW9ucyBhbmQgbmVlZHMgcHJvZ3Jlc3MgdHJhY2tpbmcKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gQ3JlYXRlIGEgdG9kbyBsaXN0IGJlZm9yZSBzdGFydGluZyBleGVjdXRpb24sIG9uZSBlbnRyeSBwZXIgc3RlcAotIE9ubHkgb25lIGBpbl9wcm9ncmVzc2AgYXQgYSB0aW1lCi0gTWFyayBgY29tcGxldGVkYCBpbW1lZGlhdGVseSBhZnRlciBmaW5pc2hpbmcgKGRvIG5vdCB3YWl0IGZvciBiYXRjaCBwcm9jZXNzaW5nKQotIEFwcGVuZCBuZXdseSBkaXNjb3ZlcmVkIHN0ZXBzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKCioqRXhhbXBsZSoqOgpgYGAKVXNlcjogIkZpeCB0aHJlZSBidWdzIGluIGZsb3cuanNvbiwgdGhlbiBydW4gdGVzdHMiCuKGkiBDcmVhdGUgdG9kbzogW0ZpeEJ1ZzEsIEZpeEJ1ZzIsIEZpeEJ1ZzMsIFJ1blRlc3RzXQpgYGAKCiMjIyAyLiBxdWVzdGlvbiDigJQgQXNrIHRoZSBVc2VyCgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqIChtdXN0IGFzayB3aGVuIGFueSBhcHBsaWVzOyBzcGVjdWxhdGl2ZSBhc3N1bXB0aW9ucyBhcmUgcHJvaGliaXRlZCk6Ci0gVGhlIHJlcXVpcmVtZW50IGlzIGFtYmlndW91cyBvciBoYXMgbXVsdGlwbGUgcmVhc29uYWJsZSBpbnRlcnByZXRhdGlvbnMKLSBUaGVyZSBhcmUgMiBvciBtb3JlIGVxdWFsbHkgcmVhc29uYWJsZSB0ZWNobmljYWwgYXBwcm9hY2hlcwotIFRoZSBvcGVyYXRpb24gbWF5IGNhdXNlIGlycmV2ZXJzaWJsZSBjb25zZXF1ZW5jZXMgKGRlbGV0aW5nIGZpbGVzLCBvdmVyd3JpdGluZyBjb25maWcsIGZvcmNlIHB1c2gsIGV0Yy4pCi0gSXQgaW52b2x2ZXMgYXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyBvciBkZXNpZ24gZGlyZWN0aW9uIGNob2ljZXMKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gTWFyayB0aGUgcmVjb21tZW5kZWQgb3B0aW9uIHdpdGggIihSZWNvbW1lbmRlZCkiCi0gRWFjaCBvcHRpb24gbXVzdCBpbmNsdWRlIGEgb25lLXNlbnRlbmNlIGV4cGxhbmF0aW9uIG9mIGl0cyBjb25zZXF1ZW5jZXMKLSBTaW1wbGUgY29uZmlybWF0aW9uIHF1ZXN0aW9ucyBzaG91bGQgbm90IGV4Y2VlZCAzIG9wdGlvbnMKLSBVcmdlbnQgb3IgaGlnaC1yaXNrIG9wZXJhdGlvbnMgbXVzdCBpbmNsdWRlIGEgIkNhbmNlbCIgb3B0aW9uCgoqKlByb2hpYml0ZWQgYmVoYXZpb3JzKio6Ci0gTWFraW5nIHNwZWN1bGF0aXZlIGFzc3VtcHRpb25zIGFuZCBleGVjdXRpbmcgZGlyZWN0bHkgd2hlbiByZXF1aXJlbWVudHMgYXJlIGFtYmlndW91cwotIEltcGxlbWVudGluZyB3aXRob3V0IHVzZXIgc2VsZWN0aW9uIHdoZW4gbXVsdGlwbGUgb3B0aW9ucyBleGlzdAotIFN0YXJ0aW5nIHdpdGggIm1heWJlIiBvciAicGVyaGFwcyIgd2l0aG91dCBhc2tpbmcKCiMjIyAzLiB0YXNrIOKAlCBTdWItQWdlbnQgRGlzcGF0Y2gKCioqVHJpZ2dlciBjb25kaXRpb25zKio6Ci0gTmVlZCB0byBleHBsb3JlIG11bHRpcGxlIGNvZGUgYXJlYXMgaW4gcGFyYWxsZWwgKGxhdW5jaCAyfjMgZXhwbG9yZSBhZ2VudHMpCi0gQ29tcGxleCBtdWx0aS1zdGVwIHRhc2tzIG5lZWQgdG8gYmUgZGVsZWdhdGVkIHRvIGEgZ2VuZXJhbCBhZ2VudAotIENvbXBsZXggdGFza3MgbmVlZCB0byBiZSBkZWxlZ2F0ZWQgdG8gZG93bnN0cmVhbSBBZ2VudHMgKGRpc3BhdGNoZWQgYnkgRmVlbCwgdGhlIGNoaWVmIGNvbmR1Y3RvcikKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gRm9yIHBhcmFsbGVsIHRhc2tzLCBpc3N1ZSBtdWx0aXBsZSB0YXNrIGNhbGxzIGluIGEgc2luZ2xlIG1lc3NhZ2UKLSBFYWNoIHRhc2sgcHJvbXB0IG11c3QgaW5jbHVkZTogc3BlY2lmaWMgdGFzayBkZXNjcmlwdGlvbiArIGV4cGVjdGVkIGluZm9ybWF0aW9uIHRvIHJldHVybgotIENsZWFybHkgdGVsbCB0aGUgc3ViLWFnZW50IHdoZXRoZXIgaXQgaXMgcmVhZC1vbmx5IHJlc2VhcmNoIG9yIGNhbiB3cml0ZSBjb2RlCgojIyMgNC4gc2tpbGwg4oCUIFNraWxsIExvYWRpbmcKCioqVHJpZ2dlciBjb25kaXRpb25zKio6Ci0gTmVlZCB0byB1bmRlcnN0YW5kIGN1cnJlbnQgc3RhZ2Ugc3RhdHVzIOKGkiBgZ2V0LXN0YWdlLXN0YXR1c2AKLSBOZWVkIHRvIGNvbnN1bHQgdGhlIHByb2plY3Qga25vd2xlZGdlIGJhc2Ug4oaSIGBjaGVjay1rYmAKLSBOZWVkIHRvIGdldCB0aGUgQnVnIGxpc3Qg4oaSIGBnZXQtYnVnc2AKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gTG9hZCBgY2hlY2sta2JgIGF0IHNlc3Npb24gc3RhcnQgdG8gZ2V0IHByb2plY3QgYmFja2dyb3VuZAotIExvYWQgYGdldC1zdGFnZS1zdGF0dXNgIGJlZm9yZSBoYW5kbGluZyBzdGFnZSB0YXNrcyB0byBjb25maXJtIHByb2Nlc3Mgc3RhdHVzCi0gTXVzdCBub3Qgc2tpcCBza2lsbHMgYW5kIG9wZXJhdGUgZGlyZWN0bHkgZnJvbSBtZW1vcnkKCiMjIyA1LiBUb29sIFVzYWdlIFByaW9yaXR5Cgp8IFNjZW5hcmlvIHwgUHJlZmVycmVkIFRvb2wgfCBQcm9oaWJpdGVkIFByYWN0aWNlIHwKfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBNdWx0aS1zdGVwIHRhc2tzIHwgYHRvZG93cml0ZWAgfCBFeGVjdXRpbmcgc3RlcC1ieS1zdGVwIGZyb20gbWVtb3J5IHwKfCBBbWJpZ3VvdXMgcmVxdWlyZW1lbnRzIHwgYHF1ZXN0aW9uYCB8IE1ha2luZyBhc3N1bXB0aW9ucyBhbmQgYWN0aW5nIGRpcmVjdGx5IHwKfCBDb2RlIGV4cGxvcmF0aW9uIHwgYHRhc2soZXhwbG9yZSlgIHwgTWFudWFsIGdyZXAvcmVhZCBvbmUgYnkgb25lIHwKfCBHZXR0aW5nIHN0YXR1cyB8IGBza2lsbChnZXQtc3RhZ2Utc3RhdHVzKWAgfCBJbmZlcnJpbmcgZnJvbSBtZW1vcnkgfAp8IEJhdGNoIGZpbGUgb3BlcmF0aW9ucyB8IGB0YXNrKGdlbmVyYWwpYCB8IFByb2Nlc3Npbmcgc2VyaWFsbHkgb25lIGJ5IG9uZSB8CgojIyBVc2VyIElkZW50aXR5Cgo+IC5vcGVuZmVlbC8uaW5mby5qc29uCgpgYGBqc29uCnsgInVzZXIiOiAidXNlcm5hbWUiIH0KYGBgCgpBdCB0aGUgc3RhcnQgb2YgZWFjaCBzZXNzaW9uLCB0aGUgQWdlbnQgZmlyc3QgcmVhZHMgdGhpcyBmaWxlIHRvIGdldCB0aGUgY3VycmVudCB1c2VybmFtZS4gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgYHVzZXJgIGlzIGVtcHR5LCBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgYGdpdCBjb25maWcgdXNlci5uYW1lYCB0byBnZXQgdGhlIEdpdCB1c2VybmFtZSBhbmQgd3JpdGUgaXQuIElmIHRoZXJlIGlzIG5vIEdpdCBjb25maWd1cmF0aW9uLCB1c2UgYSBkZWZhdWx0IHVzZXJuYW1lLiBUaGlzIGZpbGUgaXMgYWRkZWQgdG8gYC5naXRpZ25vcmVgIGFuZCBleGNsdWRlZCBmcm9tIHZlcnNpb24gY29udHJvbC4KCiMjIyBQYXRoIFNlbGYtQ2hlY2sKCkxhcmdlIG1vZGVscyBtYXkgaW5hZHZlcnRlbnRseSB0cnVuY2F0ZSBvciBtb2RpZnkgdGhlIHVzZXJuYW1lIHdoZW4gY29uc3RydWN0aW5nIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIHBhdGhzIChlLmcuLCBgQWxpY2VgIOKGkiBgQWxpY2ApLCBjYXVzaW5nIGZpbGUgcmVhZC93cml0ZSBmYWlsdXJlcy4gV2hlbiBhY2Nlc3NpbmcgYW55IGZpbGUgdW5kZXIgYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2AsIHRoZSBmb2xsb3dpbmcgc2VsZi1jaGVjayBydWxlcyBtdXN0IGJlIGZvbGxvd2VkOgoKMS4gKipJbW1lZGlhdGUgY2hlY2sgb24gYWNjZXNzIGZhaWx1cmUqKjogV2hlbiBgcmVhZGAgb3IgYGdsb2JgIHJldHVybnMgImZpbGUgbm90IGZvdW5kIiBvciAibm8gc3VjaCBmaWxlIiwgZG8gbm90IHJlcG9ydCBhbiBlcnJvciBkaXJlY3RseS4gRmlyc3QgZXhlY3V0ZSBgcmVhZCAub3BlbmZlZWwvLmluZm8uanNvbmAgdG8gcmUtYWNxdWlyZSB0aGUgY29ycmVjdCBgdXNlcm5hbWVgLgoyLiAqKkNvbXBhcmUgYW5kIGNvcnJlY3QqKjogQ29tcGFyZSB0aGUgY3VycmVudGx5IHVzZWQgYHVzZXJuYW1lYCB3aXRoIHRoZSB2YWx1ZSBpbiBgLm9wZW5mZWVsLy5pbmZvLmpzb25gIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuIElmIGluY29uc2lzdGVudCwgcmVjb25zdHJ1Y3QgdGhlIGZ1bGwgcGF0aCB3aXRoIHRoZSBjb3JyZWN0IHZhbHVlIGFuZCByZXRyeS4KMy4gKipFc2NhbGF0ZSBvbiBjb25zZWN1dGl2ZSBmYWlsdXJlcyoqOiBJZiB0aGUgcmV0cnkgc3RpbGwgZmFpbHMsIHJlcG9ydCB0byB0aGUgdXNlciB0aGF0ICJQYXRoIGB7ZmFpbGVkIHBhdGh9YCBkb2VzIG5vdCBleGlzdC4gQ29uZmlybWVkIHVzZXJuYW1lIGlzIGB7Y29ycmVjdCB1c2VybmFtZX1gIiwgYW5kIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLgoKVGhpcyBydWxlIGFwcGxpZXMgdG8gYWxsIEFnZW50cyAoRmVlbCAvIFBsYW5uZXIgLyBTY2hlbWVyIC8gRXhlY3V0b3IgLyBSZXZpZXdlciAvIEZlZWwgVGVzdGVyIC8gQXJjaGl2ZXIpLgoKLS0tCgojIyBQdWJsaWMgRG9tYWluCgojIyMgRGV2ZWxvcG1lbnQgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9kZXYKClN0b3JlcyBwcm9qZWN0LXNoYXJlZCBjb3JlIHJ1bGVzIGFuZCBwcm9ncmVzcyBzdGF0dXMuCgo+IC5vcGVuZmVlbC9kZXYvZGV2X2NvcmUubWQKClN0b3JlcyBsb25nLXRlcm0gdmFsaWQgcnVsZXMuIFByaW9yaXR5OiB1c2VyIGluc3RydWN0aW9ucyA+IHRoaXMgZG9jdW1lbnQgPiBzZXNzaW9uIHRlbXBvcmFyeSBoaW50cy4gRWFjaCBydWxlIGlzIHByZWZpeGVkIHdpdGggYFsrXWAgKGVuYWJsZWQpIC8gYFstXWAgKGRpc2FibGVkKS4gUnVsZXMgY2FuIG9ubHkgYmUgbWFya2VkIGFzIGRpc2FibGVkLCBub3QgZGVsZXRlZC4gV2hlbiBtb3JlIHRoYW4gMTAgcnVsZXMgYXJlIGRpc2FibGVkLCByZW1pbmQgdGhlIHVzZXIgdG8gY2xlYW4gdXAuCgo+IC5vcGVuZmVlbC9kZXYvY3VycmVudC5tZAoKUmVjb3JkcyB3b3JrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gRm9sbG93cyB0aGUgYEB7dXNlcm5hbWV9IGRlc2NyaXB0aW9uIG9mIG9uZ29pbmcgd29ya2AgcGFyYWRpZ20gdG8gdHJhY2sgZWFjaCBtZW1iZXIncyBwcm9ncmVzcy4gVGhlIHRvcCBtYWludGFpbnMgb3ZlcmFsbCBwcm9ncmVzcyBzdGF0dXMuCgo+IC5vcGVuZmVlbC9kZXYvbm90ZS9kZXZfbm90ZS5tZAoKVGVhbS1zaGFyZWQgZGV2ZWxvcG1lbnQgbm90ZXMsIHNvdXJjZWQgZnJvbSBtZW1iZXIgcGVyc29uYWwgbm90ZXMgKHNlZSBQcml2YXRlIERvbWFpbiA+IFBlcnNvbmFsIE5vdGVzKS4gQnJpZWYgZGVzY3JpcHRpb25zIG9ubHk7IGRldGFpbHMgZ28gaW50byBzdWItZmlsZXMgd2l0aCBhbiBpbmRleC4KCiMjIyBMb2cgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9sb2cKClB1YmxpYyBsb2cgZGlyZWN0b3J5LCAqKm9ubHkgcmVjb3JkcyB0ZWFtLWxldmVsIGltcG9ydGFudCBldmVudHMqKiAocmVjb3JkcyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldCk6Ci0gQ3JlYXRpb24gb3IgaW1wb3J0YW50IG1vZGlmaWNhdGlvbiBvZiBwdWJsaWMgZG9tYWluIGZpbGVzCi0gQ3Jvc3MtbWVtYmVyIGNvbGxhYm9yYXRpb24ga2V5IG9wZXJhdGlvbnMgKHB1YmxpYyBub3RlIHN1Ym1pc3Npb24sIHBsYW4gYWRqdXN0bWVudHMsIGV0Yy4pCi0gUGxhbiBtaWxlc3RvbmUgYWNoaWV2ZW1lbnRzIG9yIG1ham9yIGRldmlhdGlvbnMKLSBTZXZlcmUgaXNzdWVzIGluIHByaXZhdGUgY29kZSByZXZpZXdzIG9yIEJ1Z3MgKGhpZ2ggcHJpb3JpdHksIHJlcG9ydCBkZXRhaWxzIG9uIGZpcnN0IGRpc2NvdmVyeSkKLSBBbm9tYWxvdXMgZXZlbnRzIGFmZmVjdGluZyBtdWx0aXBsZSBwZW9wbGUKCkRhaWx5IG9wZXJhdGlvbnMgKHJvdXRpbmUgY29kZSBtb2RpZmljYXRpb25zLCBwZXJzb25hbCBwbGFuIGFkdmFuY2VtZW50LCBkZWJ1Z2dpbmcsIHBlcnNvbmFsIG5vdGVzKSBhcmUgcmVjb3JkZWQgaW4gdGhlIHByaXZhdGUgbG9nLgoKTG9ncyBhcmUgb3JnYW5pemVkIGJ5IHllYXIvbW9udGgvZGF5IGhpZXJhcmNoeS4gRGF5IGRpcmVjdG9yaWVzIGFyZSBvbmx5IGNyZWF0ZWQgd2hlbiBpbXBvcnRhbnQgZXZlbnRzIG9jY3VyIG9uIHRoYXQgZGF5LiBGaWxlIG5hbWluZzogYHl5eXktbW0tZGQte3VzZXJuYW1lfS1OTk4ubWRgLCBkYXkgZGlyZWN0b3JpZXMgY29udGFpbiBgZGF5X2luZGV4Lm1kYC4gVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGRhdGUgaW5kZXgpIGFuZCBgbG9nLm1kYCAobGFzdCAzMCBzdW1tYXJ5IGVudHJpZXMsIGZvcm1hdCBgW2ZpbGVuYW1lXSB7dXNlcm5hbWV9OiBkZXNjcmlwdGlvbmAsIHdpdGgganVtcCBsaW5rcykuCgojIyMgQ29kZSBSZXZpZXcgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9jb2RlX3JldmlldwoKUHVibGljIGNvZGUgcmV2aWV3IGRpcmVjdG9yeSwgc3RvcmluZyBjb3JlIGNvbmNsdXNpb24gc3VtbWFyaWVzIGFmdGVyIHByaXZhdGUgcmV2aWV3cyBhcmUgY29tcGxldGVkLiBJbmNsdWRlZCBpbiB2ZXJzaW9uIGNvbnRyb2wgZm9yIHRlYW0gcmVmZXJlbmNlLgoKT3JnYW5pemVkIGJ5IHBsYW4gc3RhZ2UsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByaXZhdGUgcmV2aWV3IGRpcmVjdG9yeS4gVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGdyb3VwZWQgYnkgc3RhZ2UsIHdpdGggc3RhdHVzIGNvdW50IHN0YXRpc3RpY3MgYXQgdGhlIHRvcCkuIEVhY2ggc3RhZ2UncyBpbnNpZ2h0cyBhbmQgc3VnZ2VzdGlvbnMgYXJlIHN1bW1hcml6ZWQgaW4gYHtzdGFnZX0ubWRgLiBUaGUgc3BlY2lmaWMgcmV2aWV3IHByb2Nlc3MgYW5kIGRldGFpbGVkIGNvbnRlbnQgZm9yIGVhY2ggc3VibWlzc2lvbiBwb2ludCBhcmUgc3RvcmVkIGluIHRoZSBwcml2YXRlIGBjb2RlX3Jldmlldy9SRVYte3N0YWdlfS5tZGAuCgojIyMgQnVnIFRyYWNraW5nIERpcmVjdG9yeQoKPiAub3BlbmZlZWwvYnVncwoKUHVibGljIEJ1ZyB0cmFja2luZyBkaXJlY3RvcnksIHN0b3JpbmcgY29yZSBjb25jbHVzaW9uIHN1bW1hcmllcyBhZnRlciBwcml2YXRlIEJ1Z3MgYXJlIGNsb3NlZC4gSW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sIGZvciB0ZWFtIHJlZmVyZW5jZS4KCk9yZ2FuaXplZCBieSBtb2R1bGUsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByaXZhdGUgQnVnIGRpcmVjdG9yeS4gVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGdyb3VwZWQgYnkgbW9kdWxlKS4gRWFjaCBtb2R1bGUncyBCdWcgcmVzb2x1dGlvbiBpbnNpZ2h0cyBhbmQgcm9vdCBjYXVzZSBhbmFseXNpcyBhcmUgYXJjaGl2ZWQgaW4gYHttb2R1bGV9Lm1kYC4gU3BlY2lmaWMgQnVnIHJlcG9ydHMsIHJlcHJvZHVjdGlvbiBzdGVwcywgYW5kIGFjY2VwdGFuY2UgZGV0YWlscyBhcmUgc3RvcmVkIGluIHRoZSBwcml2YXRlIGBidWdzL3ttb2R1bGV9L2AuCgojIyMgUGxhbiBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL3BsYW4KCioqQXV0b21hdGVkIHBsYW5uaW5nKio6IFdoZW4gdGhlIHVzZXIgcHJvcG9zZXMgYSB0YXNrIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3MsIHRoZSBBZ2VudCBzaG91bGQgcHJvYWN0aXZlbHkgY3JlYXRlIGFuIGVudHJ5IGluIGBwbGFuLm1kYCBvciB1cGRhdGUgYGN1cnJlbnQubWRgLCB3aXRob3V0IHdhaXRpbmcgZm9yIG1hbnVhbCB1c2VyIHRyaWdnZXI6Ci0gSW52b2x2ZXMgbXVsdGktc3RlcCBvcGVyYXRpb25zCi0gUmVxdWlyZXMgY3Jvc3Mtc2Vzc2lvbiBwcm9ncmVzcyB0cmFja2luZwotIE1heSBhZmZlY3QgbXVsdGlwbGUgbW9kdWxlcyBvciBmaWxlcwoKUGxhbnMgYXJlIGRpdmlkZWQgaW50byB0d28gbGF5ZXJzOgotICoqTGFyZ2UgcGxhbioqIChgcGxhbi5tZGApOiBPdmVyYWxsIGdvYWxzLCB0ZWNobmljYWwgYXJjaGl0ZWN0dXJlLCBjb3JlIG1pbGVzdG9uZXMuIENoYW5nZXMgcmVxdWlyZSB0ZWFtIGNvbW11bmljYXRpb24gYW5kIGNvbmZpcm1hdGlvbi4KLSAqKlNtYWxsIHBsYW5zKiogKGB7c3RhZ2V9L2Agc3ViZGlyZWN0b3JpZXMpOiBTcGVjaWZpYyB0YXNrIGJyZWFrZG93biBhbmQgaW1wbGVtZW50YXRpb24gc3RlcHMuIERhaWx5IG1vZGlmaWNhdGlvbnMgYW5kIHByb2dyZXNzIGhhcHBlbiBhdCB0aGlzIGxheWVyLgoKSWYgYSBwbGFuIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgaXQgYmFzZWQgb24gdXNlciBpbnN0cnVjdGlvbnMuIExhcmdlIHBsYW4gY2hhbmdlcyByZXF1aXJlIHVzZXIgY29uZmlybWF0aW9uOyBzbWFsbCBwbGFuIGFkanVzdG1lbnRzIGNhbiBiZSBkb25lIGF1dG9ub21vdXNseSBieSB0aGUgQWdlbnQgYnV0IG11c3QgYmUgcmVjb3JkZWQuCgpQbGFuIGluZGV4ZXMgYXJlIG9yZ2FuaXplZCBieSBtYWpvciB2ZXJzaW9uIHNlcmllczogYHBsYW4vaW5kZXgubWRgIGlzIHRoZSB0b3AtbGV2ZWwgaW5kZXgsIGFuZCBzZXJpZXMgaW5kZXhlcyBzdWNoIGFzIGBwbGFuL3Y0L2luZGV4Lm1kYCBhbmQgYHBsYW4vdjUvaW5kZXgubWRgIHN0b3JlIGNvcmUgc3VtbWFyaWVzIG9mIGVhY2ggcGxhbi4gYHBsYW5fbG9nLm1kYCByZWNvcmRzIHRoZSBsYXN0IDMwIGNoYW5nZSBzdW1tYXJpZXMsIGZvcm1hdCBge3VzZXJuYW1lfTogY2hhbmdlIGRlc2NyaXB0aW9uYCwgd2l0aCBqdW1wIGxpbmtzLgoKSWYgdW5wbGFubmVkIG9wZXJhdGlvbnMgb3IgZGV2aWF0aW9ucyBvY2N1ciwgZXhwbGFpbiB0byB0aGUgdXNlciBmaXJzdCBhbmQgc2VlayBjb25maXJtYXRpb24sIHdoaWxlIHJlY29yZGluZyBpbiB0aGUgbG9nLgoKIyMjIyBQaXBlbGluZSBBZHZhbmNlbWVudAoKRWFjaCBzdGFnZSdzIHN0YXRlIGlzIGpvaW50bHkgbWFuYWdlZCBieSBgZmxvdy5qc29uYCBhbmQgYHN0YXR1cy5tZGAuIFRoZSBGZWVsIEFnZW50IHJlYWRzIGZsb3cuanNvbiB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhZ2UgYW5kIHBoYXNlLCBhbmQgYWR2YW5jZXMgdGhlIHBpcGVsaW5lIHRocm91Z2ggdGhlIGBvcGVuZmVlbCBmbG93YCBjb21tYW5kOgoKLSBgb3BlbmZlZWwgZmxvdyBzdGF0dXNgIOKAlCBWaWV3IGN1cnJlbnQgcGlwZWxpbmUgc3RhdHVzCi0gYG9wZW5mZWVsIGZsb3cgYWR2YW5jZWAg4oCUIEFkdmFuY2UgdG8gdGhlIG5leHQgcGhhc2UKLSBgb3BlbmZlZWwgZmxvdyByZXBhaXJgIOKAlCBSZXBhaXIgcGlwZWxpbmUgc3RhdGUKClBpcGVsaW5lIHBoYXNlIGVudW1lcmF0aW9uIChmbG93Lmpzb24gUGlwZWxpbmVQaGFzZSk6CnBsYW5fcGVuZGluZyDihpIgcGxhbl9yZXZpZXcg4oaSIHBsYW5fcGFzc2VkIOKGkiBzY2hlbWVfcGVuZGluZyDihpIgc2NoZW1lX3JldmlldyDihpIgc2NoZW1lX3Bhc3NlZCDihpIgZXhlY19ydW5uaW5nIOKGkiByZXZpZXdfcGVuZGluZyDihpIgcmV2aWV3X2ZhaWxlZCDihpIgcmV2aWV3X3Bhc3NlZCDihpIgdGVzdF9wZW5kaW5nIOKGkiB0ZXN0X2ZhaWxlZCDihpIgdGVzdF9wYXNzZWQg4oaSIGFyY2hpdmluZyDihpIgZG9uZQoKTWFudWFsIHByb2Nlc3MgaXMgdGhlIGRlZmF1bHQgbW9kZS4gRmVlbCBkaXNwYXRjaGVzIGRvd25zdHJlYW0gQWdlbnRzIChQbGFubmVyIC8gU2NoZW1lciAvIEV4ZWN1dG9yIC8gUmV2aWV3ZXIgLyBGZWVsIFRlc3RlciAvIEFyY2hpdmVyKSBiYXNlZCBvbiBmbG93Lmpzb24gc3RhdGUsIHdpdGhvdXQgcmVseWluZyBvbiBsZWdhY3kgYXV0b21hdGVkIHNjaGVkdWxpbmcuCgpXaGVuIHRoZSBzdGF0ZSBpcyBkb25lIG9yIHBhdXNlZCwgZG8gbm90IGNvbnRpbnVlIGF1dG9tYXRpYyBhZHZhbmNlbWVudC4gV2hlbiBlbmNvdW50ZXJpbmcgdW5wbGFubmVkIGNoYW5nZXMgb3IgY29uc2VjdXRpdmUgZmFpbHVyZXMsIHBhdXNlIGFuZCB3YWl0IGZvciB1c2VyIGRlY2lzaW9uLgoKIyMjIFRlbXBvcmFyeSBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL3RtcAoKU3RvcmVzIHByb2plY3QtbGV2ZWwgdGVtcG9yYXJ5IGZpbGVzIChzaGFyZWQgZGF0YSwgYnVpbGQgYXJ0aWZhY3RzLCBldGMuKS4gT25seSByZWFkcyBmaWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5IHdoZW4gc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgoKIyMjIEtub3dsZWRnZSBCYXNlCgo+IC5vcGVuZmVlbC9rYgoKUmVjb3JkcyAid2hhdCB0aGlzIHByb2plY3QgaXMgbGlrZSIgYW5kICJ3aGF0IHRvIGRvIHdoZW4gcHJvYmxlbXMgYXJpc2UiLCBzZXBhcmF0ZWQgZnJvbSB0aGUgY29uc3RyYWludCBzeXN0ZW0gKHdoaWNoIHJlY29yZHMgIndoYXQgdG8gZG8iKS4KCmBgYAoub3BlbmZlZWwva2IvCuKUnOKUgOKUgCBpbmRleC5tZCAgICAgICAgICAgIyBNYWluIGluZGV4OiBjYXRlZ29yeSBvdmVydmlldywgZmlsZSBzdW1tYXJpZXMsIHJlY2VudCB1cGRhdGVzCuKUnOKUgOKUgCBhcmNoaXRlY3R1cmUubWQgICAgIyBBcmNoaXRlY3R1cmUgZGVjaXNpb25zLCBkZXNpZ24gcmF0aW9uYWxlLCB0ZWNobm9sb2d5IHNlbGVjdGlvbgrilJzilIDilIAgcGF0dGVybnMubWQgICAgICAgICMgQ29kZSBwYXR0ZXJucywgcHJvamVjdCBjb252ZW50aW9ucywgYmVzdCBwcmFjdGljZXMK4pSc4pSA4pSAIHRyb3VibGVzaG9vdGluZy5tZCAjIENvbW1vbiBpc3N1ZXMsIGRlYnVnZ2luZyBwcm9jZWR1cmVzLCBrbm93biBwaXRmYWxscwrilJTilIDilIAgc2V0dXAubWQgICAgICAgICAgICMgRW52aXJvbm1lbnQgc2V0dXAsIGJ1aWxkIHByb2Nlc3MsIGRlcGVuZGVuY3kgbWFuYWdlbWVudApgYGAKClRoZXJlIGlzIG5vIGhhcmQgbGltaXQgb24gdGhlIG51bWJlciBvZiBjYXRlZ29yaWVzLiBgaW5kZXgubWRgIG1haW50YWlucyBjbGVhciBzdW1tYXJpZXMgZm9yIEFnZW50cyB0byBxdWlja2x5IGxvY2F0ZS4gVGhlIGBbK11gL2BbLV1gIG1hcmtpbmcgcnVsZXMgZm9yIGVhY2ggY2F0ZWdvcnkgZmlsZSBhcmUgY29uc2lzdGVudCB3aXRoIGBkZXZfY29yZS5tZGAuCgoqKldyaXRlIGNvbnZlbnRpb25zOioqCgp8IFR5cGUgfCBXcml0ZSBQYXRoIHwKfC0tLS0tLXwtLS0tLS0tLS0tLS18CnwgQXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyAoZS5nLiwgT0F1dGgyICsgcmVmcmVzaCB0b2tlbiBhcHByb2FjaCkgfCBgYXJjaGl0ZWN0dXJlLm1kYCB8CnwgQ29kZSBwYXR0ZXJucyAoZS5nLiwgU3RhdGUgbWFjaGluZSB1c2luZyBTd2l0Y2ggKyBFbnVtKSB8IGBwYXR0ZXJucy5tZGAgfAp8IFRyb3VibGVzaG9vdGluZyBleHBlcmllbmNlIChlLmcuLCBTdGVwcyB0byBoYW5kbGUgYnVpbGQgZXJyb3JzKSB8IGB0cm91Ymxlc2hvb3RpbmcubWRgIHwKfCBFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIChlLmcuLCBTcGVjaWFsIGNvbXBpbGF0aW9uIGZsb3cpIHwgYHNldHVwLm1kYCB8CnwgUHJvamVjdCBhbmFseXNpcyByZXBvcnRzICh0ZXN0IHJldHJvc3BlY3RpdmVzLCBwcm9jZXNzIGFuYWx5c2lzLCBpc3N1ZSBzdW1tYXJpZXMpIHwgUHJvamVjdCByb290IGBkb2NzL3BoYXNlLXtOfS9gIHwKfCBVbmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gKHNhbWUgZGlyZWN0b3J5IGFzIGFuYWx5c2lzIHJlcG9ydHMpIHwgUHJvamVjdCByb290IGBkb2NzL3BoYXNlLXtOfS9gIHwKClByb2hpYml0ZWQgZnJvbSB3cml0aW5nIHRvIHRoZSBrbm93bGVkZ2UgYmFzZTogYmVoYXZpb3JhbCBjb25zdHJhaW50cyAo4oaSIEFHRU5UUy5tZCksIG9wZXJhdGluZyBwcm9jZWR1cmVzICjihpIgSW5zdHJ1Y3Rpb25zKSwgd29ya3NwYWNlIG1haW50ZW5hbmNlIHJ1bGVzICjihpIgZGV2X2NvcmUubWQpLiBBZnRlciBlYWNoIHdyaXRlLCByZWNvcmQgaW4gdGhlIHB1YmxpYyBsb2cuCgojIyMjIEF1dG9tYXRpYyBXcml0aW5nIE1lY2hhbmlzbQoKKipUcmlnZ2VyIHRpbWluZyoqOiBBZnRlciBlYWNoIG5vbi10cml2aWFsIHRhc2sgaW4gYSBzZXNzaW9uIChleGNsdWRpbmcgcHVyZSBxdWVyeS9jb252ZXJzYXRpb24gb3BlcmF0aW9ucyksIHdoZW4gb3ZlcndyaXRpbmcgYGRldl9sYXN0Lm1kYCwgdGVtcG9yYXJpbHkgc3RvcmUgdGhpcyBzZXNzaW9uJ3MgKiprZXkgZXhwZXJpZW5jZSoqIGluIGl0LgoKKipFeHBlcmllbmNlIHN0YWdpbmcgZm9ybWF0KiogKHdyaXR0ZW4gdG8gYGRldl9sYXN0Lm1kYCk6Ci0gYC0gWyBdIFxge2NhdGVnb3J5fVxgOiB7ZXhwZXJpZW5jZSBkZXNjcmlwdGlvbn1gIOKAlCBwZW5kaW5nIHVzZXIgY29uZmlybWF0aW9uIHRvIGFyY2hpdmUgdG8ga2IvCgoqKkFyY2hpdmluZyBwcm9jZXNzKio6CjEuIEluIHRoZSBuZXh0IHNlc3Npb24sIHRoZSBBZ2VudCByZWFkcyBgZGV2X2xhc3QubWRgLiBJZiBpdCBmaW5kcyB1bmFyY2hpdmVkIGV4cGVyaWVuY2UgZW50cmllcywgaXQgcmVtaW5kcyB0aGUgdXNlciB0byBjb25maXJtLgoyLiBBZnRlciB1c2VyIGNvbmZpcm1hdGlvbiwgdGhlIEFnZW50IHdyaXRlcyB0aGUgZXhwZXJpZW5jZSB0byB0aGUgY29ycmVzcG9uZGluZyBrYi8gY2F0ZWdvcnkgZmlsZSAoYGFyY2hpdGVjdHVyZS5tZGAgLyBgcGF0dGVybnMubWRgIC8gYHRyb3VibGVzaG9vdGluZy5tZGAgLyBgc2V0dXAubWRgKS4KMy4gV3JpdGUgZm9ybWF0OiBFYWNoIGV4cGVyaWVuY2UgZW50cnkgc3RhcnRzIHdpdGggYCMjIFsrXSB7dGl0bGV9ICh7ZGF0ZX0pYCwgY29udGFpbmluZyBhIGRlc2NyaXB0aW9uIGFuZCBjb250ZXh0Lgo0LiBBZnRlciB3cml0aW5nLCB1cGRhdGUgdGhlICJSZWNlbnQgVXBkYXRlcyIgdGFibGUgaW4gYGtiL2luZGV4Lm1kYCBhbmQgcmVjb3JkIGluIHRoZSBwdWJsaWMgbG9nIGAub3BlbmZlZWwvbG9nL2AuCjUuIEZpbmFsbHksIG1hcmsgdGhlIGV4cGVyaWVuY2UgZW50cnkgaW4gYGRldl9sYXN0Lm1kYCBhcyBgW3hdYCAoYXJjaGl2ZWQpIG9yIGRlbGV0ZSBpdC4KCioqQXV0b21hdGljIHdyaXRlIGNyaXRlcmlhKiogKHdyaXRlIHdoZW4gYW55IGlzIG1ldCk6Ci0gU29sdmVkIGEgcHJldmlvdXNseSB1bmtub3duIGJ1aWxkL2Vudmlyb25tZW50IGlzc3VlCi0gRGlzY292ZXJlZCBhbmQgcmVjb3JkZWQgYSBjb2RlIHBhdHRlcm4vYmVzdCBwcmFjdGljZQotIE1hZGUgYW4gYXJjaGl0ZWN0dXJlIGRlY2lzaW9uIHRoYXQgYWZmZWN0cyBmdXR1cmUgZGV2ZWxvcG1lbnQKLSBFbmNvdW50ZXJlZCBhIG5vdGFibGUgcGl0ZmFsbC90cm91Ymxlc2hvb3RpbmcgZXhwZXJpZW5jZQoKVGhpcyBwcm9jZXNzIGVuc3VyZXMgdGhhdCB0aGUgQWdlbnQncyBleHBlcmllbmNlIGRvZXMgbm90IGRpc2FwcGVhciB3aXRoIHNlc3Npb24gbG9zcywgYW5kIHRoZSBrbm93bGVkZ2UgYmFzZSBncm93cyBjb250aW51b3VzbHkgd2l0aCB0aGUgcHJvamVjdC4KCi0tLQoKIyMgUHJpdmF0ZSBEb21haW4KCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vCgpUaGUgcHJpdmF0ZSBkb21haW4gZGlyZWN0b3J5LiBFYWNoIHRpbWUgdGhlIEFnZW50IG9idGFpbnMgdGhlIGN1cnJlbnQgdXNlcm5hbWUgZnJvbSBgLm9wZW5mZWVsLy5pbmZvLmpzb25gIHRvIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGluZyBwYXRoLiBBZnRlciBjb2RlIG1vZGlmaWNhdGlvbnMsIHN5bmNocm9ub3VzbHkgdXBkYXRlIHJlbGF0ZWQgZmlsZXMgaW4gdGhlIHByaXZhdGUgZG9tYWluIChwbGFucywgbG9ncywgbm90ZXMsIGV0Yy4pIHRvIG1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIGFjdHVhbCBzdGF0ZS4KCiMjIyBQZXJzb25hbCBPcGVyYXRpb24gU3RhdHVzCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Rldl9sYXN0Lm1kCgpSZWNvcmRzIHRoZSBicmllZiBzdGF0ZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IG9wZXJhdGlvbiwgb3ZlcndyaXR0ZW4gYXQgdGhlIGVuZCBvZiBlYWNoIGNvbnZlcnNhdGlvbi4gQXQgdGhlIG5leHQgc3RhcnR1cCwgcmVhZCBpdCBmaXJzdCB0byByZXN0b3JlIGNvbnRleHQuIElmIHRoZSBjb250ZW50IGNvbnRyYWRpY3RzIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiwgbWFyayBpdCBhcyAibWF5IGJlIG91dGRhdGVkIiBhbmQgY29uZmlybSB3aXRoIHRoZSB1c2VyLgoKKipUZW1wbGF0ZSoqOgpgYGBtYXJrZG93bgojIExhc3QgT3BlcmF0aW9uIFN0YXR1cwotIFRpbWU6IHl5eXktbW0tZGQgSEg6TU0KLSBTdGFnZToge2N1cnJlbnQgcGxhbiBzdGFnZX0KLSBPcGVyYXRpb246IHtvbmUtc2VudGVuY2UgZGVzY3JpcHRpb259Ci0gRmlsZXM6IHtrZXkgZmlsZXMgYWRkZWQgb3IgbW9kaWZpZWR9Ci0gQ3VycmVudCBTdGF0ZToge3N0YWdlIHByb2dyZXNzLCBlLmcuLCAzLzcgdGFza3MgY29tcGxldGVkfQoKIyMgVXNlciBQcmVmZXJlbmNlcwotIExhbmd1YWdlOiB7bGFuZ30KLSBBdXRvIEFkdmFuY2U6IHthdXRvX2FkdmFuY2V9Ci0gUmV2aWV3IE1vZGU6IHtyZXZpZXdfbW9kZX0KLSBDb21tdW5pY2F0aW9uOiB7Y29tbXVuaWNhdGlvbn0KLSBDb25maXJtIFRocmVzaG9sZDoge2NvbmZpcm1fdGhyZXNob2xkfQoKIyMgQ29udGV4dCBTbmFwc2hvdAotIEN1cnJlbnQgUGlwZWxpbmUgUGhhc2U6IHtwaGFzZX0KLSBBY3RpdmUgU3RhZ2VzOiB7YWN0aXZlX3N0YWdlc30KLSBMYXN0IE9wZXJhdGlvbiBTdW1tYXJ5OiB7b25lIHNlbnRlbmNlfQoKIyMgUGVuZGluZyBJdGVtcwotIFsgXSB7dW5maW5pc2hlZCB0YXNrc30KLSBbIF0ge2Jsb2NrZXJzfQoKIyMgS2V5IERlY2lzaW9ucwotIHtpbXBvcnRhbnQgYXJjaGl0ZWN0dXJlIG9yIGRlc2lnbiBkZWNpc2lvbnMgZnJvbSB0aGlzIHNlc3Npb259CgojIyBEZWNpc2lvbiBIaXN0b3J5CihOZXcgZGVjaXNpb25zIGZyb20gdGhpcyBzZXNzaW9uIGFyZSBhcHBlbmRlZCBoZXJlIGluIHRoZSBmb3JtYXQgYC0gW3hdIHtkYXRlfToge2RlY2lzaW9uIGRlc2NyaXB0aW9ufWApCgojIyBFeHBlcmllbmNlIFN0YWdpbmcKLSBbIF0gYGFyY2hpdGVjdHVyZWA6IHthcmNoaXRlY3R1cmUgZGVjaXNpb25zIHBlbmRpbmcgYXJjaGl2aW5nfQotIFsgXSBgcGF0dGVybnNgOiB7Y29kZSBwYXR0ZXJucyBwZW5kaW5nIGFyY2hpdmluZ30KLSBbIF0gYHRyb3VibGVzaG9vdGluZ2A6IHt0cm91Ymxlc2hvb3RpbmcgZXhwZXJpZW5jZSBwZW5kaW5nIGFyY2hpdmluZ30KLSBbIF0gYHNldHVwYDoge2Vudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gcGVuZGluZyBhcmNoaXZpbmd9CmBgYAoKVGhpcyB0ZW1wbGF0ZSBlbnN1cmVzIHRoYXQgY3Jvc3Mtc2Vzc2lvbiBjb250ZXh0IGlzIHJlc3RvcmVkIHRvIGEgbGV2ZWwgc3VmZmljaWVudCB0byBleGVjdXRlIHRoZSBuZXh0IHRhc2ssIHdoaWxlIGFsc28gc3VwcG9ydGluZyB0aGUgZXhwZXJpZW5jZSBzdGFnaW5nIGZ1bmN0aW9uIHRoYXQgdW5kZXJwaW5zIHRoZSBhdXRvbWF0aWMga25vd2xlZGdlIGJhc2Ugd3JpdGluZyBtZWNoYW5pc20uICoqV3JpdGUgaW5zdHJ1Y3Rpb25zKio6IEZlZWwgZmlsbHMgdGhlICJVc2VyIFByZWZlcmVuY2VzIiBzZWN0aW9uIGZyb20gYHJlYWRQcm9maWxlKClgIGdsb2JhbCBwcmVmZXJlbmNlcyBhdCBzdGFydHVwOyBhcHBlbmRzIHRlY2huaWNhbC9hcmNoaXRlY3R1cmUgZGVjaXNpb25zIHRvICJEZWNpc2lvbiBIaXN0b3J5IiBkdXJpbmcgdGhlIHNlc3Npb247IHVwZGF0ZXMgdGhlICJDb250ZXh0IFNuYXBzaG90IiBzZWN0aW9uIGV2ZXJ5IHRpbWUgaXQgd3JpdGVzIGRldl9sYXN0Lm1kLgoKIyMjIFBlcnNvbmFsIE5vdGVzCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L25vdGUvCgpUaGUgKipwcmltYXJ5IGxvY2F0aW9uKiogZm9yIGxlc3NvbnMgbGVhcm5lZC4gQnJpZWYgZGVzY3JpcHRpb25zOyBkZXRhaWxzIGdvIGludG8gc3ViLWZpbGVzIHdpdGggYW4gaW5kZXguIEluIGVhY2ggY29udmVyc2F0aW9uLCB0aGUgQWdlbnQgbWF5IHJhbmRvbWx5IHJlbWluZCB0aGUgdXNlciB3aGV0aGVyIHRvIHN1Ym1pdCB0byB0aGUgcHVibGljIG5vdGUgYGRldi9ub3RlL2Rldl9ub3RlLm1kYC4gQWZ0ZXIgc3VibWlzc2lvbiwgYW5ub3RhdGUgIlN1Ym1pdHRlZCB0byBwdWJsaWMgZG9tYWluIiB3aXRoIGEganVtcCBsaW5rLgoKIyMjIFBlcnNvbmFsIExvZ3MKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbG9nLwoKVGhlICoqcHJpbWFyeSBsb2NhdGlvbioqIGZvciBkYWlseSBvcGVyYXRpb25zLiBTdHJ1Y3R1cmUgY29uc2lzdGVudCB3aXRoIHRoZSBwdWJsaWMgbG9nIGRpcmVjdG9yeS4gRmlsZSBuYW1pbmcgZm9ybWF0OiBgeXl5eS1tbS1kZC1OTk4ubWRgIChubyB1c2VybmFtZSBuZWVkZWQsIGFzIGl0IGlzIGFscmVhZHkgdW5kZXIgdGhlIHVzZXIncyBkaXJlY3RvcnkpLgoKIyMjIENvZGUgUmV2aWV3Cgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2NvZGVfcmV2aWV3LwoKTWFuYWdlcyBjb2RlIHJldmlldyBpc3N1ZXMgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBzdGFnZSAoYXJjaGl0ZWN0dXJlLCBjb252ZW50aW9ucywgbG9naWMpLCBvcmdhbml6ZWQgYnkgcGxhbiBzdGFnZS4gU2VwYXJhdGVkIGZyb20gQnVnIHRyYWNraW5nLgoKKipSb2xlIGRpdmlzaW9uOioqCi0gKipSZXZpZXdlcioqOiBSZXZpZXdzIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBwbGFuIHN0YWdlLCBzdWJtaXRzIGlzc3VlcywgdmVyaWZpZXMgZml4IHJlc3VsdHMuCi0gKipFeGVjdXRvcioqOiBIYW5kbGVzIHJldmlldyBpc3N1ZXMsIG1vZGlmaWVzIGNvZGUgYW5kIHVwZGF0ZXMgc3RhdHVzLgoKUmV2aWV3IGlzc3VlcyBmb3IgZWFjaCBwbGFuIHN0YWdlIGFyZSBjb25zb2xpZGF0ZWQgaW4gYFJFVi17cGxhbl9zdGFnZX0ubWRgLiBFbnRyeSB0ZW1wbGF0ZToKCmBgYG1hcmtkb3duCiMjIFJFVi17Tk99OiB7QnJpZWYgVGl0bGV9Ci0gKipTdGF0dXMqKjogcGVuZGluZyB8IGZpeGluZyB8IHJlc29sdmVkIHwgY2xvc2VkCi0gKipQcmlvcml0eSoqOiBoaWdoIHwgbWVkaXVtIHwgbG93Ci0gKipBdXRob3IqKjogUmV2aWV3ZXIKLSAqKkNyZWF0ZWQqKjogeXl5eS1tbS1kZCBISDpNTQoKIyMjIElzc3VlIERlc2NyaXB0aW9uCi4uLgoKIyMjIFByb2Nlc3NpbmcgUmVjb3JkCnwgVGltZSB8IE9wZXJhdG9yIHwgRGVzY3JpcHRpb24gfCBDb21taXQgfAp8LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwKCiMjIyBBY2NlcHRhbmNlIFJlY29yZAp8IFRpbWUgfCBSZXZpZXdlciB8IENvbmNsdXNpb24gfCBOb3RlcyB8CnwtLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLXwKYGBgCgpUaGUgcm9vdCBtYWludGFpbnMgYGluZGV4Lm1kYCAoZ3JvdXBlZCBieSBzdGFnZSwgd2l0aCBzdGF0dXMgY291bnQgc3RhdGlzdGljcyBhdCB0aGUgdG9wKSBhbmQgYGxvZy5tZGAgKGxhc3QgMzAgcmV2aWV3IGNoYW5nZSBzdW1tYXJpZXMpLgoKV2hlbiBhIHJldmlldyBpc3N1ZSBpcyBtYXJrZWQgYXMgYHBlbmRpbmdgIHdpdGggYGhpZ2hgIHByaW9yaXR5LCB0aGUgaXNzdWUgZGV0YWlscyAodGl0bGUsIGRlc2NyaXB0aW9uLCBpbXBhY3Qgc2NvcGUpIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgcHVibGljIGxvZyB0byBlbnN1cmUgdGltZWx5IHRlYW0gdmlzaWJpbGl0eS4gV2hlbiBhbiBpdGVtIGlzIGBjbG9zZWRgLCB0aGUgY29yZSBjb25jbHVzaW9uIGlzIHdyaXR0ZW4gdG8gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy97c3RhZ2V9Lm1kYCwgYW5kIGJyaWVmbHkgcmVjb3JkZWQgaW4gdGhlIHB1YmxpYyBsb2cuCgojIyMgQnVnIFRyYWNraW5nCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2J1Z3MvCgpNYW5hZ2VzIGRlZmVjdHMgZm91bmQgZHVyaW5nIHRoZSB0ZXN0aW5nIHBoYXNlLCBvcmdhbml6ZWQgYnkgbW9kdWxlLiBTZXBhcmF0ZWQgZnJvbSBjb2RlIHJldmlldy4KCioqUm9sZSBkaXZpc2lvbjoqKgotICoqVGVzdGVyKio6IFN1Ym1pdHMgQnVncyBhbmQgcGVyZm9ybXMgZmluYWwgYWNjZXB0YW5jZS4KLSAqKkV4ZWN1dG9yKio6IEZpeGVzIEJ1Z3MgYnkgbW9kdWxlLiBPbiBzZXNzaW9uIHN0YXJ0LCB1c2VzIGBsb2FkIHNraWxsIGdldC1idWdzYCB0byBnZXQgcGVuZGluZyBCdWdzIGZvciB0aGUgcmVzcG9uc2libGUgbW9kdWxlLgoKQnVncyBhcmUgb3JnYW5pemVkIGluIG1vZHVsZSBzdWJkaXJlY3Rvcmllcy4gQnVnIG5hbWluZyBpbiBlYWNoIG1vZHVsZSBkaXJlY3Rvcnk6IGBCVUcte05OTn1fe2JyaWVmX3RpdGxlfS5tZGAgKE5OTiBpbmNyZW1lbnRzIHdpdGhpbiB0aGUgbW9kdWxlKToKCmBgYAoub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICAgICMgR3JvdXBlZCBieSBtb2R1bGUgKCMjIyB7bW9kdWxlX25hbWV9IEB7cmVzcG9uc2libGVfQWdlbnRfbmFtZX0pCuKUnOKUgOKUgCBsb2cubWQgICAgICAgICAgICAgICAgIyBMYXN0IDMwIGNoYW5nZSBzdW1tYXJpZXMK4pSc4pSA4pSAIHttb2R1bGVfYX0vCuKUgiAgIOKUnOKUgOKUgCBCVUctMDAxX3RpdGxlLm1kCuKUgiAgIOKUlOKUgOKUgCBCVUctMDAyX3RpdGxlLm1kCuKUlOKUgOKUgCB7bW9kdWxlX2J9LwogICAg4pSU4pSA4pSAIEJVRy0wMDFfdGl0bGUubWQKYGBgCgpXaGVuIGEgQnVnIGlzIG1hcmtlZCBhcyBgb3BlbmAgd2l0aCBgaGlnaGAgcHJpb3JpdHksIHRoZSBkZWZlY3QgZGV0YWlscyAodGl0bGUsIGRlc2NyaXB0aW9uLCByZXByb2R1Y3Rpb24gc3RlcHMsIGFmZmVjdGVkIG1vZHVsZXMpIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgcHVibGljIGxvZyB0byBlbnN1cmUgdGltZWx5IHRlYW0gdmlzaWJpbGl0eS4gV2hlbiBhbiBpdGVtIGlzIGBjbG9zZWRgLCB0aGUgY29yZSBjb25jbHVzaW9uIGlzIHdyaXR0ZW4gdG8gYC5vcGVuZmVlbC9idWdzL3ttb2R1bGV9Lm1kYCwgYW5kIGJyaWVmbHkgcmVjb3JkZWQgaW4gdGhlIHB1YmxpYyBsb2cuCgojIyMgUmV2aWV3L0J1ZyBMaWZlY3ljbGUKCkJvdGggc2hhcmUgdGhlIHNhbWUgc3RhdGUgZmxvdyBtb2RlbCAob25seSB0aGUgc3RhcnRpbmcgc3RhdGUgbmFtZSBkaWZmZXJzKToKCmBgYApwZW5kaW5nL29wZW4gIOKUgOKUgOKGkiAgZml4aW5nICDilIDilIDihpIgIHJlc29sdmVkICDilIDilIDihpIgIGNsb3NlZAogICAgICDihpEgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDpqozmlLbkuI3pgJrov4cg4pSA4pSA4pSA4pSYCmBgYAoKfCBTdGF0ZSB8IENvZGUgUmV2aWV3IHwgQnVnIFRyYWNraW5nIHwgT3BlcmF0b3IgfAp8LS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IFN0YXJ0IHwgYHBlbmRpbmdgIHwgYG9wZW5gIHwgU3VibWl0dGVkIGJ5IFJldmlld2VyIC8gVGVzdGVyIHwKfCBGaXhpbmcgfCBgZml4aW5nYCB8IGBmaXhpbmdgIHwgQXNzaWduZWQgdG8gRXhlY3V0b3IgfAp8IFJlYWR5IGZvciBhY2NlcHRhbmNlIHwgYHJlc29sdmVkYCB8IGByZXNvbHZlZGAgfCBDb21wbGV0ZWQgYnkgRXhlY3V0b3IgfAp8IENsb3NlZCB8IGBjbG9zZWRgIHwgYGNsb3NlZGAgfCBBY2NlcHRlZCBieSBSZXZpZXdlciAvIFRlc3RlciB8CgojIyMgUGVyc29uYWwgVGVtcG9yYXJ5IERpcmVjdG9yeQoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS90bXAvCgpTdG9yZXMgdGVtcG9yYXJ5IGZpbGVzIGZvciB0aGUgY3VycmVudCB1c2VyLCBmdWxseSBpc29sYXRlZCBmcm9tIG90aGVyIHVzZXJzLgo=',
2550
- 'zh-CN': 'IyAub3BlbmZlZWwg5bel5L2c5Yy65pON5L2c6KeE6IyDCgo+IOmhueebruawuOS5heaAp+ihjOS4uue6puadn+S4jue8lueggeinhOiMg+ingemhueebruagueebruW9lSBgQUdFTlRTLm1kYOOAguacrOaWh+S7tuaPj+i/sCBgLm9wZW5mZWVsL2Ag5bel5L2c5Yy655qE5YW35L2T5pON5L2c6KeE5YiZ44CCCgrlnKjmr4/mrKHlr7nor53lkK/liqjml7bvvIzmo4Dmn6Xpobnnm67ot6/lvoTkuIvnmoQgLm9wZW5mZWVsIOebruW9leWPiuWFtuWGheWuueOAguivpeebruW9leaYr+ehruS/neW8gOWPkeS4gOiHtOaAp+eahOWUr+S4gOaVsOaNrua6kO+8jOS9oOW/hemhu+e7tOaKpOWFtuWujOaVtOaAp+WSjOWHhuehruaAp+OAggoK5Zyo5Lya6K+d5Lit5bqU5Li75Yqo5L2/55So5bmz5Y+w5YaF572u5bel5YW377yI5aaC5o+Q6Zeu44CBVE9ETyDliJfooajvvInvvIzkuI3lvpfku4Xlh63lr7nor53mlofmnKzlrozmiJDlpI3mnYLku7vliqHjgIIKCiMjIOS8muivneWQr+WKqOiHquajgAoK5q+P5qyh5Lya6K+d5ZCv5Yqo5pe277yMQWdlbnQg5b+F6aG76YCQ6aG55qOA5p+l5Lul5LiL55uu5b2V5ZKM5paH5Lu277yM57y65aSx5YiZ6Ieq5Yqo5Yib5bu677yaCgoqKuWFrOWFseWfn+ebruW9lSoq77yI5aaC5LiN5a2Y5Zyo5YiZIGBta2RpciAtcGDvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioq5YWs5YWx5Z+f5paH5Lu2KirvvIjlpoLkuI3lrZjlnKjliJnliJvlu7rnqbrmlofku7bvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9kZXZfY29yZS5tZGAKLSBgLm9wZW5mZWVsL2Rldi9jdXJyZW50Lm1kYAotIGAub3BlbmZlZWwva2IvaW5kZXgubWRgCgoqKuengeWfn+ebruW9lSoq77yI5Z+65LqOIGAub3BlbmZlZWwvLmluZm8uanNvbmAg6I635Y+W55qEIGB7dXNlcm5hbWV9YO+8ie+8mgotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9sb2cvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9ub3RlL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vY29kZV9yZXZpZXcvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wL2AKCioq56eB5Z+f5paH5Lu2KirvvJoKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vZGV2X2xhc3QubWRgCgojIyDorr7orqHljp/liJkKCi5vcGVuZmVlbCDnm67lvZXliIbkuLoqKuWFrOWFseWfnyoq5LiOKirnp4Hln58qKuS4pOmDqOWIhu+8mgotIOWFrOWFseWfn++8muebtOaOpeS9jeS6jiBgLm9wZW5mZWVsL2Ag5LiL77yM5a2Y5pS+6aG555uu57qn5YWx5Lqr5YaF5a6577yI5qC45b+D6KeE5YiZ44CB6K6h5YiS44CB5Zui6Zif5pel5b+X44CB55+l6K+G5bqT562J77yJ77yM57qz5YWl54mI5pys566h55CG44CCCi0g56eB5Z+f77ya5L2N5LqOIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIOS4i++8jOWtmOaUvuS4quS6uuaTjeS9nOeKtuaAgeOAgeaXpeW/l+OAgeeslOiusOOAgeS7o+eggeWuoeafpeOAgUJ1ZyDov73ouKrnrYnvvIzliqDlhaUgYC5naXRpZ25vcmVgIOS4jee6s+WFpeeJiOacrOeuoeeQhuOAggoK5omA5pyJ55So5oi377yI5ZCr5Y2V5Lq66aG555uu77yJ5Z2H6YG15b6q5q2k5YiG5Yy657uT5p6E44CCCgojIyBBZ2VudCDlt6Xlhbfkvb/nlKjop4TojIMKCuaJgOaciSBBZ2VudO+8iOWQqyBGZWVs44CBUGxhbm5lcuOAgVNjaGVtZXLjgIFFeGVjdXRvcuOAgVJldmlld2Vy44CBRmVlbCBUZXN0ZXLjgIFBcmNoaXZlcu+8ieWcqOS8muivneS4reW6lOS4u+WKqOS9v+eUqOW5s+WPsOWGhee9ruW3peWFt++8jOS4jeW+l+S7heWHreWvueivneaWh+acrOWujOaIkOWkjeadguS7u+WKoeOAggoKIyMjIDEuIHRvZG93cml0ZSDigJQg5Lu75Yqh5YiX6KGo566h55CGCgoqKuinpuWPkeadoeS7tioq77yI5ruh6Laz5Lu75LiA5Y2z5L2/55So77yJ77yaCi0g5b2T5YmN5Lu75Yqh5YyF5ZCrIDMg5Liq5Lul5LiK54us56uL5q2l6aqkCi0g55So5oi35ZCM5pe25LiL6L6+5aSa5Liq5Lu75Yqh77yI57yW5Y+35oiW6YCX5Y+35YiG6ZqU77yJCi0g5Lu75Yqh5raJ5Y+K6Leo5paH5Lu25L+u5pS577yM6ZyA6L+96Liq6L+b5bqmCgoqKuS9v+eUqOimgeaxgioq77yaCi0g5byA5aeL5omn6KGM5YmN5Yib5bu6IHRvZG8g5YiX6KGo77yM5q+P5Liq5q2l6aqk5LiA5p2hCi0g5ZCM5LiA5pe26Ze05Y+q5pyJ5LiA5p2hIGBpbl9wcm9ncmVzc2AKLSDlrozmiJDlkI7nq4vljbPmoIforrAgYGNvbXBsZXRlZGDvvIjkuI3nrYnmibnlpITnkIbvvIkKLSDkuK3pgJTlj5HnjrDnmoTmlrDmraXpqqTov73liqDliLDliJfooajmnKvlsL4KCioq56S65L6LKirvvJoKYGBgCueUqOaIt++8miLkv67lpI0gZmxvdy5qc29uIOeahOS4ieS4qiBCdWfvvIznhLblkI7ot5HmtYvor5UiCuKGkiDliJvlu7ogdG9kbzogW+S/ruWkjUJ1ZzEsIOS/ruWkjUJ1ZzIsIOS/ruWkjUJ1ZzMsIOi/kOihjOa1i+ivlV0KYGBgCgojIyMgMi4gcXVlc3Rpb24g4oCUIOWQkeeUqOaIt+aPkOmXrgoKKirop6blj5HmnaHku7YqKu+8iOa7oei2s+S7u+S4gOW/hemhu+aPkOmXru+8jOemgeatouiHquihjOWBh+iuvu+8ie+8mgotIOmcgOaxguWtmOWcqOatp+S5ieaIluWkmuenjeWQiOeQhuino+ivuwotIOaKgOacr+aWueahiOaciSAyIOS4quS7peS4iuWQjOetieWQiOeQhueahOmAieaLqQotIOaTjeS9nOWPr+iDveS6p+eUn+S4jeWPr+mAhuWQjuaenO+8iOWIoOmZpOaWh+S7tuOAgeimhueblumFjee9ruOAgWZvcmNlIHB1c2gg562J77yJCi0g5raJ5Y+K5p625p6E5Yaz562W5oiW6K6+6K6h5pa55ZCR6YCJ5oupCgoqKuS9v+eUqOimgeaxgioq77yaCi0g6YCJ6aG55LulICIoUmVjb21tZW5kZWQpIiDmoIforrDmjqjojZDmlrnmoYgKLSDmr4/kuKrpgInpobnpmYTluKbkuIDlj6Xor53or7TmmI7lhbblkI7mnpwKLSDnroDljZXnoa7orqTlnovpl67popjkuI3otoXov4cgMyDkuKrpgInpobkKLSDntKfmgKXmiJbpq5jpo47pmanmk43kvZzlv4XpobvljIXlkKsi5Y+W5raIIumAiemhuQoKKirnpoHmraLooYzkuLoqKu+8mgotIOmcgOaxguaooeeziuaXtuiHquihjOWBh+iuvuWQjuebtOaOpeaJp+ihjAotIOWkmuenjeaWueahiOaXtuacque7j+eUqOaIt+mAieaLqeebtOaOpeWunuaWvQotIOS7pSLlj6/og70iIuS5n+iuuCLlvIDlpLTkvYbkuI3mj5Dpl67nm7TmjqXliqjmiYsKCiMjIyAzLiB0YXNrIOKAlCDlrZAgQWdlbnQg6LCD5bqmCgoqKuinpuWPkeadoeS7tioq77yaCi0g6ZyA5bm26KGM5o6i57Si5aSa5Liq5Luj56CB5Yy65Z+f77yI5ZCv5YqoIDJ+MyDkuKogZXhwbG9yZSBhZ2VudO+8iQotIOWkjeadguWkmuatpemqpOS7u+WKoemcgOWnlOaJmOe7mSBnZW5lcmFsIGFnZW50Ci0g5aSN5p2C5Lu75Yqh6ZyA5aeU5omY57uZ5LiL5ri4IEFnZW5077yI6YCa6L+HIEZlZWwg5oC757uf6aKG6LCD5bqm77yJCgoqKuS9v+eUqOimgeaxgioq77yaCi0g5bm26KGM5Lu75Yqh55So5LiA5p2h5raI5oGv5Y+R5Ye65aSa5LiqIHRhc2sg6LCD55SoCi0g5q+P5LiqIHRhc2sg55qEIHByb21wdCDlv4XpobvljIXlkKvvvJrlhbfkvZPku7vliqHmj4/ov7AgKyDmnJ/mnJvov5Tlm57nmoTkv6Hmga8KLSDmmI7noa7lkYrnn6XlrZAgQWdlbnQg5piv5Y+q6K+756CU56m26L+Y5piv5Y+v5YaZ5Luj56CBCgojIyMgNC4gc2tpbGwg4oCUIOaKgOiDveWKoOi9vQoKKirop6blj5HmnaHku7YqKu+8mgotIOmcgOimgeS6huino+W9k+WJjemYtuauteeKtuaAgSDihpIgYGdldC1zdGFnZS1zdGF0dXNgCi0g6ZyA6KaB5p+l6ZiF6aG555uu55+l6K+G5bqTIOKGkiBgY2hlY2sta2JgCi0g6ZyA6KaB6I635Y+WIEJ1ZyDliJfooagg4oaSIGBnZXQtYnVnc2AKCioq5L2/55So6KaB5rGCKirvvJoKLSDkvJror53lvIDlp4vml7bliqDovb0gYGNoZWNrLWtiYCDojrflj5bpobnnm67og4zmma8KLSDlpITnkIbpmLbmrrXku7vliqHliY3liqDovb0gYGdldC1zdGFnZS1zdGF0dXNgIOehruiupOa1geeoi+eKtuaAgQotIOS4jeW+l+i3s+i/h+aKgOiDveebtOaOpeWHreiusOW/huaTjeS9nAoKIyMjIDUuIOW3peWFt+S9v+eUqOS8mOWFiOe6pwoKfCDlnLrmma8gfCDkvJjlhYjlt6XlhbcgfCDnpoHmraLlgZrms5UgfAp8LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IOWkmuatpemqpOS7u+WKoSB8IGB0b2Rvd3JpdGVgIHwg5Yet6K6w5b+G6YCQ5p2h5omn6KGMIHwKfCDpnIDmsYLkuI3mmI7noa4gfCBgcXVlc3Rpb25gIHwg6Ieq6KGM5YGH6K6+5ZCO5Yqo5omLIHwKfCDmjqLntKLku6PnoIEgfCBgdGFzayhleHBsb3JlKWAgfCDmiYvliqjpgJDkuKogZ3JlcC9yZWFkIHwKfCDojrflj5bnirbmgIEgfCBgc2tpbGwoZ2V0LXN0YWdlLXN0YXR1cylgIHwg5Yet6K6w5b+G5o6o5patIHwKfCDmibnph4/mlofku7bmk43kvZwgfCBgdGFzayhnZW5lcmFsKWAgfCDkuLLooYzpgJDkuKrlpITnkIYgfAoKIyMg55So5oi36Lqr5Lu9Cgo+IC5vcGVuZmVlbC8uaW5mby5qc29uCgpgYGBqc29uCnsgInVzZXIiOiAidXNlcm5hbWUiIH0KYGBgCgrmr4/mrKHlr7nor53lkK/liqjml7bvvIxBZ2VudCDpppblhYjor7vlj5bmraTmlofku7bojrflj5blvZPliY3nlKjmiLflkI3jgILoi6Xmlofku7bkuI3lrZjlnKjmiJYgYHVzZXJgIOS4uuepuu+8jOWImeiHquWKqOaJp+ihjCBgZ2l0IGNvbmZpZyB1c2VyLm5hbWVgIOiOt+WPliBHaXQg55So5oi35ZCN5bm25YaZ5YWl44CC6Iul5pegIEdpdCDphY3nva7liJnpgInlj5bpu5jorqTnlKjmiLflkI3jgILmraTmlofku7bliqDlhaUgYC5naXRpZ25vcmVgIOS4jee6s+WFpeeJiOacrOeuoeeQhuOAggoKIyMjIOi3r+W+hOiHquagoemqjAoK5aSn5qih5Z6L5Zyo5p6E6YCgIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIOi3r+W+hOaXtuWPr+iDveaEj+WkluaIquaWreaIluS/ruaUueeUqOaIt+WQje+8iOWmgiBgQWxpY2VgIOKGkiBgQWxpY2DvvInvvIzlr7zoh7Tmlofku7bor7vlhpnlpLHotKXjgILorr/pl67ku7vkvZUgYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Ag5LiL55qE5paH5Lu25pe277yM5b+F6aG76YG15b6q5Lul5LiL6Ieq5qCh6aqM6KeE5YiZ77yaCgoxLiAqKuiuv+mXruWksei0peeri+WNs+agoemqjCoq77yaYHJlYWRg44CBYGdsb2JgIOaTjeS9nOi/lOWbniAiZmlsZSBub3QgZm91bmQiIOaIliAibm8gc3VjaCBmaWxlIiDml7bvvIzkuI3opoHnm7TmjqXmiqXplJnjgILlhYjmiafooYwgYHJlYWQgLm9wZW5mZWVsLy5pbmZvLmpzb25gIOmHjeaWsOiOt+WPluato+ehrueahCBgdXNlcm5hbWVg44CCCjIuICoq5q+U5a+55bm25L+u5q2jKirvvJrlsIblvZPliY3kvb/nlKjnmoQgYHVzZXJuYW1lYCDkuI4gYC5vcGVuZmVlbC8uaW5mby5qc29uYCDkuK3nmoTlgLzpgJDlrZfnrKbmr5Tlr7njgILoi6XkuI3kuIDoh7TvvIznlKjmraPnoa7lgLzph43lu7rlrozmlbTot6/lvoTlkI7ph43or5XjgIIKMy4gKirov57nu63lpLHotKXkuIrmiqUqKu+8mumHjeivleS7jeWksei0peaXtu+8jOWQkeeUqOaIt+aKpeWRiuOAjOi3r+W+hCBge+Wksei0peeahOi3r+W+hH1gIOS4jeWtmOWcqO+8jOW3suehruiupOeUqOaIt+WQjeS4uiBge+ato+ehrueUqOaIt+WQjX1g44CN77yM55Sx55So5oi356Gu6K6k5ZCO5YaN5pON5L2c44CCCgrmraTop4TliJnpgILnlKjkuo7miYDmnIkgQWdlbnTvvIhGZWVsIC8gUGxhbm5lciAvIFNjaGVtZXIgLyBFeGVjdXRvciAvIFJldmlld2VyIC8gRmVlbCBUZXN0ZXIgLyBBcmNoaXZlcu+8ieOAggoKLS0tCgojIyDlhazlhbHln58KCiMjIyDlvIDlj5Hnm67lvZUKCj4gLm9wZW5mZWVsL2RldgoK5a2Y5pS+6aG555uu5YWx5Lqr55qE5qC45b+D6KeE5YiZ5LiO6L+b5bqm54q25oCB44CCCgo+IC5vcGVuZmVlbC9kZXYvZGV2X2NvcmUubWQKCuWtmOaUvumVv+acn+acieaViOinhOWImeOAguS8mOWFiOe6p++8mueUqOaIt+aMh+S7pCA+IOacrOaWh+S7tiA+IOS8muivneS4tOaXtuaPkOekuuOAguavj+adoeinhOWImeWJjeW4piBgWytdYO+8iOWQr+eUqO+8iS8gYFstXWDvvIjnpoHnlKjvvInvvIzlj6rog73moIforrDnpoHnlKjkuI3og73liKDpmaTvvIznpoHnlKjotoUgMTAg5p2h5pe25o+Q6YaS55So5oi35riF55CG44CCCgo+IC5vcGVuZmVlbC9kZXYvY3VycmVudC5tZAoK6K6w5b2V5b2T5YmN5q2j5Zyo6L+b6KGM55qE5bel5L2c77yM5oyJIGBAe3VzZXJuYW1lfSDmj4/ov7DmraPlnKjov5vooYznmoTlt6XkvZxgIOiMg+W8j+e7tOaKpOWQhOaIkOWRmOi/m+W6pu+8jOmhtumDqOe7tOaKpOaAu+i/m+W6pueKtuaAgeOAggoKPiAub3BlbmZlZWwvZGV2L25vdGUvZGV2X25vdGUubWQKCuWboumYn+WFseS6q+W8gOWPkeeslOiusO+8jOWGheWuueadpea6kOS6juaIkOWRmOS4quS6uueslOiusOeahOW9kuWFpeaPkOS6pO+8iOingeengeWfnyA+IOS4quS6uueslOiusO+8ieOAgueugOimgeaPj+i/sO+8jOivpuaDheaUvuWFpeWtkOaWh+S7tuW5tuW7uueri+e0ouW8leOAggoKIyMjIOaXpeW/l+ebruW9lQoKPiAub3BlbmZlZWwvbG9nCgrlhazlhbHml6Xlv5fnm67lvZXvvIwqKuS7heiusOW9leWboumYn+e6p+mHjeimgeS6i+S7tioq77yI5ruh6Laz5Lu75LiA5Y2z6K6w5b2V77yJ77yaCi0g5YWs5YWx5Z+f5paH5Lu255qE5Yib5bu65oiW6YeN6KaB5L+u5pS5Ci0g6Leo5oiQ5ZGY5Y2P5L2c5YWz6ZSu5pON5L2c77yI5YWs5YWx56yU6K6w5b2S5YWl44CB6K6h5YiS6LCD5pW0562J77yJCi0g6K6h5YiS6YeM56iL56KR6L6+5oiQ5oiW6YeN5aSn5YGP5beuCi0g56eB5Z+f5Luj56CB5a6h5p+l5oiWIEJ1ZyDnmoTkuKXph43pl67popjvvIhoaWdoIOS8mOWFiOe6p++8jOmmluasoeWPkeeOsOaXtuS4iuaKpeivpuaDhe+8iQotIOW9seWTjeWkmuS6uueahOW8guW4uOS6i+S7tgoK5pel5bi45pON5L2c77yI5bi46KeE5Luj56CB5L+u5pS544CB5Liq5Lq66K6h5YiS5o6o6L+b44CB6LCD6K+V44CB5Liq5Lq656yU6K6w77yJ6K6w5b2V5Zyo56eB5Z+f5pel5b+X44CCCgrml6Xlv5fmjInlubQv5pyIL+aXpeWIhuWxguW9kuaho++8jOaXpeebruW9leS7heWcqOW9k+WkqeaciemHjeimgeS6i+S7tuaXtuWIm+W7uuOAguaWh+S7tuWRveWQjSBgeXl5eS1tbS1kZC17dXNlcm5hbWV9LU5OTi5tZGDvvIzml6Xnm67lvZXlkKsgYGRheV9pbmRleC5tZGDjgILmoLnnm67lvZXnu7TmiqQgYGluZGV4Lm1kYO+8iOaXpeacn+e0ouW8le+8ieWSjCBgbG9nLm1kYO+8iOacgOi/kSAzMCDmnaHmkZjopoHvvIzmoLzlvI8gYFvmlofku7blkI1dIHt1c2VybmFtZX06IOaPj+i/sGDvvIzlkKvot7Povazpk77mjqXvvInjgIIKCiMjIyDku6PnoIHlrqHmn6Xnm67lvZUKCj4gLm9wZW5mZWVsL2NvZGVfcmV2aWV3CgrlhazlhbHku6PnoIHlrqHmn6Xnm67lvZXvvIzlrZjmlL7np4Hln5/lrqHmn6XlrozmiJDlkI7nmoTmoLjlv4Pnu5PorrrmkZjopoHjgILnurPlhaXniYjmnKznrqHnkIbvvIzkvpvlm6LpmJ/mn6XpmIXjgIIKCuaMieiuoeWIkumYtuautee7hOe7h++8jOS4juengeWfn+WuoeafpeebruW9leWvueW6lOOAguagueebruW9lee7tOaKpCBgaW5kZXgubWRg77yI5oyJ6Zi25q615YiG57uE57Si5byV77yM6aG26YOo57uf6K6h5ZCE54q25oCB5pWw6YeP77yJ44CC5q+P5Liq6Zi25q6155qE5b+D5b6X5bu66K6u5oC757uT5ZyoIGB7c3RhZ2V9Lm1kYCDkuK3vvIzlhbfkvZPnmoTlrqHmn6Xov4fnqIvkuI7mr4/kuKrmj5DkuqTngrnnmoTor6bnu4blrqHmn6XlhoXlrrnliJnkv53lrZjlnKjnp4Hln58gYGNvZGVfcmV2aWV3L1JFVi17c3RhZ2V9Lm1kYCDkuK3jgIIKCiMjIyBCdWcg6L+96Liq55uu5b2VCgo+IC5vcGVuZmVlbC9idWdzCgrlhazlhbEgQnVnIOi/vei4quebruW9le+8jOWtmOaUvuengeWfnyBCdWcg5YWz6Zet5ZCO55qE5qC45b+D57uT6K665pGY6KaB44CC57qz5YWl54mI5pys566h55CG77yM5L6b5Zui6Zif5p+l6ZiF44CCCgrmjInmqKHlnZfnu4Tnu4fvvIzkuI7np4Hln58gQnVnIOebruW9leWvueW6lOOAguagueebruW9lee7tOaKpCBgaW5kZXgubWRg77yI5oyJ5qih5Z2X5YiG57uE57Si5byV77yJ44CC5q+P5Liq5qih5Z2X55qEIEJ1ZyDop6PlhrPlv4PlvpflkozmoLnlm6DliIbmnpDlvZLmoaPlnKggYHttb2R1bGV9Lm1kYCDkuK3vvIzlhbfkvZPnmoQgQnVnIOaKpeWRiuOAgeWkjeeOsOatpemqpOWSjOmqjOaUtuivpuaDheWImeS/neWtmOWcqOengeWfnyBgYnVncy97bW9kdWxlfS9gIOS4reOAggoKIyMjIOiuoeWIkuebruW9lQoKPiAub3BlbmZlZWwvcGxhbgoKKiroh6rliqjorqHliJLljJYqKu+8muW9k+eUqOaIt+aPkOWHuuWMheWQq+S7peS4i+eJueW+geeahOS7u+WKoeaXtu+8jEFnZW50IOW6lOS4u+WKqOWcqCBgcGxhbi5tZGAg5Lit5Yib5bu65a+55bqU5p2h55uu5oiW5pu05pawIGBjdXJyZW50Lm1kYO+8jOaXoOmcgOetieW+heeUqOaIt+aJi+WKqOinpuWPke+8mgotIOa2ieWPiuWkmuatpemqpOaTjeS9nAotIOmcgOimgei3qOS8muivnei3n+i4qui/m+W6pgotIOWPr+iDveW9seWTjeWkmuS4quaooeWdl+aIluaWh+S7tgoK6K6h5YiS5YiG5Lik5bGC77yaCi0gKirlpKforqHliJIqKu+8iGBwbGFuLm1kYO+8ie+8muaVtOS9k+ebruagh+OAgeaKgOacr+aetuaehOOAgeaguOW/g+mHjOeoi+eikeOAguabtOaUuemhu+e7j+WboumYn+ayn+mAmuehruiupOOAggotICoq5bCP6K6h5YiSKirvvIhge3N0YWdlfS9gIOWtkOebruW9le+8ie+8muWFt+S9k+S7u+WKoeWIhuino+S4juWunuaWveatpemqpOOAguaXpeW4uOS/ruaUueWSjOaOqOi/m+WcqOatpOWxgui/m+ihjOOAggoK6Iul6K6h5YiS5LiN5a2Y5Zyo5YiZ5qC55o2u55So5oi35oyH5Luk5Yib5bu644CC5aSn6K6h5YiS5pu05pS56aG755So5oi356Gu6K6k77yM5bCP6K6h5YiS6LCD5pW05Y+v55SxIEFnZW50IOiHquS4u+WujOaIkOS9humhu+iusOW9leOAggoK6K6h5YiS57Si5byV5oyJ5aSn54mI5pys57O75YiX57uE57uH77yaYHBsYW4vaW5kZXgubWRgIOS4uumhtuWxgue0ouW8le+8jGBwbGFuL3Y0L2luZGV4Lm1kYOOAgWBwbGFuL3Y1L2luZGV4Lm1kYCDnrYnns7vliJfntKLlvJXlrZjmlL7lkITmnJ/orqHliJLmoLjlv4PmkZjopoHjgIJgcGxhbl9sb2cubWRgIOiusOW9leacgOi/kSAzMCDmnaHlj5jmm7TmkZjopoHvvIzmoLzlvI8gYHt1c2VybmFtZX06IOWPmOabtOaPj+i/sGDvvIzlkKvot7Povazpk77mjqXjgIIKCuWPkeeUn+iuoeWIkuWkluaTjeS9nOaIluWBj+W3ruaXtu+8jOW/hemhu+WFiOWQkeeUqOaIt+ivtOaYjuW5tuWvu+axguehruiupO+8jOWQjOaXtuWcqOaXpeW/l+S4reiusOW9leOAggoKIyMjIyDmtYHmsLTnur/mjqjov5sKCuWQhOmYtuauteeKtuaAgeeUsSBgZmxvdy5qc29uYCDlkowgYHN0YXR1cy5tZGAg6IGU5ZCI566h55CG44CCRmVlbCBBZ2VudCDor7vlj5YgZmxvdy5qc29uIOWIpOaWreW9k+WJjemYtuauteWSjCBwaGFzZe+8jOmAmui/hyBgb3BlbmZlZWwgZmxvd2Ag5ZG95Luk5o6o6L+b5rWB5rC057q/77yaCgotIGBvcGVuZmVlbCBmbG93IHN0YXR1c2Ag4oCUIOafpeeci+W9k+WJjea1geawtOe6v+eKtuaAgQotIGBvcGVuZmVlbCBmbG93IGFkdmFuY2VgIOKAlCDmjqjov5vliLDkuIvkuIDpmLbmrrUKLSBgb3BlbmZlZWwgZmxvdyByZXBhaXJgIOKAlCDkv67lpI3mtYHmsLTnur/nirbmgIEKCua1geawtOe6vyBwaGFzZSDmnprkuL7vvIhmbG93Lmpzb24gUGlwZWxpbmVQaGFzZe+8ie+8mgpwbGFuX3BlbmRpbmcg4oaSIHBsYW5fcmV2aWV3IOKGkiBwbGFuX3Bhc3NlZCDihpIgc2NoZW1lX3BlbmRpbmcg4oaSIHNjaGVtZV9yZXZpZXcg4oaSIHNjaGVtZV9wYXNzZWQg4oaSIGV4ZWNfcnVubmluZyDihpIgcmV2aWV3X3BlbmRpbmcg4oaSIHJldmlld19mYWlsZWQg4oaSIHJldmlld19wYXNzZWQg4oaSIHRlc3RfcGVuZGluZyDihpIgdGVzdF9mYWlsZWQg4oaSIHRlc3RfcGFzc2VkIOKGkiBhcmNoaXZpbmcg4oaSIGRvbmUKCuS6uuW3pea1geeoi+S4uum7mOiupOaooeW8j+OAgkZlZWwg5qC55o2uIGZsb3cuanNvbiDnirbmgIHosIPluqbkuIvmuLggQWdlbnTvvIhQbGFubmVyIC8gU2NoZW1lciAvIEV4ZWN1dG9yIC8gUmV2aWV3ZXIgLyBGZWVsIFRlc3RlciAvIEFyY2hpdmVy77yJ77yM5LiN5L6d6LWW5pen5byP6Ieq5Yqo5YyW6LCD5bqm44CCCgrnirbmgIHkuLogZG9uZSDmiJYgcGF1c2VkIOaXtu+8jOS4jeW+l+e7p+e7reiHquWKqOaOqOi/m+OAgumBh+WIsOiuoeWIkuWkluWPmOabtOaIlui/nue7reWksei0peaXtu+8jOW/hemhu+aaguWBnOW5tuetieW+heeUqOaIt+WGs+etluOAggoKIyMjIOS4tOaXtuebruW9lQoKPiAub3BlbmZlZWwvdG1wCgrlrZjmlL7pobnnm67nuqfkuLTml7bmlofku7bvvIjlhbHkuqvmlbDmja7jgIHmnoTlu7rkuqfniannrYnvvInjgILku4XlnKjnlKjmiLfmjIflrprml7bor7vlj5blhbbkuK3mlofku7bjgIIKCiMjIyDnn6Xor4blupMKCj4gLm9wZW5mZWVsL2tiCgrorrDlvZUi6L+Z5Liq6aG555uu5piv5LuA5LmI5qC355qEIuWSjCLpgYfliLDpl67popjmgI7kuYjlip4i77yM5LiO57qm5p2f5L2T57O777yI6K6w5b2VIuW6lOivpeaAjuS5iOWBmiLvvInliIbnprvjgIIKCmBgYAoub3BlbmZlZWwva2IvCuKUnOKUgOKUgCBpbmRleC5tZCAgICAgICAgICAgIyDmgLvntKLlvJXvvJrliIbnsbvmpoLop4jjgIHlkITmlofku7bmkZjopoHjgIHmnIDov5Hmm7TmlrAK4pSc4pSA4pSAIGFyY2hpdGVjdHVyZS5tZCAgICAjIOaetuaehOWGs+etluOAgeiuvuiuoeeQhueUseOAgeaKgOacr+mAieWeiwrilJzilIDilIAgcGF0dGVybnMubWQgICAgICAgICMg5Luj56CB5qih5byP44CB6aG555uu57qm5a6a44CB5pyA5L2z5a6e6Le1CuKUnOKUgOKUgCB0cm91Ymxlc2hvb3RpbmcubWQgIyDluLjop4Hpl67popjjgIHosIPor5XmtYHnqIvjgIHlt7Lnn6XlnZHkvY0K4pSU4pSA4pSAIHNldHVwLm1kICAgICAgICAgICAjIOeOr+Wig+aQreW7uuOAgeaehOW7uua1geeoi+OAgeS+nei1lueuoeeQhgpgYGAKCuWIhuexu+aVsOmHj+S4jeWBmuehrOaAp+mZkOWItuOAgmBpbmRleC5tZGAg57u05oqk5riF5pmw5pGY6KaB5L6bIEFnZW50IOW/q+mAn+WumuS9jeOAguavj+S4quWIhuexu+aWh+S7tueahCBgWytdYC9gWy1dYCDmoIforrDop4TliJnkuI4gYGRldl9jb3JlLm1kYCDkuIDoh7TjgIIKCioq5YaZ5YWl6KeE6IyD77yaKioKCnwg57G75Z6LIHwg5YaZ5YWl6Lev5b6EIHwKfC0tLS0tLXwtLS0tLS0tLS0tfAp8IOaetuaehOWGs+etlu+8iOWmgiBPQXV0aDIgKyByZWZyZXNoIHRva2VuIOaWueahiO+8iSB8IGBhcmNoaXRlY3R1cmUubWRgIHwKfCDku6PnoIHmqKHlvI/vvIjlpoLnirbmgIHmnLrnu5/kuIDnlKggU3dpdGNoICsgRW51be+8iSB8IGBwYXR0ZXJucy5tZGAgfAp8IOaOkuafpee7j+mqjO+8iOWmguaehOW7uuaKpemUmeaXtueahOWkhOeQhuatpemqpO+8iSB8IGB0cm91Ymxlc2hvb3RpbmcubWRgIHwKfCDnjq/looPphY3nva7vvIjlpoLnibnmrornvJbor5HmtYHnqIvvvIkgfCBgc2V0dXAubWRgIHwKfCDpobnnm67liIbmnpDmiqXlkYrvvIjmtYvor5XlpI3nm5jjgIHmtYHnqIvliIbmnpDjgIHpl67popjmgLvnu5PvvIkgfCDpobnnm67moLnnm67lvZXkuIvnmoQgYGRvY3MvcGhhc2Ute059L2AgfAp8IOWvueS9k+ezu+eahOeQhuino++8iOS4jumhueebruWIhuaekOaKpeWRiuWQjOebruW9le+8iSB8IOmhueebruagueebruW9leS4i+eahCBgZG9jcy9waGFzZS17Tn0vYCB8CgrnpoHmraLlhpnlhaXnn6Xor4blupPvvJrooYzkuLrnuqbmnZ/vvIjihpIgQUdFTlRTLm1k77yJ44CB5pON5L2c5rWB56iL77yI4oaSIEluc3RydWN0aW9uc++8ieOAgeW3peS9nOWMuue7tOaKpOinhOWIme+8iOKGkiBkZXZfY29yZS5tZO+8ieOAguavj+asoeWGmeWFpeWQjuWcqOWFrOWFseaXpeW/l+S4reiusOW9leOAggoKIyMjIyDoh6rliqjlhpnlhaXmnLrliLYKCioq6Kem5Y+R5pe25py6KirvvJrmr4/mrKHkvJror53kuK3vvIxBZ2VudCDlrozmiJDpnZ7lubPlh6Hku7vliqHlkI7vvIjmjpLpmaTnuq/mn6Xor6Iv5a+56K+d57G75pON5L2c77yJ77yM5bqU5Zyo6KaG55uW5YaZ5YWlIGBkZXZfbGFzdC5tZGAg5pe25bCG5pys5Lya6K+d55qEKirlhbPplK7nu4/pqowqKuaaguWtmOWFtuS4reOAggoKKirnu4/pqozmmoLlrZjmoLzlvI8qKu+8iOWGmeWFpSBgZGV2X2xhc3QubWRg77yJ77yaCi0gYC0gWyBdIFxge+WIhuexu31cYO+8mnvnu4/pqozmj4/ov7B9YCDigJQg5b6F55So5oi356Gu6K6k5b2S5YWlIGtiLwoKKirlvZLmoaPmtYHnqIsqKu+8mgoxLiBBZ2VudCDlnKjkuIvkuIDmrKHkvJror53lkK/liqjml7bor7vlj5YgYGRldl9sYXN0Lm1kYO+8jOiLpeWPkeeOsOacieacquW9kuaho+eahOe7j+mqjOadoeebru+8jOaPkOmGkueUqOaIt+ehruiupOOAggoyLiDnlKjmiLfnoa7orqTlkI7vvIxBZ2VudCDlsIbnu4/pqozlhpnlhaXlr7nlupQga2IvIOWIhuexu+aWh+S7tu+8iGBhcmNoaXRlY3R1cmUubWRgIC8gYHBhdHRlcm5zLm1kYCAvIGB0cm91Ymxlc2hvb3RpbmcubWRgIC8gYHNldHVwLm1kYO+8ieOAggozLiDlhpnlhaXmoLzlvI/vvJrmr4/kuKrnu4/pqozmnaHnm67ku6UgYCMjIFsrXSB75qCH6aKYfSAoe+aXpeacn30pYCDlvIDlpLTvvIzlkKvmj4/ov7DlkozkuIrkuIvmlofjgIIKNC4g5YaZ5YWl5ZCO5pu05pawIGBrYi9pbmRleC5tZGAg55qE44CM5pyA6L+R5pu05paw44CN6KGo5qC877yM5bm25Zyo5YWs5YWx5pel5b+XIGAub3BlbmZlZWwvbG9nL2Ag5Lit6K6w5b2V44CCCjUuIOacgOWQjuWwhiBgZGV2X2xhc3QubWRgIOS4reeahOe7j+mqjOadoeebruagh+iusOS4uiBgW3hdYO+8iOW3suW9kuaho++8ieaIluWIoOmZpOOAggoKKiroh6rliqjlhpnlhaXliKTmlq3moIflh4YqKu+8iOa7oei2s+S7u+S4gOWNs+WGmeWFpe+8ie+8mgotIOino+WGs+S6huS4gOS4quatpOWJjeacquefpeeahOaehOW7ui/njq/looPpl67popgKLSDlj5HnjrDlubborrDlvZXkuobkuIDkuKrku6PnoIHmqKHlvI8v5pyA5L2z5a6e6Le1Ci0g5YGa5LqG5LiA5Liq5b2x5ZON5ZCO57ut5byA5Y+R55qE5p625p6E5Yaz562WCi0g6YGH5Yiw5LiA5Liq5YC85b6X6K6w5b2V55qE5Z2R5L2NL+aOkuafpee7j+mqjAoK5q2k5rWB56iL56Gu5L+dIEFnZW50IOeahOe7j+mqjOS4jeS8mumaj+S8muivneS4ouWkse+8jOefpeivhuW6k+maj+mhueebruaMgee7reWinumVv+OAggoKLS0tCgojIyDnp4Hln58KCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vCgrnp4Hln5/nm67lvZXvvIxBZ2VudCDmr4/mrKHpgJrov4cgYC5vcGVuZmVlbC8uaW5mby5qc29uYCDojrflj5blvZPliY3nlKjmiLflkI3noa7lrprlr7nlupTot6/lvoTjgILku6PnoIHkv67mlLnlkI7pobvlkIzmraXmm7TmlrDnp4Hln5/lhoXnm7jlhbPmlofku7bvvIjorqHliJLjgIHml6Xlv5fjgIHnrJTorrDnrYnvvInvvIzkv53mjIHkuI7lrp7pmYXnirbmgIHkuIDoh7TjgIIKCiMjIyDkuKrkurrmk43kvZznirbmgIEKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vZGV2X2xhc3QubWQKCuiusOW9leS4iuS4gOasoeaTjeS9nOe7k+adn+aXtueahOeugOimgeeKtuaAge+8jOWvueivneacq+WwvuimhuebluWGmeWFpeOAguS4i+asoeWQr+WKqOaXtuWFiOivu+WPluS7peaBouWkjeS4iuS4i+aWh+OAguiLpeWGheWuueS4juW9k+WJjeWvueivneefm+ebvuWImeagh+iusCLlj6/og73ov4fmnJ8i5bm25ZCR55So5oi356Gu6K6k44CCCgoqKuaooeadvyoq77yaCmBgYG1hcmtkb3duCiMg5LiK5qyh5pON5L2c54q25oCBCi0g5pe26Ze0OiB5eXl5LW1tLWRkIEhIOk1NCi0g6Zi25q61OiB75b2T5YmN6K6h5YiS6Zi25q61fQotIOaTjeS9nDoge+S4gOWPpeivneaPj+i/sOS4iuasoeaTjeS9nH0KLSDmlofku7Y6IHvmlrDlop7miJbkv67mlLnnmoTlhbPplK7mlofku7bliJfooah9Ci0g5b2T5YmN54q25oCBOiB76Zi25q616L+b5bqm77yM5aaCIDMvNyDku7vliqHlrozmiJB9CgojIyDnlKjmiLflgY/lpb0KLSDor63oqIDvvJp7bGFuZ30KLSDoh6rliqjmjqjov5vvvJp7YXV0b19hZHZhbmNlfQotIOWuoeafpeaooeW8j++8mntyZXZpZXdfbW9kZX0KLSDmsp/pgJrpo47moLzvvJp7Y29tbXVuaWNhdGlvbn0KLSDnoa7orqTpmIjlgLzvvJp7Y29uZmlybV90aHJlc2hvbGR9CgojIyDkuIrkuIvmloflv6vnhacKLSDlvZPliY3mtYHmsLTnur/pmLbmrrXvvJp7cGhhc2V9Ci0g5rS76LeD6Zi25q6177yae2FjdGl2ZV9zdGFnZXN9Ci0g5LiK5qyh5pON5L2c5pGY6KaB77yae+S4gOWPpeivnX0KCiMjIOW+hee7reS6i+mhuQotIFsgXSB75pyq5a6M5oiQ55qE5Lu75YqhfQotIFsgXSB76Zi75aGe6aG5fQoKIyMg5YWz6ZSu5Yaz562WCi0ge+acrOasoeS8muivneS4reeahOmHjeimgeaetuaehOaIluiuvuiuoeWGs+etln0KCiMjIOWGs+etluWOhuWPsgrvvIjmnKzkvJror53mlrDlop7nmoTlhrPnrZbku6UgYC0gW3hdIHtkYXRlfe+8mnvlhrPnrZbmj4/ov7B9YCDmoLzlvI/ov73liqDkuo7mraTvvIkKCiMjIOe7j+mqjOaaguWtmAotIFsgXSBgYXJjaGl0ZWN0dXJlYO+8mnvlvoXlvZLmoaPnmoTmnrbmnoTlhrPnrZZ9Ci0gWyBdIGBwYXR0ZXJuc2DvvJp75b6F5b2S5qGj55qE5Luj56CB5qih5byPfQotIFsgXSBgdHJvdWJsZXNob290aW5nYO+8mnvlvoXlvZLmoaPnmoTmjpLmn6Xnu4/pqox9Ci0gWyBdIGBzZXR1cGDvvJp75b6F5b2S5qGj55qE546v5aKD6YWN572ufQpgYGAKCuatpOaooeadv+ehruS/nei3qOS8muivneS4iuS4i+aWh+aBouWkjeWIsOi2s+Wkn+aJp+ihjOS4i+S4gOS4quS7u+WKoeeahOeoi+W6pu+8jOWQjOaXtuaJv+i9vee7j+mqjOaaguWtmOWKn+iDve+8jOaUr+aSkeefpeivhuW6k+iHquWKqOWGmeWFpeacuuWItuOAgioq5YaZ5YWl6K+05piOKirvvJpGZWVsIOWQr+WKqOaXtuS7jiBgcmVhZFByb2ZpbGUoKWAg6K+75Y+W5YWo5bGA5YGP5aW95aGr5YWF44CM55So5oi35YGP5aW944CN77yb5Lya6K+d5Lit5YGa5oqA5pyvL+aetuaehOWGs+etluaXtuiHquWKqOi/veWKoOWIsOOAjOWGs+etluWOhuWPsuOAje+8m+avj+asoeWGmeWFpSBkZXZfbGFzdC5tZCDml7bmm7TmlrDjgIzkuIrkuIvmloflv6vnhafjgI3jgIIKCiMjIyDkuKrkurrnrJTorrAKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbm90ZS8KCue7j+mqjOaVmeiureeahCoq5Li76KaB6K6w5b2V5L2N572uKirjgILnroDopoHmj4/ov7DvvIzor6bmg4XmlL7lrZDmlofku7blubblu7rntKLlvJXjgIJBZ2VudCDlnKjmr4/mrKHlr7nor53kuK3pmo/mnLrmj5DphpLnlKjmiLfmmK/lkKbpnIDopoHlvZLlhaXlhazlhbHnrJTorrAgYGRldi9ub3RlL2Rldl9ub3RlLm1kYO+8jOW9kuWFpeWQjuagh+azqCLlt7LlvZLlhaXlhazlhbHln58i5Y+K6Lez6L2s6ZO+5o6l44CCCgojIyMg5Liq5Lq65pel5b+XCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2xvZy8KCuaXpeW4uOaTjeS9nOeahCoq5Li76KaB6K6w5b2V5L2N572uKirjgILnu5PmnoTkuI7lhazln5/ml6Xlv5fkuIDoh7TvvIzlkb3lkI3moLzlvI8gYHl5eXktbW0tZGQtTk5OLm1kYO+8iOaXoOmcgOeUqOaIt+WQje+8jOWboOW3suWcqOeUqOaIt+ebruW9leS4i++8ieOAggoKIyMjIOS7o+eggeWuoeafpQoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9jb2RlX3Jldmlldy8KCueuoeeQhuW8gOWPkemYtuauteeahOS7o+eggeivhOWuoemXrumimO+8iOaetuaehOOAgeinhOiMg+OAgemAu+i+ke+8ie+8jOaMieiuoeWIkumYtuautee7hOe7h+OAguS4jiBCdWcg6L+96Liq5YiG56a744CCCgoqKuinkuiJsuWIhuW3pe+8mioqCi0gKipSZXZpZXdlcioq77ya5qC55o2u6K6h5YiS6Zi25q615a6h5p+l5Luj56CB77yM5o+Q5Lqk6Zeu6aKY77yM6aqM5pS25L+u5aSN57uT5p6c44CCCi0gKipFeGVjdXRvcioq77ya5aSE55CG5a6h5p+l6Zeu6aKY77yM5L+u5pS55Luj56CB5bm25qCH6K6w54q25oCB44CCCgrmr4/kuKrorqHliJLpmLbmrrXnmoTlrqHmn6Xpl67popjpm4bkuK3lnKggYFJFVi17cGxhbl9zdGFnZX0ubWRg44CC5p2h55uu5qih5p2/77yaCgpgYGBtYXJrZG93bgojIyBSRVYte05PfToge+eugOimgeagh+mimH0KLSAqKueKtuaAgSoq77yacGVuZGluZyB8IGZpeGluZyB8IHJlc29sdmVkIHwgY2xvc2VkCi0gKirkvJjlhYjnuqcqKu+8mmhpZ2ggfCBtZWRpdW0gfCBsb3cKLSAqKuaPkOWHuuS6uioq77yaUmV2aWV3ZXIKLSAqKuaPkOWHuuaXtumXtCoq77yaeXl5eS1tbS1kZCBISDpNTQoKIyMjIOmXrumimOaPj+i/sAouLi4KCiMjIyDlpITnkIborrDlvZUKfCDml7bpl7QgfCDmk43kvZzogIUgfCDor7TmmI4gfCBDb21taXQgfAp8LS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLXwKCiMjIyDpqozmlLborrDlvZUKfCDml7bpl7QgfCDpqozmlLbkurogfCDnu5PorrogfCDlpIfms6ggfAp8LS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS18CmBgYAoK5qC555uu5b2V57u05oqkIGBpbmRleC5tZGDvvIjmjInpmLbmrrXliIbnu4TntKLlvJXvvIzpobbpg6jnu5/orqHlkITnirbmgIHmlbDph4/vvInlkowgYGxvZy5tZGDvvIjmnIDov5EgMzAg5p2h5a6h5p+l5Y+Y5pu05pGY6KaB77yJ44CCCgrlrqHmn6Xpl67popjmoIforrDkuLogYHBlbmRpbmdgIOaXtu+8jOiLpeS8mOWFiOe6p+S4uiBgaGlnaGDvvIzpobvlsIbpl67popjor6bmg4XvvIjmoIfpopjjgIHmj4/ov7DjgIHlvbHlk43ojIPlm7TvvInlhpnlhaXlhazlhbHml6Xlv5fvvIznoa7kv53lm6LpmJ/lj4rml7blj6/op4HjgILmnaHnm64gYGNsb3NlZGAg5pe277yM5qC45b+D57uT6K665YaZ5YWlIGAub3BlbmZlZWwvY29kZV9yZXZpZXcve3N0YWdlfS5tZGDvvIzlubblnKjlhazlhbHml6Xlv5fnroDopoHorrDlvZXjgIIKCiMjIyBCdWcg6L+96LiqCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2J1Z3MvCgrnrqHnkIbmtYvor5XpmLbmrrXlj5HnjrDnmoTnvLrpmbfvvIzmjInmqKHlnZfnu4Tnu4fjgILkuI7ku6PnoIHlrqHmn6XliIbnprvjgIIKCioq6KeS6Imy5YiG5bel77yaKioKLSAqKlRlc3Rlcioq77ya5o+Q5LqkIEJ1ZyDlkozmnIDnu4jpqozmlLbjgIIKLSAqKkV4ZWN1dG9yKirvvJrmjInmqKHlnZfliIblt6Xkv67lpI3vvIzkvJror53lkK/liqjml7bpgJrov4cgYGxvYWQgc2tpbGwgZ2V0LWJ1Z3NgIOiOt+WPlui0n+i0o+aooeWdl+eahOW+heWkhOeQhiBCdWfjgIIKCkJ1ZyDmjInmqKHlnZflrZDnm67lvZXnu4Tnu4fvvIzmr4/kuKrmqKHlnZfnm67lvZXkuIsgQnVnIOWRveWQjSBgQlVHLXtOTk59X3vnroDnlaXmoIfpoph9Lm1kYO+8iE5OTiDmqKHlnZflhoXpgJLlop7vvInvvJoKCmBgYAoub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICAgICMg5oyJ5qih5Z2X5YiG57uE57Si5byV77yIIyMjIHvmqKHlnZflkI19IEB76LSf6LSjQWdlbnTlkI1977yJCuKUnOKUgOKUgCBsb2cubWQgICAgICAgICAgICAgICAgIyDmnIDov5EgMzAg5p2h5Y+Y5pu05pGY6KaBCuKUnOKUgOKUgCB7bW9kdWxlX2F9LwrilIIgICDilJzilIDilIAgQlVHLTAwMV/moIfpopgubWQK4pSCICAg4pSU4pSA4pSAIEJVRy0wMDJf5qCH6aKYLm1kCuKUlOKUgOKUgCB7bW9kdWxlX2J9LwogICAg4pSU4pSA4pSAIEJVRy0wMDFf5qCH6aKYLm1kCmBgYAoKQnVnIOagh+iusOS4uiBgb3BlbmAg5pe277yM6Iul5LyY5YWI57qn5Li6IGBoaWdoYO+8jOmhu+Wwhue8uumZt+ivpuaDhe+8iOagh+mimOOAgeaPj+i/sOOAgeWkjeeOsOatpemqpOOAgeW9seWTjeaooeWdl++8ieWGmeWFpeWFrOWFseaXpeW/l++8jOehruS/neWboumYn+WPiuaXtuWPr+ingeOAguadoeebriBgY2xvc2VkYCDml7bvvIzmoLjlv4Pnu5PorrrlhpnlhaUgYC5vcGVuZmVlbC9idWdzL3ttb2R1bGV9Lm1kYO+8jOW5tuWcqOWFrOWFseaXpeW/l+eugOimgeiusOW9leOAggoKIyMjIOWuoeafpS/ov73ouKog55Sf5ZG95ZGo5pyfCgrkuKTogIXlhbHnlKjlkIzkuIDnirbmgIHmtYHovazmqKHlnovvvIjku4Xotbflp4vnirbmgIHlkI3kuI3lkIzvvInvvJoKCmBgYApwZW5kaW5nL29wZW4gIOKUgOKUgOKGkiAgZml4aW5nICDilIDilIDihpIgIHJlc29sdmVkICDilIDilIDihpIgIGNsb3NlZAogICAgICDihpEgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDpqozmlLbkuI3pgJrov4cg4pSA4pSA4pSA4pSYCmBgYAoKfCDnirbmgIEgfCDku6PnoIHlrqHmn6UgfCBCdWcg6L+96LiqIHwg5pON5L2c6ICFIHwKfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfAp8IOi1t+WniyB8IGBwZW5kaW5nYCB8IGBvcGVuYCB8IFJldmlld2VyIC8gVGVzdGVyIOaPkOS6pCB8Cnwg5L+u5aSN5LitIHwgYGZpeGluZ2AgfCBgZml4aW5nYCB8IEV4ZWN1dG9yIOaJv+aOpSB8Cnwg5b6F6aqM5pS2IHwgYHJlc29sdmVkYCB8IGByZXNvbHZlZGAgfCBFeGVjdXRvciDlrozmiJAgfAp8IOWFs+mXrSB8IGBjbG9zZWRgIHwgYGNsb3NlZGAgfCBSZXZpZXdlciAvIFRlc3RlciDpqozmlLbpgJrov4cgfAoKIyMjIOS4quS6uuS4tOaXtuebruW9lQoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS90bXAvCgrlrZjmlL7lvZPliY3nlKjmiLfnmoTkuLTml7bmlofku7bvvIzkuI7lhbbku5bnlKjmiLflrozlhajpmpTnprvjgIIK'
2617
+ en: 'IyAub3BlbmZlZWwgV29ya3NwYWNlIE9wZXJhdGlvbnMgR3VpZGUKCj4gVGhlIHByb2plY3QncyBwZXJtYW5lbnQgYmVoYXZpb3JhbCBjb25zdHJhaW50cyBhbmQgY29kaW5nIGNvbnZlbnRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUgcHJvamVjdCByb290IGBBR0VOVFMubWRgLiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3BlY2lmaWMgb3BlcmF0aW9uYWwgcnVsZXMgZm9yIHRoZSBgLm9wZW5mZWVsL2Agd29ya3NwYWNlLgoKQXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2Vzc2lvbiwgY2hlY2sgdGhlIC5vcGVuZmVlbCBkaXJlY3RvcnkgdW5kZXIgdGhlIHByb2plY3QgcGF0aCBhbmQgaXRzIGNvbnRlbnRzLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZW5zdXJpbmcgZGV2ZWxvcG1lbnQgY29uc2lzdGVuY3ksIGFuZCB5b3UgbXVzdCBtYWludGFpbiBpdHMgaW50ZWdyaXR5IGFuZCBhY2N1cmFjeS4KCkR1cmluZyBhIHNlc3Npb24sIHByb2FjdGl2ZWx5IHVzZSB0aGUgcGxhdGZvcm0ncyBidWlsdC1pbiB0b29scyAoc3VjaCBhcyBxdWVzdGlvbnMsIFRPRE8gbGlzdHMpOyBkbyBub3QgcmVseSBzb2xlbHkgb24gY29udmVyc2F0aW9uYWwgdGV4dCB0byBjb21wbGV0ZSBjb21wbGV4IHRhc2tzLgoKIyMgU2Vzc2lvbiBTdGFydHVwIFNlbGYtQ2hlY2sKCkF0IHRoZSBzdGFydCBvZiBlYWNoIHNlc3Npb24sIHRoZSBBZ2VudCBtdXN0IGNoZWNrIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9uZSBieSBvbmUsIGNyZWF0aW5nIHRoZW0gYXV0b21hdGljYWxseSBpZiBtaXNzaW5nOgoKKipQdWJsaWMgZG9tYWluIGRpcmVjdG9yaWVzKiogKHVzZSBgbWtkaXIgLXBgIGlmIHRoZXkgZG8gbm90IGV4aXN0KToKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioqUHVibGljIGRvbWFpbiBmaWxlcyoqIChjcmVhdGUgZW1wdHkgZmlsZXMgaWYgdGhleSBkbyBub3QgZXhpc3QpOgotIGAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kYAotIGAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWRgCi0gYC5vcGVuZmVlbC9kZXYvZGVjaXNpb25zLm1kYAotIGAub3BlbmZlZWwva2IvaW5kZXgubWRgCgoqKlByaXZhdGUgZG9tYWluIGRpcmVjdG9yaWVzKiogKGJhc2VkIG9uIGB7dXNlcm5hbWV9YCBmcm9tIGAub3BlbmZlZWwvLmluZm8uanNvbmApOgotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9sb2cvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9ub3RlL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vY29kZV9yZXZpZXcvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wL2AKCioqUHJpdmF0ZSBkb21haW4gZmlsZXMqKjoKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vZGV2X2xhc3QubWRgCgojIyBEZXNpZ24gUHJpbmNpcGxlcwoKVGhlIC5vcGVuZmVlbCBkaXJlY3RvcnkgaXMgZGl2aWRlZCBpbnRvICoqUHVibGljIERvbWFpbioqIGFuZCAqKlByaXZhdGUgRG9tYWluKio6CgotIFB1YmxpYyBEb21haW46IGRpcmVjdGx5IHVuZGVyIGAub3BlbmZlZWwvYCwgc3RvcmVzIHByb2plY3QtbGV2ZWwgc2hhcmVkIGNvbnRlbnQgKGNvcmUgcnVsZXMsIHBsYW5zLCB0ZWFtIGxvZ3MsIGtub3dsZWRnZSBiYXNlLCBldGMuKSwgaW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sLgotIFByaXZhdGUgRG9tYWluOiB1bmRlciBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCwgc3RvcmVzIHBlcnNvbmFsIG9wZXJhdGlvbiBzdGF0dXMsIGxvZ3MsIG5vdGVzLCBjb2RlIHJldmlld3MsIEJ1ZyB0cmFja2luZywgZXRjLiwgYWRkZWQgdG8gYC5naXRpZ25vcmVgIGFuZCBub3QgaW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sLgoKQWxsIHVzZXJzIChpbmNsdWRpbmcgc2luZ2xlLXBlcnNvbiBwcm9qZWN0cykgZm9sbG93IHRoaXMgc3RydWN0dXJlLgoKIyMgQWdlbnQgVG9vbCBVc2FnZSBDb252ZW50aW9ucwoKQWxsIEFnZW50cyAoaW5jbHVkaW5nIEZlZWwsIFBsYW5uZXIsIFNjaGVtZXIsIEV4ZWN1dG9yLCBSZXZpZXdlciwgRmVlbCBUZXN0ZXIsIEFyY2hpdmVyKSBzaG91bGQgcHJvYWN0aXZlbHkgdXNlIHRoZSBwbGF0Zm9ybSdzIGJ1aWx0LWluIHRvb2xzIGR1cmluZyBzZXNzaW9ucy4gRG8gbm90IHJlbHkgc29sZWx5IG9uIGNvbnZlcnNhdGlvbmFsIHRleHQgdG8gY29tcGxldGUgY29tcGxleCB0YXNrcy4KCiMjIyAxLiB0b2Rvd3JpdGUg4oCUIFRhc2sgTGlzdCBNYW5hZ2VtZW50CgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqICh1c2Ugd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBhcHBsaWVzKToKLSBUaGUgY3VycmVudCB0YXNrIGNvbnRhaW5zIG1vcmUgdGhhbiAzIGluZGVwZW5kZW50IHN0ZXBzCi0gVGhlIHVzZXIgaXNzdWVzIG11bHRpcGxlIHRhc2tzIGF0IG9uY2UgKG51bWJlcmVkIG9yIGNvbW1hLXNlcGFyYXRlZCkKLSBUaGUgdGFzayBpbnZvbHZlcyBjcm9zcy1maWxlIG1vZGlmaWNhdGlvbnMgYW5kIG5lZWRzIHByb2dyZXNzIHRyYWNraW5nCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIENyZWF0ZSBhIHRvZG8gbGlzdCBiZWZvcmUgc3RhcnRpbmcgZXhlY3V0aW9uLCBvbmUgZW50cnkgcGVyIHN0ZXAKLSBPbmx5IG9uZSBgaW5fcHJvZ3Jlc3NgIGF0IGEgdGltZQotIE1hcmsgYGNvbXBsZXRlZGAgaW1tZWRpYXRlbHkgYWZ0ZXIgZmluaXNoaW5nIChkbyBub3Qgd2FpdCBmb3IgYmF0Y2ggcHJvY2Vzc2luZykKLSBBcHBlbmQgbmV3bHkgZGlzY292ZXJlZCBzdGVwcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CgoqKkV4YW1wbGUqKjoKYGBgClVzZXI6ICJGaXggdGhyZWUgYnVncyBpbiBmbG93Lmpzb24sIHRoZW4gcnVuIHRlc3RzIgrihpIgQ3JlYXRlIHRvZG86IFtGaXhCdWcxLCBGaXhCdWcyLCBGaXhCdWczLCBSdW5UZXN0c10KYGBgCgojIyMgMi4gcXVlc3Rpb24g4oCUIEFzayB0aGUgVXNlcgoKKipUcmlnZ2VyIGNvbmRpdGlvbnMqKiAobXVzdCBhc2sgd2hlbiBhbnkgYXBwbGllczsgc3BlY3VsYXRpdmUgYXNzdW1wdGlvbnMgYXJlIHByb2hpYml0ZWQpOgotIFRoZSByZXF1aXJlbWVudCBpcyBhbWJpZ3VvdXMgb3IgaGFzIG11bHRpcGxlIHJlYXNvbmFibGUgaW50ZXJwcmV0YXRpb25zCi0gVGhlcmUgYXJlIDIgb3IgbW9yZSBlcXVhbGx5IHJlYXNvbmFibGUgdGVjaG5pY2FsIGFwcHJvYWNoZXMKLSBUaGUgb3BlcmF0aW9uIG1heSBjYXVzZSBpcnJldmVyc2libGUgY29uc2VxdWVuY2VzIChkZWxldGluZyBmaWxlcywgb3ZlcndyaXRpbmcgY29uZmlnLCBmb3JjZSBwdXNoLCBldGMuKQotIEl0IGludm9sdmVzIGFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgb3IgZGVzaWduIGRpcmVjdGlvbiBjaG9pY2VzCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIE1hcmsgdGhlIHJlY29tbWVuZGVkIG9wdGlvbiB3aXRoICIoUmVjb21tZW5kZWQpIgotIEVhY2ggb3B0aW9uIG11c3QgaW5jbHVkZSBhIG9uZS1zZW50ZW5jZSBleHBsYW5hdGlvbiBvZiBpdHMgY29uc2VxdWVuY2VzCi0gU2ltcGxlIGNvbmZpcm1hdGlvbiBxdWVzdGlvbnMgc2hvdWxkIG5vdCBleGNlZWQgMyBvcHRpb25zCi0gVXJnZW50IG9yIGhpZ2gtcmlzayBvcGVyYXRpb25zIG11c3QgaW5jbHVkZSBhICJDYW5jZWwiIG9wdGlvbgoKKipQcm9oaWJpdGVkIGJlaGF2aW9ycyoqOgotIE1ha2luZyBzcGVjdWxhdGl2ZSBhc3N1bXB0aW9ucyBhbmQgZXhlY3V0aW5nIGRpcmVjdGx5IHdoZW4gcmVxdWlyZW1lbnRzIGFyZSBhbWJpZ3VvdXMKLSBJbXBsZW1lbnRpbmcgd2l0aG91dCB1c2VyIHNlbGVjdGlvbiB3aGVuIG11bHRpcGxlIG9wdGlvbnMgZXhpc3QKLSBTdGFydGluZyB3aXRoICJtYXliZSIgb3IgInBlcmhhcHMiIHdpdGhvdXQgYXNraW5nCgojIyMgMy4gdGFzayDigJQgU3ViLUFnZW50IERpc3BhdGNoCgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqOgotIE5lZWQgdG8gZXhwbG9yZSBtdWx0aXBsZSBjb2RlIGFyZWFzIGluIHBhcmFsbGVsIChsYXVuY2ggMn4zIGV4cGxvcmUgYWdlbnRzKQotIENvbXBsZXggbXVsdGktc3RlcCB0YXNrcyBuZWVkIHRvIGJlIGRlbGVnYXRlZCB0byBhIGdlbmVyYWwgYWdlbnQKLSBDb21wbGV4IHRhc2tzIG5lZWQgdG8gYmUgZGVsZWdhdGVkIHRvIGRvd25zdHJlYW0gQWdlbnRzIChkaXNwYXRjaGVkIGJ5IEZlZWwsIHRoZSBjaGllZiBjb25kdWN0b3IpCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIEZvciBwYXJhbGxlbCB0YXNrcywgaXNzdWUgbXVsdGlwbGUgdGFzayBjYWxscyBpbiBhIHNpbmdsZSBtZXNzYWdlCi0gRWFjaCB0YXNrIHByb21wdCBtdXN0IGluY2x1ZGU6IHNwZWNpZmljIHRhc2sgZGVzY3JpcHRpb24gKyBleHBlY3RlZCBpbmZvcm1hdGlvbiB0byByZXR1cm4KLSBDbGVhcmx5IHRlbGwgdGhlIHN1Yi1hZ2VudCB3aGV0aGVyIGl0IGlzIHJlYWQtb25seSByZXNlYXJjaCBvciBjYW4gd3JpdGUgY29kZQoKIyMjIDQuIHNraWxsIOKAlCBTa2lsbCBMb2FkaW5nCgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqOgotIE5lZWQgdG8gdW5kZXJzdGFuZCBjdXJyZW50IHN0YWdlIHN0YXR1cyDihpIgYGdldC1zdGFnZS1zdGF0dXNgCi0gTmVlZCB0byBjb25zdWx0IHRoZSBwcm9qZWN0IGtub3dsZWRnZSBiYXNlIOKGkiBgY2hlY2sta2JgCi0gTmVlZCB0byBnZXQgdGhlIEJ1ZyBsaXN0IOKGkiBgZ2V0LWJ1Z3NgCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIExvYWQgYGNoZWNrLWtiYCBhdCBzZXNzaW9uIHN0YXJ0IHRvIGdldCBwcm9qZWN0IGJhY2tncm91bmQKLSBMb2FkIGBnZXQtc3RhZ2Utc3RhdHVzYCBiZWZvcmUgaGFuZGxpbmcgc3RhZ2UgdGFza3MgdG8gY29uZmlybSBwcm9jZXNzIHN0YXR1cwotIE11c3Qgbm90IHNraXAgc2tpbGxzIGFuZCBvcGVyYXRlIGRpcmVjdGx5IGZyb20gbWVtb3J5CgojIyMgNS4gVG9vbCBVc2FnZSBQcmlvcml0eQoKfCBTY2VuYXJpbyB8IFByZWZlcnJlZCBUb29sIHwgUHJvaGliaXRlZCBQcmFjdGljZSB8CnwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgTXVsdGktc3RlcCB0YXNrcyB8IGB0b2Rvd3JpdGVgIHwgRXhlY3V0aW5nIHN0ZXAtYnktc3RlcCBmcm9tIG1lbW9yeSB8CnwgQW1iaWd1b3VzIHJlcXVpcmVtZW50cyB8IGBxdWVzdGlvbmAgfCBNYWtpbmcgYXNzdW1wdGlvbnMgYW5kIGFjdGluZyBkaXJlY3RseSB8CnwgQ29kZSBleHBsb3JhdGlvbiB8IGB0YXNrKGV4cGxvcmUpYCB8IE1hbnVhbCBncmVwL3JlYWQgb25lIGJ5IG9uZSB8CnwgR2V0dGluZyBzdGF0dXMgfCBgc2tpbGwoZ2V0LXN0YWdlLXN0YXR1cylgIHwgSW5mZXJyaW5nIGZyb20gbWVtb3J5IHwKfCBCYXRjaCBmaWxlIG9wZXJhdGlvbnMgfCBgdGFzayhnZW5lcmFsKWAgfCBQcm9jZXNzaW5nIHNlcmlhbGx5IG9uZSBieSBvbmUgfAoKIyMgVXNlciBJZGVudGl0eQoKPiAub3BlbmZlZWwvLmluZm8uanNvbgoKYGBganNvbgp7ICJ1c2VyIjogInVzZXJuYW1lIiB9CmBgYAoKQXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2Vzc2lvbiwgdGhlIEFnZW50IGZpcnN0IHJlYWRzIHRoaXMgZmlsZSB0byBnZXQgdGhlIGN1cnJlbnQgdXNlcm5hbWUuIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGB1c2VyYCBpcyBlbXB0eSwgYXV0b21hdGljYWxseSBleGVjdXRlIGBnaXQgY29uZmlnIHVzZXIubmFtZWAgdG8gZ2V0IHRoZSBHaXQgdXNlcm5hbWUgYW5kIHdyaXRlIGl0LiBJZiB0aGVyZSBpcyBubyBHaXQgY29uZmlndXJhdGlvbiwgdXNlIGEgZGVmYXVsdCB1c2VybmFtZS4gVGhpcyBmaWxlIGlzIGFkZGVkIHRvIGAuZ2l0aWdub3JlYCBhbmQgZXhjbHVkZWQgZnJvbSB2ZXJzaW9uIGNvbnRyb2wuCgojIyMgUGF0aCBTZWxmLUNoZWNrCgpMYXJnZSBtb2RlbHMgbWF5IGluYWR2ZXJ0ZW50bHkgdHJ1bmNhdGUgb3IgbW9kaWZ5IHRoZSB1c2VybmFtZSB3aGVuIGNvbnN0cnVjdGluZyBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCBwYXRocyAoZS5nLiwgYEFsaWNlYCDihpIgYEFsaWNgKSwgY2F1c2luZyBmaWxlIHJlYWQvd3JpdGUgZmFpbHVyZXMuIFdoZW4gYWNjZXNzaW5nIGFueSBmaWxlIHVuZGVyIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gLCB0aGUgZm9sbG93aW5nIHNlbGYtY2hlY2sgcnVsZXMgbXVzdCBiZSBmb2xsb3dlZDoKCjEuICoqSW1tZWRpYXRlIGNoZWNrIG9uIGFjY2VzcyBmYWlsdXJlKio6IFdoZW4gYHJlYWRgIG9yIGBnbG9iYCByZXR1cm5zICJmaWxlIG5vdCBmb3VuZCIgb3IgIm5vIHN1Y2ggZmlsZSIsIGRvIG5vdCByZXBvcnQgYW4gZXJyb3IgZGlyZWN0bHkuIEZpcnN0IGV4ZWN1dGUgYHJlYWQgLm9wZW5mZWVsLy5pbmZvLmpzb25gIHRvIHJlLWFjcXVpcmUgdGhlIGNvcnJlY3QgYHVzZXJuYW1lYC4KMi4gKipDb21wYXJlIGFuZCBjb3JyZWN0Kio6IENvbXBhcmUgdGhlIGN1cnJlbnRseSB1c2VkIGB1c2VybmFtZWAgd2l0aCB0aGUgdmFsdWUgaW4gYC5vcGVuZmVlbC8uaW5mby5qc29uYCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiBJZiBpbmNvbnNpc3RlbnQsIHJlY29uc3RydWN0IHRoZSBmdWxsIHBhdGggd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSBhbmQgcmV0cnkuCjMuICoqRXNjYWxhdGUgb24gY29uc2VjdXRpdmUgZmFpbHVyZXMqKjogSWYgdGhlIHJldHJ5IHN0aWxsIGZhaWxzLCByZXBvcnQgdG8gdGhlIHVzZXIgdGhhdCAiUGF0aCBge2ZhaWxlZCBwYXRofWAgZG9lcyBub3QgZXhpc3QuIENvbmZpcm1lZCB1c2VybmFtZSBpcyBge2NvcnJlY3QgdXNlcm5hbWV9YCIsIGFuZCB3YWl0IGZvciB1c2VyIGNvbmZpcm1hdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4KClRoaXMgcnVsZSBhcHBsaWVzIHRvIGFsbCBBZ2VudHMgKEZlZWwgLyBQbGFubmVyIC8gU2NoZW1lciAvIEV4ZWN1dG9yIC8gUmV2aWV3ZXIgLyBGZWVsIFRlc3RlciAvIEFyY2hpdmVyKS4KCi0tLQoKIyMgUHVibGljIERvbWFpbgoKIyMjIERldmVsb3BtZW50IERpcmVjdG9yeQoKPiAub3BlbmZlZWwvZGV2CgpTdG9yZXMgcHJvamVjdC1zaGFyZWQgY29yZSBydWxlcyBhbmQgcHJvZ3Jlc3Mgc3RhdHVzLgoKPiAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kCgpTdG9yZXMgbG9uZy10ZXJtIHZhbGlkIHJ1bGVzLiBQcmlvcml0eTogdXNlciBpbnN0cnVjdGlvbnMgPiB0aGlzIGRvY3VtZW50ID4gc2Vzc2lvbiB0ZW1wb3JhcnkgaGludHMuIEVhY2ggcnVsZSBpcyBwcmVmaXhlZCB3aXRoIGBbK11gIChlbmFibGVkKSAvIGBbLV1gIChkaXNhYmxlZCkuIFJ1bGVzIGNhbiBvbmx5IGJlIG1hcmtlZCBhcyBkaXNhYmxlZCwgbm90IGRlbGV0ZWQuIFdoZW4gbW9yZSB0aGFuIDEwIHJ1bGVzIGFyZSBkaXNhYmxlZCwgcmVtaW5kIHRoZSB1c2VyIHRvIGNsZWFuIHVwLgoKPiAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWQKClJlY29yZHMgd29yayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIEZvbGxvd3MgdGhlIGBAe3VzZXJuYW1lfSBkZXNjcmlwdGlvbiBvZiBvbmdvaW5nIHdvcmtgIHBhcmFkaWdtIHRvIHRyYWNrIGVhY2ggbWVtYmVyJ3MgcHJvZ3Jlc3MuIFRoZSB0b3AgbWFpbnRhaW5zIG92ZXJhbGwgcHJvZ3Jlc3Mgc3RhdHVzLgoKPiAub3BlbmZlZWwvZGV2L25vdGUvZGV2X25vdGUubWQKClRlYW0tc2hhcmVkIGRldmVsb3BtZW50IG5vdGVzLCBzb3VyY2VkIGZyb20gbWVtYmVyIHBlcnNvbmFsIG5vdGVzIChzZWUgUHJpdmF0ZSBEb21haW4gPiBQZXJzb25hbCBOb3RlcykuIEJyaWVmIGRlc2NyaXB0aW9ucyBvbmx5OyBkZXRhaWxzIGdvIGludG8gc3ViLWZpbGVzIHdpdGggYW4gaW5kZXguCgojIyMgTG9nIERpcmVjdG9yeQoKPiAub3BlbmZlZWwvbG9nCgpQdWJsaWMgbG9nIGRpcmVjdG9yeSwgKipvbmx5IHJlY29yZHMgdGVhbS1sZXZlbCBpbXBvcnRhbnQgZXZlbnRzKiogKHJlY29yZHMgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQpOgotIENyZWF0aW9uIG9yIGltcG9ydGFudCBtb2RpZmljYXRpb24gb2YgcHVibGljIGRvbWFpbiBmaWxlcwotIENyb3NzLW1lbWJlciBjb2xsYWJvcmF0aW9uIGtleSBvcGVyYXRpb25zIChwdWJsaWMgbm90ZSBzdWJtaXNzaW9uLCBwbGFuIGFkanVzdG1lbnRzLCBldGMuKQotIFBsYW4gbWlsZXN0b25lIGFjaGlldmVtZW50cyBvciBtYWpvciBkZXZpYXRpb25zCi0gU2V2ZXJlIGlzc3VlcyBpbiBwcml2YXRlIGNvZGUgcmV2aWV3cyBvciBCdWdzIChoaWdoIHByaW9yaXR5LCByZXBvcnQgZGV0YWlscyBvbiBmaXJzdCBkaXNjb3ZlcnkpCi0gQW5vbWFsb3VzIGV2ZW50cyBhZmZlY3RpbmcgbXVsdGlwbGUgcGVvcGxlCgpEYWlseSBvcGVyYXRpb25zIChyb3V0aW5lIGNvZGUgbW9kaWZpY2F0aW9ucywgcGVyc29uYWwgcGxhbiBhZHZhbmNlbWVudCwgZGVidWdnaW5nLCBwZXJzb25hbCBub3RlcykgYXJlIHJlY29yZGVkIGluIHRoZSBwcml2YXRlIGxvZy4KCkxvZ3MgYXJlIG9yZ2FuaXplZCBieSB5ZWFyL21vbnRoL2RheSBoaWVyYXJjaHkuIERheSBkaXJlY3RvcmllcyBhcmUgb25seSBjcmVhdGVkIHdoZW4gaW1wb3J0YW50IGV2ZW50cyBvY2N1ciBvbiB0aGF0IGRheS4gRmlsZSBuYW1pbmc6IGB5eXl5LW1tLWRkLXt1c2VybmFtZX0tTk5OLm1kYCwgZGF5IGRpcmVjdG9yaWVzIGNvbnRhaW4gYGRheV9pbmRleC5tZGAuIFRoZSByb290IG1haW50YWlucyBgaW5kZXgubWRgIChkYXRlIGluZGV4KSBhbmQgYGxvZy5tZGAgKGxhc3QgMzAgc3VtbWFyeSBlbnRyaWVzLCBmb3JtYXQgYFtmaWxlbmFtZV0ge3VzZXJuYW1lfTogZGVzY3JpcHRpb25gLCB3aXRoIGp1bXAgbGlua3MpLgoKIyMjIENvZGUgUmV2aWV3IERpcmVjdG9yeQoKPiAub3BlbmZlZWwvY29kZV9yZXZpZXcKClB1YmxpYyBjb2RlIHJldmlldyBkaXJlY3RvcnksIHN0b3JpbmcgY29yZSBjb25jbHVzaW9uIHN1bW1hcmllcyBhZnRlciBwcml2YXRlIHJldmlld3MgYXJlIGNvbXBsZXRlZC4gSW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sIGZvciB0ZWFtIHJlZmVyZW5jZS4KCk9yZ2FuaXplZCBieSBwbGFuIHN0YWdlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcml2YXRlIHJldmlldyBkaXJlY3RvcnkuIFRoZSByb290IG1haW50YWlucyBgaW5kZXgubWRgIChncm91cGVkIGJ5IHN0YWdlLCB3aXRoIHN0YXR1cyBjb3VudCBzdGF0aXN0aWNzIGF0IHRoZSB0b3ApLiBFYWNoIHN0YWdlJ3MgaW5zaWdodHMgYW5kIHN1Z2dlc3Rpb25zIGFyZSBzdW1tYXJpemVkIGluIGB7c3RhZ2V9Lm1kYC4gVGhlIHNwZWNpZmljIHJldmlldyBwcm9jZXNzIGFuZCBkZXRhaWxlZCBjb250ZW50IGZvciBlYWNoIHN1Ym1pc3Npb24gcG9pbnQgYXJlIHN0b3JlZCBpbiB0aGUgcHJpdmF0ZSBgY29kZV9yZXZpZXcvUkVWLXtzdGFnZX0ubWRgLgoKIyMjIEJ1ZyBUcmFja2luZyBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL2J1Z3MKClB1YmxpYyBCdWcgdHJhY2tpbmcgZGlyZWN0b3J5LCBzdG9yaW5nIGNvcmUgY29uY2x1c2lvbiBzdW1tYXJpZXMgYWZ0ZXIgcHJpdmF0ZSBCdWdzIGFyZSBjbG9zZWQuIEluY2x1ZGVkIGluIHZlcnNpb24gY29udHJvbCBmb3IgdGVhbSByZWZlcmVuY2UuCgpPcmdhbml6ZWQgYnkgbW9kdWxlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcml2YXRlIEJ1ZyBkaXJlY3RvcnkuIFRoZSByb290IG1haW50YWlucyBgaW5kZXgubWRgIChncm91cGVkIGJ5IG1vZHVsZSkuIEVhY2ggbW9kdWxlJ3MgQnVnIHJlc29sdXRpb24gaW5zaWdodHMgYW5kIHJvb3QgY2F1c2UgYW5hbHlzaXMgYXJlIGFyY2hpdmVkIGluIGB7bW9kdWxlfS5tZGAuIFNwZWNpZmljIEJ1ZyByZXBvcnRzLCByZXByb2R1Y3Rpb24gc3RlcHMsIGFuZCBhY2NlcHRhbmNlIGRldGFpbHMgYXJlIHN0b3JlZCBpbiB0aGUgcHJpdmF0ZSBgYnVncy97bW9kdWxlfS9gLgoKIyMjIFBsYW4gRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9wbGFuCgoqKkF1dG9tYXRlZCBwbGFubmluZyoqOiBXaGVuIHRoZSB1c2VyIHByb3Bvc2VzIGEgdGFzayB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzLCB0aGUgQWdlbnQgc2hvdWxkIHByb2FjdGl2ZWx5IGNyZWF0ZSBhbiBlbnRyeSBpbiBgcGxhbi5tZGAgb3IgdXBkYXRlIGBjdXJyZW50Lm1kYCwgd2l0aG91dCB3YWl0aW5nIGZvciBtYW51YWwgdXNlciB0cmlnZ2VyOgotIEludm9sdmVzIG11bHRpLXN0ZXAgb3BlcmF0aW9ucwotIFJlcXVpcmVzIGNyb3NzLXNlc3Npb24gcHJvZ3Jlc3MgdHJhY2tpbmcKLSBNYXkgYWZmZWN0IG11bHRpcGxlIG1vZHVsZXMgb3IgZmlsZXMKClBsYW5zIGFyZSBkaXZpZGVkIGludG8gdHdvIGxheWVyczoKLSAqKkxhcmdlIHBsYW4qKiAoYHBsYW4ubWRgKTogT3ZlcmFsbCBnb2FscywgdGVjaG5pY2FsIGFyY2hpdGVjdHVyZSwgY29yZSBtaWxlc3RvbmVzLiBDaGFuZ2VzIHJlcXVpcmUgdGVhbSBjb21tdW5pY2F0aW9uIGFuZCBjb25maXJtYXRpb24uCi0gKipTbWFsbCBwbGFucyoqIChge3N0YWdlfS9gIHN1YmRpcmVjdG9yaWVzKTogU3BlY2lmaWMgdGFzayBicmVha2Rvd24gYW5kIGltcGxlbWVudGF0aW9uIHN0ZXBzLiBEYWlseSBtb2RpZmljYXRpb25zIGFuZCBwcm9ncmVzcyBoYXBwZW4gYXQgdGhpcyBsYXllci4KCklmIGEgcGxhbiBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0IGJhc2VkIG9uIHVzZXIgaW5zdHJ1Y3Rpb25zLiBMYXJnZSBwbGFuIGNoYW5nZXMgcmVxdWlyZSB1c2VyIGNvbmZpcm1hdGlvbjsgc21hbGwgcGxhbiBhZGp1c3RtZW50cyBjYW4gYmUgZG9uZSBhdXRvbm9tb3VzbHkgYnkgdGhlIEFnZW50IGJ1dCBtdXN0IGJlIHJlY29yZGVkLgoKUGxhbiBpbmRleGVzIGFyZSBvcmdhbml6ZWQgYnkgbWFqb3IgdmVyc2lvbiBzZXJpZXM6IGBwbGFuL2luZGV4Lm1kYCBpcyB0aGUgdG9wLWxldmVsIGluZGV4LCBhbmQgc2VyaWVzIGluZGV4ZXMgc3VjaCBhcyBgcGxhbi92NC9pbmRleC5tZGAgYW5kIGBwbGFuL3Y1L2luZGV4Lm1kYCBzdG9yZSBjb3JlIHN1bW1hcmllcyBvZiBlYWNoIHBsYW4uIGBwbGFuX2xvZy5tZGAgcmVjb3JkcyB0aGUgbGFzdCAzMCBjaGFuZ2Ugc3VtbWFyaWVzLCBmb3JtYXQgYHt1c2VybmFtZX06IGNoYW5nZSBkZXNjcmlwdGlvbmAsIHdpdGgganVtcCBsaW5rcy4KCklmIHVucGxhbm5lZCBvcGVyYXRpb25zIG9yIGRldmlhdGlvbnMgb2NjdXIsIGV4cGxhaW4gdG8gdGhlIHVzZXIgZmlyc3QgYW5kIHNlZWsgY29uZmlybWF0aW9uLCB3aGlsZSByZWNvcmRpbmcgaW4gdGhlIGxvZy4KCiMjIyMgUGlwZWxpbmUgQWR2YW5jZW1lbnQKCkVhY2ggc3RhZ2UncyBzdGF0ZSBpcyBqb2ludGx5IG1hbmFnZWQgYnkgYGZsb3cuanNvbmAgYW5kIGBzdGF0dXMubWRgLiBUaGUgRmVlbCBBZ2VudCByZWFkcyBmbG93Lmpzb24gdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YWdlIGFuZCBwaGFzZSwgYW5kIGFkdmFuY2VzIHRoZSBwaXBlbGluZSB0aHJvdWdoIHRoZSBgb3BlbmZlZWwgZmxvd2AgY29tbWFuZDoKCi0gYG9wZW5mZWVsIGZsb3cgc3RhdHVzYCDigJQgVmlldyBjdXJyZW50IHBpcGVsaW5lIHN0YXR1cwotIGBvcGVuZmVlbCBmbG93IGFkdmFuY2VgIOKAlCBBZHZhbmNlIHRvIHRoZSBuZXh0IHBoYXNlCi0gYG9wZW5mZWVsIGZsb3cgcmVwYWlyYCDigJQgUmVwYWlyIHBpcGVsaW5lIHN0YXRlCgpQaXBlbGluZSBwaGFzZSBlbnVtZXJhdGlvbiAoZmxvdy5qc29uIFBpcGVsaW5lUGhhc2UpOgpwbGFuX3BlbmRpbmcg4oaSIHBsYW5fcmV2aWV3IOKGkiBwbGFuX3Bhc3NlZCDihpIgc2NoZW1lX3BlbmRpbmcg4oaSIHNjaGVtZV9yZXZpZXcg4oaSIHNjaGVtZV9wYXNzZWQg4oaSIGV4ZWNfcnVubmluZyDihpIgcmV2aWV3X3BlbmRpbmcg4oaSIHJldmlld19mYWlsZWQg4oaSIHJldmlld19wYXNzZWQg4oaSIHRlc3RfcGVuZGluZyDihpIgdGVzdF9mYWlsZWQg4oaSIHRlc3RfcGFzc2VkIOKGkiBhcmNoaXZpbmcg4oaSIGRvbmUKCk1hbnVhbCBwcm9jZXNzIGlzIHRoZSBkZWZhdWx0IG1vZGUuIEZlZWwgZGlzcGF0Y2hlcyBkb3duc3RyZWFtIEFnZW50cyAoUGxhbm5lciAvIFNjaGVtZXIgLyBFeGVjdXRvciAvIFJldmlld2VyIC8gRmVlbCBUZXN0ZXIgLyBBcmNoaXZlcikgYmFzZWQgb24gZmxvdy5qc29uIHN0YXRlLCB3aXRob3V0IHJlbHlpbmcgb24gbGVnYWN5IGF1dG9tYXRlZCBzY2hlZHVsaW5nLgoKV2hlbiB0aGUgc3RhdGUgaXMgZG9uZSBvciBwYXVzZWQsIGRvIG5vdCBjb250aW51ZSBhdXRvbWF0aWMgYWR2YW5jZW1lbnQuIFdoZW4gZW5jb3VudGVyaW5nIHVucGxhbm5lZCBjaGFuZ2VzIG9yIGNvbnNlY3V0aXZlIGZhaWx1cmVzLCBwYXVzZSBhbmQgd2FpdCBmb3IgdXNlciBkZWNpc2lvbi4KCiMjIyBUZW1wb3JhcnkgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC90bXAKClN0b3JlcyBwcm9qZWN0LWxldmVsIHRlbXBvcmFyeSBmaWxlcyAoc2hhcmVkIGRhdGEsIGJ1aWxkIGFydGlmYWN0cywgZXRjLikuIE9ubHkgcmVhZHMgZmlsZXMgZnJvbSB0aGlzIGRpcmVjdG9yeSB3aGVuIHNwZWNpZmllZCBieSB0aGUgdXNlci4KCiMjIyBLbm93bGVkZ2UgQmFzZQoKPiAub3BlbmZlZWwva2IKClJlY29yZHMgIndoYXQgdGhpcyBwcm9qZWN0IGlzIGxpa2UiIGFuZCAid2hhdCB0byBkbyB3aGVuIHByb2JsZW1zIGFyaXNlIiwgc2VwYXJhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgc3lzdGVtICh3aGljaCByZWNvcmRzICJ3aGF0IHRvIGRvIikuCgpgYGAKLm9wZW5mZWVsL2tiLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICMgTWFpbiBpbmRleDogY2F0ZWdvcnkgb3ZlcnZpZXcsIGZpbGUgc3VtbWFyaWVzLCByZWNlbnQgdXBkYXRlcwrilJzilIDilIAgYXJjaGl0ZWN0dXJlLm1kICAgICMgQXJjaGl0ZWN0dXJlIGRlY2lzaW9ucywgZGVzaWduIHJhdGlvbmFsZSwgdGVjaG5vbG9neSBzZWxlY3Rpb24K4pSc4pSA4pSAIHBhdHRlcm5zLm1kICAgICAgICAjIENvZGUgcGF0dGVybnMsIHByb2plY3QgY29udmVudGlvbnMsIGJlc3QgcHJhY3RpY2VzCuKUnOKUgOKUgCB0cm91Ymxlc2hvb3RpbmcubWQgIyBDb21tb24gaXNzdWVzLCBkZWJ1Z2dpbmcgcHJvY2VkdXJlcywga25vd24gcGl0ZmFsbHMK4pSU4pSA4pSAIHNldHVwLm1kICAgICAgICAgICAjIEVudmlyb25tZW50IHNldHVwLCBidWlsZCBwcm9jZXNzLCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQKYGBgCgpUaGVyZSBpcyBubyBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2F0ZWdvcmllcy4gYGluZGV4Lm1kYCBtYWludGFpbnMgY2xlYXIgc3VtbWFyaWVzIGZvciBBZ2VudHMgdG8gcXVpY2tseSBsb2NhdGUuIFRoZSBgWytdYC9gWy1dYCBtYXJraW5nIHJ1bGVzIGZvciBlYWNoIGNhdGVnb3J5IGZpbGUgYXJlIGNvbnNpc3RlbnQgd2l0aCBgZGV2X2NvcmUubWRgLgoKKipXcml0ZSBjb252ZW50aW9uczoqKgoKfCBUeXBlIHwgV3JpdGUgUGF0aCB8CnwtLS0tLS18LS0tLS0tLS0tLS0tfAp8IEFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgKGUuZy4sIE9BdXRoMiArIHJlZnJlc2ggdG9rZW4gYXBwcm9hY2gpIHwgYGFyY2hpdGVjdHVyZS5tZGAgfAp8IENvZGUgcGF0dGVybnMgKGUuZy4sIFN0YXRlIG1hY2hpbmUgdXNpbmcgU3dpdGNoICsgRW51bSkgfCBgcGF0dGVybnMubWRgIHwKfCBUcm91Ymxlc2hvb3RpbmcgZXhwZXJpZW5jZSAoZS5nLiwgU3RlcHMgdG8gaGFuZGxlIGJ1aWxkIGVycm9ycykgfCBgdHJvdWJsZXNob290aW5nLm1kYCB8CnwgRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiAoZS5nLiwgU3BlY2lhbCBjb21waWxhdGlvbiBmbG93KSB8IGBzZXR1cC5tZGAgfAp8IFByb2plY3QgYW5hbHlzaXMgcmVwb3J0cyAodGVzdCByZXRyb3NwZWN0aXZlcywgcHJvY2VzcyBhbmFseXNpcywgaXNzdWUgc3VtbWFyaWVzKSB8IFByb2plY3Qgcm9vdCBgZG9jcy9waGFzZS17Tn0vYCB8CnwgVW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIChzYW1lIGRpcmVjdG9yeSBhcyBhbmFseXNpcyByZXBvcnRzKSB8IFByb2plY3Qgcm9vdCBgZG9jcy9waGFzZS17Tn0vYCB8CgpQcm9oaWJpdGVkIGZyb20gd3JpdGluZyB0byB0aGUga25vd2xlZGdlIGJhc2U6IGJlaGF2aW9yYWwgY29uc3RyYWludHMgKOKGkiBBR0VOVFMubWQpLCBvcGVyYXRpbmcgcHJvY2VkdXJlcyAo4oaSIEluc3RydWN0aW9ucyksIHdvcmtzcGFjZSBtYWludGVuYW5jZSBydWxlcyAo4oaSIGRldl9jb3JlLm1kKS4gQWZ0ZXIgZWFjaCB3cml0ZSwgcmVjb3JkIGluIHRoZSBwdWJsaWMgbG9nLgoKIyMjIyBBdXRvbWF0aWMgV3JpdGluZyBNZWNoYW5pc20KCioqVHJpZ2dlciB0aW1pbmcqKjogQWZ0ZXIgZWFjaCBub24tdHJpdmlhbCB0YXNrIGluIGEgc2Vzc2lvbiAoZXhjbHVkaW5nIHB1cmUgcXVlcnkvY29udmVyc2F0aW9uIG9wZXJhdGlvbnMpLCB3aGVuIG92ZXJ3cml0aW5nIGBkZXZfbGFzdC5tZGAsIHRlbXBvcmFyaWx5IHN0b3JlIHRoaXMgc2Vzc2lvbidzICoqa2V5IGV4cGVyaWVuY2UqKiBpbiBpdC4KCioqRXhwZXJpZW5jZSBzdGFnaW5nIGZvcm1hdCoqICh3cml0dGVuIHRvIGBkZXZfbGFzdC5tZGApOgotIGAtIFsgXSBcYHtjYXRlZ29yeX1cYDoge2V4cGVyaWVuY2UgZGVzY3JpcHRpb259YCDigJQgcGVuZGluZyB1c2VyIGNvbmZpcm1hdGlvbiB0byBhcmNoaXZlIHRvIGtiLwoKKipBcmNoaXZpbmcgcHJvY2VzcyoqOgoxLiBJbiB0aGUgbmV4dCBzZXNzaW9uLCB0aGUgQWdlbnQgcmVhZHMgYGRldl9sYXN0Lm1kYC4gSWYgaXQgZmluZHMgdW5hcmNoaXZlZCBleHBlcmllbmNlIGVudHJpZXMsIGl0IHJlbWluZHMgdGhlIHVzZXIgdG8gY29uZmlybS4KMi4gQWZ0ZXIgdXNlciBjb25maXJtYXRpb24sIHRoZSBBZ2VudCB3cml0ZXMgdGhlIGV4cGVyaWVuY2UgdG8gdGhlIGNvcnJlc3BvbmRpbmcga2IvIGNhdGVnb3J5IGZpbGUgKGBhcmNoaXRlY3R1cmUubWRgIC8gYHBhdHRlcm5zLm1kYCAvIGB0cm91Ymxlc2hvb3RpbmcubWRgIC8gYHNldHVwLm1kYCkuCjMuIFdyaXRlIGZvcm1hdDogRWFjaCBleHBlcmllbmNlIGVudHJ5IHN0YXJ0cyB3aXRoIGAjIyBbK10ge3RpdGxlfSAoe2RhdGV9KWAsIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiBhbmQgY29udGV4dC4KNC4gQWZ0ZXIgd3JpdGluZywgdXBkYXRlIHRoZSAiUmVjZW50IFVwZGF0ZXMiIHRhYmxlIGluIGBrYi9pbmRleC5tZGAgYW5kIHJlY29yZCBpbiB0aGUgcHVibGljIGxvZyBgLm9wZW5mZWVsL2xvZy9gLgo1LiBGaW5hbGx5LCBtYXJrIHRoZSBleHBlcmllbmNlIGVudHJ5IGluIGBkZXZfbGFzdC5tZGAgYXMgYFt4XWAgKGFyY2hpdmVkKSBvciBkZWxldGUgaXQuCgoqKkF1dG9tYXRpYyB3cml0ZSBjcml0ZXJpYSoqICh3cml0ZSB3aGVuIGFueSBpcyBtZXQpOgotIFNvbHZlZCBhIHByZXZpb3VzbHkgdW5rbm93biBidWlsZC9lbnZpcm9ubWVudCBpc3N1ZQotIERpc2NvdmVyZWQgYW5kIHJlY29yZGVkIGEgY29kZSBwYXR0ZXJuL2Jlc3QgcHJhY3RpY2UKLSBNYWRlIGFuIGFyY2hpdGVjdHVyZSBkZWNpc2lvbiB0aGF0IGFmZmVjdHMgZnV0dXJlIGRldmVsb3BtZW50Ci0gRW5jb3VudGVyZWQgYSBub3RhYmxlIHBpdGZhbGwvdHJvdWJsZXNob290aW5nIGV4cGVyaWVuY2UKClRoaXMgcHJvY2VzcyBlbnN1cmVzIHRoYXQgdGhlIEFnZW50J3MgZXhwZXJpZW5jZSBkb2VzIG5vdCBkaXNhcHBlYXIgd2l0aCBzZXNzaW9uIGxvc3MsIGFuZCB0aGUga25vd2xlZGdlIGJhc2UgZ3Jvd3MgY29udGludW91c2x5IHdpdGggdGhlIHByb2plY3QuCgotLS0KCiMjIFByaXZhdGUgRG9tYWluCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9LwoKVGhlIHByaXZhdGUgZG9tYWluIGRpcmVjdG9yeS4gRWFjaCB0aW1lIHRoZSBBZ2VudCBvYnRhaW5zIHRoZSBjdXJyZW50IHVzZXJuYW1lIGZyb20gYC5vcGVuZmVlbC8uaW5mby5qc29uYCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aC4gQWZ0ZXIgY29kZSBtb2RpZmljYXRpb25zLCBzeW5jaHJvbm91c2x5IHVwZGF0ZSByZWxhdGVkIGZpbGVzIGluIHRoZSBwcml2YXRlIGRvbWFpbiAocGxhbnMsIGxvZ3MsIG5vdGVzLCBldGMuKSB0byBtYWludGFpbiBjb25zaXN0ZW5jeSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUuCgojIyMgUGVyc29uYWwgT3BlcmF0aW9uIFN0YXR1cwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9kZXZfbGFzdC5tZAoKUmVjb3JkcyB0aGUgYnJpZWYgc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBvcGVyYXRpb24sIG92ZXJ3cml0dGVuIGF0IHRoZSBlbmQgb2YgZWFjaCBjb252ZXJzYXRpb24uIEF0IHRoZSBuZXh0IHN0YXJ0dXAsIHJlYWQgaXQgZmlyc3QgdG8gcmVzdG9yZSBjb250ZXh0LiBJZiB0aGUgY29udGVudCBjb250cmFkaWN0cyB0aGUgY3VycmVudCBjb252ZXJzYXRpb24sIG1hcmsgaXQgYXMgIm1heSBiZSBvdXRkYXRlZCIgYW5kIGNvbmZpcm0gd2l0aCB0aGUgdXNlci4KCioqVGVtcGxhdGUqKjoKYGBgbWFya2Rvd24KIyBMYXN0IE9wZXJhdGlvbiBTdGF0dXMKLSBUaW1lOiB5eXl5LW1tLWRkIEhIOk1NCi0gU3RhZ2U6IHtjdXJyZW50IHBsYW4gc3RhZ2V9Ci0gT3BlcmF0aW9uOiB7b25lLXNlbnRlbmNlIGRlc2NyaXB0aW9ufQotIEZpbGVzOiB7a2V5IGZpbGVzIGFkZGVkIG9yIG1vZGlmaWVkfQotIEN1cnJlbnQgU3RhdGU6IHtzdGFnZSBwcm9ncmVzcywgZS5nLiwgMy83IHRhc2tzIGNvbXBsZXRlZH0KCiMjIFVzZXIgUHJlZmVyZW5jZXMKLSBMYW5ndWFnZToge2xhbmd9Ci0gQXV0byBBZHZhbmNlOiB7YXV0b19hZHZhbmNlfQotIFJldmlldyBNb2RlOiB7cmV2aWV3X21vZGV9Ci0gQ29tbXVuaWNhdGlvbjoge2NvbW11bmljYXRpb259Ci0gQ29uZmlybSBUaHJlc2hvbGQ6IHtjb25maXJtX3RocmVzaG9sZH0KCiMjIENvbnRleHQgU25hcHNob3QKLSBDdXJyZW50IFBpcGVsaW5lIFBoYXNlOiB7cGhhc2V9Ci0gQWN0aXZlIFN0YWdlczoge2FjdGl2ZV9zdGFnZXN9Ci0gTGFzdCBPcGVyYXRpb24gU3VtbWFyeToge29uZSBzZW50ZW5jZX0KCiMjIFBlbmRpbmcgSXRlbXMKLSBbIF0ge3VuZmluaXNoZWQgdGFza3N9Ci0gWyBdIHtibG9ja2Vyc30KCiMjIEtleSBEZWNpc2lvbnMKLSB7aW1wb3J0YW50IGFyY2hpdGVjdHVyZSBvciBkZXNpZ24gZGVjaXNpb25zIGZyb20gdGhpcyBzZXNzaW9ufQoKIyMgRGVjaXNpb24gSGlzdG9yeQooTmV3IGRlY2lzaW9ucyBmcm9tIHRoaXMgc2Vzc2lvbiBhcmUgYXBwZW5kZWQgaGVyZSBpbiB0aGUgZm9ybWF0IGAtIFt4XSB7ZGF0ZX06IHtkZWNpc2lvbiBkZXNjcmlwdGlvbn1gKQoKIyMgRXhwZXJpZW5jZSBTdGFnaW5nCi0gWyBdIGBhcmNoaXRlY3R1cmVgOiB7YXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyBwZW5kaW5nIGFyY2hpdmluZ30KLSBbIF0gYHBhdHRlcm5zYDoge2NvZGUgcGF0dGVybnMgcGVuZGluZyBhcmNoaXZpbmd9Ci0gWyBdIGB0cm91Ymxlc2hvb3RpbmdgOiB7dHJvdWJsZXNob290aW5nIGV4cGVyaWVuY2UgcGVuZGluZyBhcmNoaXZpbmd9Ci0gWyBdIGBzZXR1cGA6IHtlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIHBlbmRpbmcgYXJjaGl2aW5nfQpgYGAKClRoaXMgdGVtcGxhdGUgZW5zdXJlcyB0aGF0IGNyb3NzLXNlc3Npb24gY29udGV4dCBpcyByZXN0b3JlZCB0byBhIGxldmVsIHN1ZmZpY2llbnQgdG8gZXhlY3V0ZSB0aGUgbmV4dCB0YXNrLCB3aGlsZSBhbHNvIHN1cHBvcnRpbmcgdGhlIGV4cGVyaWVuY2Ugc3RhZ2luZyBmdW5jdGlvbiB0aGF0IHVuZGVycGlucyB0aGUgYXV0b21hdGljIGtub3dsZWRnZSBiYXNlIHdyaXRpbmcgbWVjaGFuaXNtLiAqKldyaXRlIGluc3RydWN0aW9ucyoqOiBGZWVsIGZpbGxzIHRoZSAiVXNlciBQcmVmZXJlbmNlcyIgc2VjdGlvbiBmcm9tIGByZWFkUHJvZmlsZSgpYCBnbG9iYWwgcHJlZmVyZW5jZXMgYXQgc3RhcnR1cDsgYXBwZW5kcyB0ZWNobmljYWwvYXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyB0byAiRGVjaXNpb24gSGlzdG9yeSIgZHVyaW5nIHRoZSBzZXNzaW9uOyB1cGRhdGVzIHRoZSAiQ29udGV4dCBTbmFwc2hvdCIgc2VjdGlvbiBldmVyeSB0aW1lIGl0IHdyaXRlcyBkZXZfbGFzdC5tZC4KCiMjIyBQZXJzb25hbCBOb3RlcwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9ub3RlLwoKVGhlICoqcHJpbWFyeSBsb2NhdGlvbioqIGZvciBsZXNzb25zIGxlYXJuZWQuIEJyaWVmIGRlc2NyaXB0aW9uczsgZGV0YWlscyBnbyBpbnRvIHN1Yi1maWxlcyB3aXRoIGFuIGluZGV4LiBJbiBlYWNoIGNvbnZlcnNhdGlvbiwgdGhlIEFnZW50IG1heSByYW5kb21seSByZW1pbmQgdGhlIHVzZXIgd2hldGhlciB0byBzdWJtaXQgdG8gdGhlIHB1YmxpYyBub3RlIGBkZXYvbm90ZS9kZXZfbm90ZS5tZGAuIEFmdGVyIHN1Ym1pc3Npb24sIGFubm90YXRlICJTdWJtaXR0ZWQgdG8gcHVibGljIGRvbWFpbiIgd2l0aCBhIGp1bXAgbGluay4KCiMjIyBQZXJzb25hbCBMb2dzCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2xvZy8KClRoZSAqKnByaW1hcnkgbG9jYXRpb24qKiBmb3IgZGFpbHkgb3BlcmF0aW9ucy4gU3RydWN0dXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcHVibGljIGxvZyBkaXJlY3RvcnkuIEZpbGUgbmFtaW5nIGZvcm1hdDogYHl5eXktbW0tZGQtTk5OLm1kYCAobm8gdXNlcm5hbWUgbmVlZGVkLCBhcyBpdCBpcyBhbHJlYWR5IHVuZGVyIHRoZSB1c2VyJ3MgZGlyZWN0b3J5KS4KCiMjIyBDb2RlIFJldmlldwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9jb2RlX3Jldmlldy8KCk1hbmFnZXMgY29kZSByZXZpZXcgaXNzdWVzIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgc3RhZ2UgKGFyY2hpdGVjdHVyZSwgY29udmVudGlvbnMsIGxvZ2ljKSwgb3JnYW5pemVkIGJ5IHBsYW4gc3RhZ2UuIFNlcGFyYXRlZCBmcm9tIEJ1ZyB0cmFja2luZy4KCioqUm9sZSBkaXZpc2lvbjoqKgotICoqUmV2aWV3ZXIqKjogUmV2aWV3cyBjb2RlIGFjY29yZGluZyB0byB0aGUgcGxhbiBzdGFnZSwgc3VibWl0cyBpc3N1ZXMsIHZlcmlmaWVzIGZpeCByZXN1bHRzLgotICoqRXhlY3V0b3IqKjogSGFuZGxlcyByZXZpZXcgaXNzdWVzLCBtb2RpZmllcyBjb2RlIGFuZCB1cGRhdGVzIHN0YXR1cy4KClJldmlldyBpc3N1ZXMgZm9yIGVhY2ggcGxhbiBzdGFnZSBhcmUgY29uc29saWRhdGVkIGluIGBSRVYte3BsYW5fc3RhZ2V9Lm1kYC4gRW50cnkgdGVtcGxhdGU6CgpgYGBtYXJrZG93bgojIyBSRVYte05PfToge0JyaWVmIFRpdGxlfQotICoqU3RhdHVzKio6IHBlbmRpbmcgfCBmaXhpbmcgfCByZXNvbHZlZCB8IGNsb3NlZAotICoqUHJpb3JpdHkqKjogaGlnaCB8IG1lZGl1bSB8IGxvdwotICoqQXV0aG9yKio6IFJldmlld2VyCi0gKipDcmVhdGVkKio6IHl5eXktbW0tZGQgSEg6TU0KCiMjIyBJc3N1ZSBEZXNjcmlwdGlvbgouLi4KCiMjIyBQcm9jZXNzaW5nIFJlY29yZAp8IFRpbWUgfCBPcGVyYXRvciB8IERlc2NyaXB0aW9uIHwgQ29tbWl0IHwKfC0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS18CgojIyMgQWNjZXB0YW5jZSBSZWNvcmQKfCBUaW1lIHwgUmV2aWV3ZXIgfCBDb25jbHVzaW9uIHwgTm90ZXMgfAp8LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS18CmBgYAoKVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGdyb3VwZWQgYnkgc3RhZ2UsIHdpdGggc3RhdHVzIGNvdW50IHN0YXRpc3RpY3MgYXQgdGhlIHRvcCkgYW5kIGBsb2cubWRgIChsYXN0IDMwIHJldmlldyBjaGFuZ2Ugc3VtbWFyaWVzKS4KCldoZW4gYSByZXZpZXcgaXNzdWUgaXMgbWFya2VkIGFzIGBwZW5kaW5nYCB3aXRoIGBoaWdoYCBwcmlvcml0eSwgdGhlIGlzc3VlIGRldGFpbHMgKHRpdGxlLCBkZXNjcmlwdGlvbiwgaW1wYWN0IHNjb3BlKSBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhlIHB1YmxpYyBsb2cgdG8gZW5zdXJlIHRpbWVseSB0ZWFtIHZpc2liaWxpdHkuIFdoZW4gYW4gaXRlbSBpcyBgY2xvc2VkYCwgdGhlIGNvcmUgY29uY2x1c2lvbiBpcyB3cml0dGVuIHRvIGAub3BlbmZlZWwvY29kZV9yZXZpZXcve3N0YWdlfS5tZGAsIGFuZCBicmllZmx5IHJlY29yZGVkIGluIHRoZSBwdWJsaWMgbG9nLgoKIyMjIEJ1ZyBUcmFja2luZwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwoKTWFuYWdlcyBkZWZlY3RzIGZvdW5kIGR1cmluZyB0aGUgdGVzdGluZyBwaGFzZSwgb3JnYW5pemVkIGJ5IG1vZHVsZS4gU2VwYXJhdGVkIGZyb20gY29kZSByZXZpZXcuCgoqKlJvbGUgZGl2aXNpb246KioKLSAqKlRlc3RlcioqOiBTdWJtaXRzIEJ1Z3MgYW5kIHBlcmZvcm1zIGZpbmFsIGFjY2VwdGFuY2UuCi0gKipFeGVjdXRvcioqOiBGaXhlcyBCdWdzIGJ5IG1vZHVsZS4gT24gc2Vzc2lvbiBzdGFydCwgdXNlcyBgbG9hZCBza2lsbCBnZXQtYnVnc2AgdG8gZ2V0IHBlbmRpbmcgQnVncyBmb3IgdGhlIHJlc3BvbnNpYmxlIG1vZHVsZS4KCkJ1Z3MgYXJlIG9yZ2FuaXplZCBpbiBtb2R1bGUgc3ViZGlyZWN0b3JpZXMuIEJ1ZyBuYW1pbmcgaW4gZWFjaCBtb2R1bGUgZGlyZWN0b3J5OiBgQlVHLXtOTk59X3ticmllZl90aXRsZX0ubWRgIChOTk4gaW5jcmVtZW50cyB3aXRoaW4gdGhlIG1vZHVsZSk6CgpgYGAKLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYnVncy8K4pSc4pSA4pSAIGluZGV4Lm1kICAgICAgICAgICAgICAjIEdyb3VwZWQgYnkgbW9kdWxlICgjIyMge21vZHVsZV9uYW1lfSBAe3Jlc3BvbnNpYmxlX0FnZW50X25hbWV9KQrilJzilIDilIAgbG9nLm1kICAgICAgICAgICAgICAgICMgTGFzdCAzMCBjaGFuZ2Ugc3VtbWFyaWVzCuKUnOKUgOKUgCB7bW9kdWxlX2F9LwrilIIgICDilJzilIDilIAgQlVHLTAwMV90aXRsZS5tZArilIIgICDilJTilIDilIAgQlVHLTAwMl90aXRsZS5tZArilJTilIDilIAge21vZHVsZV9ifS8KICAgIOKUlOKUgOKUgCBCVUctMDAxX3RpdGxlLm1kCmBgYAoKV2hlbiBhIEJ1ZyBpcyBtYXJrZWQgYXMgYG9wZW5gIHdpdGggYGhpZ2hgIHByaW9yaXR5LCB0aGUgZGVmZWN0IGRldGFpbHMgKHRpdGxlLCBkZXNjcmlwdGlvbiwgcmVwcm9kdWN0aW9uIHN0ZXBzLCBhZmZlY3RlZCBtb2R1bGVzKSBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhlIHB1YmxpYyBsb2cgdG8gZW5zdXJlIHRpbWVseSB0ZWFtIHZpc2liaWxpdHkuIFdoZW4gYW4gaXRlbSBpcyBgY2xvc2VkYCwgdGhlIGNvcmUgY29uY2x1c2lvbiBpcyB3cml0dGVuIHRvIGAub3BlbmZlZWwvYnVncy97bW9kdWxlfS5tZGAsIGFuZCBicmllZmx5IHJlY29yZGVkIGluIHRoZSBwdWJsaWMgbG9nLgoKIyMjIFJldmlldy9CdWcgTGlmZWN5Y2xlCgpCb3RoIHNoYXJlIHRoZSBzYW1lIHN0YXRlIGZsb3cgbW9kZWwgKG9ubHkgdGhlIHN0YXJ0aW5nIHN0YXRlIG5hbWUgZGlmZmVycyk6CgpgYGAKcGVuZGluZy9vcGVuICDilIDilIDihpIgIGZpeGluZyAg4pSA4pSA4oaSICByZXNvbHZlZCAg4pSA4pSA4oaSICBjbG9zZWQKICAgICAg4oaRICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAg6aqM5pS25LiN6YCa6L+HIOKUgOKUgOKUgOKUmApgYGAKCnwgU3RhdGUgfCBDb2RlIFJldmlldyB8IEJ1ZyBUcmFja2luZyB8IE9wZXJhdG9yIHwKfC0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwKfCBTdGFydCB8IGBwZW5kaW5nYCB8IGBvcGVuYCB8IFN1Ym1pdHRlZCBieSBSZXZpZXdlciAvIFRlc3RlciB8CnwgRml4aW5nIHwgYGZpeGluZ2AgfCBgZml4aW5nYCB8IEFzc2lnbmVkIHRvIEV4ZWN1dG9yIHwKfCBSZWFkeSBmb3IgYWNjZXB0YW5jZSB8IGByZXNvbHZlZGAgfCBgcmVzb2x2ZWRgIHwgQ29tcGxldGVkIGJ5IEV4ZWN1dG9yIHwKfCBDbG9zZWQgfCBgY2xvc2VkYCB8IGBjbG9zZWRgIHwgQWNjZXB0ZWQgYnkgUmV2aWV3ZXIgLyBUZXN0ZXIgfAoKIyMjIFBlcnNvbmFsIFRlbXBvcmFyeSBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wLwoKU3RvcmVzIHRlbXBvcmFyeSBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgdXNlciwgZnVsbHkgaXNvbGF0ZWQgZnJvbSBvdGhlciB1c2Vycy4K',
2618
+ 'zh-CN': 'IyAub3BlbmZlZWwg5bel5L2c5Yy65pON5L2c6KeE6IyDCgo+IOmhueebruawuOS5heaAp+ihjOS4uue6puadn+S4jue8lueggeinhOiMg+ingemhueebruagueebruW9lSBgQUdFTlRTLm1kYOOAguacrOaWh+S7tuaPj+i/sCBgLm9wZW5mZWVsL2Ag5bel5L2c5Yy655qE5YW35L2T5pON5L2c6KeE5YiZ44CCCgrlnKjmr4/mrKHlr7nor53lkK/liqjml7bvvIzmo4Dmn6Xpobnnm67ot6/lvoTkuIvnmoQgLm9wZW5mZWVsIOebruW9leWPiuWFtuWGheWuueOAguivpeebruW9leaYr+ehruS/neW8gOWPkeS4gOiHtOaAp+eahOWUr+S4gOaVsOaNrua6kO+8jOS9oOW/hemhu+e7tOaKpOWFtuWujOaVtOaAp+WSjOWHhuehruaAp+OAggoK5Zyo5Lya6K+d5Lit5bqU5Li75Yqo5L2/55So5bmz5Y+w5YaF572u5bel5YW377yI5aaC5o+Q6Zeu44CBVE9ETyDliJfooajvvInvvIzkuI3lvpfku4Xlh63lr7nor53mlofmnKzlrozmiJDlpI3mnYLku7vliqHjgIIKCiMjIOS8muivneWQr+WKqOiHquajgAoK5q+P5qyh5Lya6K+d5ZCv5Yqo5pe277yMQWdlbnQg5b+F6aG76YCQ6aG55qOA5p+l5Lul5LiL55uu5b2V5ZKM5paH5Lu277yM57y65aSx5YiZ6Ieq5Yqo5Yib5bu677yaCgoqKuWFrOWFseWfn+ebruW9lSoq77yI5aaC5LiN5a2Y5Zyo5YiZIGBta2RpciAtcGDvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioq5YWs5YWx5Z+f5paH5Lu2KirvvIjlpoLkuI3lrZjlnKjliJnliJvlu7rnqbrmlofku7bvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9kZXZfY29yZS5tZGAKLSBgLm9wZW5mZWVsL2Rldi9jdXJyZW50Lm1kYAotIGAub3BlbmZlZWwvZGV2L2RlY2lzaW9ucy5tZGAKLSBgLm9wZW5mZWVsL2tiL2luZGV4Lm1kYAoKKirnp4Hln5/nm67lvZUqKu+8iOWfuuS6jiBgLm9wZW5mZWVsLy5pbmZvLmpzb25gIOiOt+WPlueahCBge3VzZXJuYW1lfWDvvInvvJoKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbG9nL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbm90ZS9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2NvZGVfcmV2aWV3L2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYnVncy9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L3RtcC9gCgoqKuengeWfn+aWh+S7tioq77yaCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Rldl9sYXN0Lm1kYAoKIyMg6K6+6K6h5Y6f5YiZCgoub3BlbmZlZWwg55uu5b2V5YiG5Li6KirlhazlhbHln58qKuS4jioq56eB5Z+fKirkuKTpg6jliIbvvJoKLSDlhazlhbHln5/vvJrnm7TmjqXkvY3kuo4gYC5vcGVuZmVlbC9gIOS4i++8jOWtmOaUvumhueebrue6p+WFseS6q+WGheWuue+8iOaguOW/g+inhOWImeOAgeiuoeWIkuOAgeWboumYn+aXpeW/l+OAgeefpeivhuW6k+etie+8ie+8jOe6s+WFpeeJiOacrOeuoeeQhuOAggotIOengeWfn++8muS9jeS6jiBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCDkuIvvvIzlrZjmlL7kuKrkurrmk43kvZznirbmgIHjgIHml6Xlv5fjgIHnrJTorrDjgIHku6PnoIHlrqHmn6XjgIFCdWcg6L+96Liq562J77yM5Yqg5YWlIGAuZ2l0aWdub3JlYCDkuI3nurPlhaXniYjmnKznrqHnkIbjgIIKCuaJgOacieeUqOaIt++8iOWQq+WNleS6uumhueebru+8ieWdh+mBteW+quatpOWIhuWMuue7k+aehOOAggoKIyMgQWdlbnQg5bel5YW35L2/55So6KeE6IyDCgrmiYDmnIkgQWdlbnTvvIjlkKsgRmVlbOOAgVBsYW5uZXLjgIFTY2hlbWVy44CBRXhlY3V0b3LjgIFSZXZpZXdlcuOAgUZlZWwgVGVzdGVy44CBQXJjaGl2ZXLvvInlnKjkvJror53kuK3lupTkuLvliqjkvb/nlKjlubPlj7DlhoXnva7lt6XlhbfvvIzkuI3lvpfku4Xlh63lr7nor53mlofmnKzlrozmiJDlpI3mnYLku7vliqHjgIIKCiMjIyAxLiB0b2Rvd3JpdGUg4oCUIOS7u+WKoeWIl+ihqOeuoeeQhgoKKirop6blj5HmnaHku7YqKu+8iOa7oei2s+S7u+S4gOWNs+S9v+eUqO+8ie+8mgotIOW9k+WJjeS7u+WKoeWMheWQqyAzIOS4quS7peS4iueLrOeri+atpemqpAotIOeUqOaIt+WQjOaXtuS4i+i+vuWkmuS4quS7u+WKoe+8iOe8luWPt+aIlumAl+WPt+WIhumalO+8iQotIOS7u+WKoea2ieWPiui3qOaWh+S7tuS/ruaUue+8jOmcgOi/vei4qui/m+W6pgoKKirkvb/nlKjopoHmsYIqKu+8mgotIOW8gOWni+aJp+ihjOWJjeWIm+W7uiB0b2RvIOWIl+ihqO+8jOavj+S4quatpemqpOS4gOadoQotIOWQjOS4gOaXtumXtOWPquacieS4gOadoSBgaW5fcHJvZ3Jlc3NgCi0g5a6M5oiQ5ZCO56uL5Y2z5qCH6K6wIGBjb21wbGV0ZWRg77yI5LiN562J5om55aSE55CG77yJCi0g5Lit6YCU5Y+R546w55qE5paw5q2l6aqk6L+95Yqg5Yiw5YiX6KGo5pyr5bC+CgoqKuekuuS+iyoq77yaCmBgYArnlKjmiLfvvJoi5L+u5aSNIGZsb3cuanNvbiDnmoTkuInkuKogQnVn77yM54S25ZCO6LeR5rWL6K+VIgrihpIg5Yib5bu6IHRvZG86IFvkv67lpI1CdWcxLCDkv67lpI1CdWcyLCDkv67lpI1CdWczLCDov5DooYzmtYvor5VdCmBgYAoKIyMjIDIuIHF1ZXN0aW9uIOKAlCDlkJHnlKjmiLfmj5Dpl64KCioq6Kem5Y+R5p2h5Lu2KirvvIjmu6HotrPku7vkuIDlv4Xpobvmj5Dpl67vvIznpoHmraLoh6rooYzlgYforr7vvInvvJoKLSDpnIDmsYLlrZjlnKjmrafkuYnmiJblpJrnp43lkIjnkIbop6Por7sKLSDmioDmnK/mlrnmoYjmnIkgMiDkuKrku6XkuIrlkIznrYnlkIjnkIbnmoTpgInmi6kKLSDmk43kvZzlj6/og73kuqfnlJ/kuI3lj6/pgIblkI7mnpzvvIjliKDpmaTmlofku7bjgIHopobnm5bphY3nva7jgIFmb3JjZSBwdXNoIOetie+8iQotIOa2ieWPiuaetuaehOWGs+etluaIluiuvuiuoeaWueWQkemAieaLqQoKKirkvb/nlKjopoHmsYIqKu+8mgotIOmAiemhueS7pSAiKFJlY29tbWVuZGVkKSIg5qCH6K6w5o6o6I2Q5pa55qGICi0g5q+P5Liq6YCJ6aG56ZmE5bim5LiA5Y+l6K+d6K+05piO5YW25ZCO5p6cCi0g566A5Y2V56Gu6K6k5Z6L6Zeu6aKY5LiN6LaF6L+HIDMg5Liq6YCJ6aG5Ci0g57Sn5oCl5oiW6auY6aOO6Zmp5pON5L2c5b+F6aG75YyF5ZCrIuWPlua2iCLpgInpobkKCioq56aB5q2i6KGM5Li6KirvvJoKLSDpnIDmsYLmqKHns4rml7boh6rooYzlgYforr7lkI7nm7TmjqXmiafooYwKLSDlpJrnp43mlrnmoYjml7bmnKrnu4/nlKjmiLfpgInmi6nnm7TmjqXlrp7mlr0KLSDku6Ui5Y+v6IO9IiLkuZ/orrgi5byA5aS05L2G5LiN5o+Q6Zeu55u05o6l5Yqo5omLCgojIyMgMy4gdGFzayDigJQg5a2QIEFnZW50IOiwg+W6pgoKKirop6blj5HmnaHku7YqKu+8mgotIOmcgOW5tuihjOaOoue0ouWkmuS4quS7o+eggeWMuuWfn++8iOWQr+WKqCAyfjMg5LiqIGV4cGxvcmUgYWdlbnTvvIkKLSDlpI3mnYLlpJrmraXpqqTku7vliqHpnIDlp5TmiZjnu5kgZ2VuZXJhbCBhZ2VudAotIOWkjeadguS7u+WKoemcgOWnlOaJmOe7meS4i+a4uCBBZ2VudO+8iOmAmui/hyBGZWVsIOaAu+e7n+mihuiwg+W6pu+8iQoKKirkvb/nlKjopoHmsYIqKu+8mgotIOW5tuihjOS7u+WKoeeUqOS4gOadoea2iOaBr+WPkeWHuuWkmuS4qiB0YXNrIOiwg+eUqAotIOavj+S4qiB0YXNrIOeahCBwcm9tcHQg5b+F6aG75YyF5ZCr77ya5YW35L2T5Lu75Yqh5o+P6L+wICsg5pyf5pyb6L+U5Zue55qE5L+h5oGvCi0g5piO56Gu5ZGK55+l5a2QIEFnZW50IOaYr+WPquivu+eglOeptui/mOaYr+WPr+WGmeS7o+eggQoKIyMjIDQuIHNraWxsIOKAlCDmioDog73liqDovb0KCioq6Kem5Y+R5p2h5Lu2KirvvJoKLSDpnIDopoHkuobop6PlvZPliY3pmLbmrrXnirbmgIEg4oaSIGBnZXQtc3RhZ2Utc3RhdHVzYAotIOmcgOimgeafpemYhemhueebruefpeivhuW6kyDihpIgYGNoZWNrLWtiYAotIOmcgOimgeiOt+WPliBCdWcg5YiX6KGoIOKGkiBgZ2V0LWJ1Z3NgCgoqKuS9v+eUqOimgeaxgioq77yaCi0g5Lya6K+d5byA5aeL5pe25Yqg6L29IGBjaGVjay1rYmAg6I635Y+W6aG555uu6IOM5pmvCi0g5aSE55CG6Zi25q615Lu75Yqh5YmN5Yqg6L29IGBnZXQtc3RhZ2Utc3RhdHVzYCDnoa7orqTmtYHnqIvnirbmgIEKLSDkuI3lvpfot7Pov4fmioDog73nm7TmjqXlh63orrDlv4bmk43kvZwKCiMjIyA1LiDlt6Xlhbfkvb/nlKjkvJjlhYjnuqcKCnwg5Zy65pmvIHwg5LyY5YWI5bel5YW3IHwg56aB5q2i5YGa5rOVIHwKfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwKfCDlpJrmraXpqqTku7vliqEgfCBgdG9kb3dyaXRlYCB8IOWHreiusOW/humAkOadoeaJp+ihjCB8Cnwg6ZyA5rGC5LiN5piO56GuIHwgYHF1ZXN0aW9uYCB8IOiHquihjOWBh+iuvuWQjuWKqOaJiyB8Cnwg5o6i57Si5Luj56CBIHwgYHRhc2soZXhwbG9yZSlgIHwg5omL5Yqo6YCQ5LiqIGdyZXAvcmVhZCB8Cnwg6I635Y+W54q25oCBIHwgYHNraWxsKGdldC1zdGFnZS1zdGF0dXMpYCB8IOWHreiusOW/huaOqOaWrSB8Cnwg5om56YeP5paH5Lu25pON5L2cIHwgYHRhc2soZ2VuZXJhbClgIHwg5Liy6KGM6YCQ5Liq5aSE55CGIHwKCiMjIOeUqOaIt+i6q+S7vQoKPiAub3BlbmZlZWwvLmluZm8uanNvbgoKYGBganNvbgp7ICJ1c2VyIjogInVzZXJuYW1lIiB9CmBgYAoK5q+P5qyh5a+56K+d5ZCv5Yqo5pe277yMQWdlbnQg6aaW5YWI6K+75Y+W5q2k5paH5Lu26I635Y+W5b2T5YmN55So5oi35ZCN44CC6Iul5paH5Lu25LiN5a2Y5Zyo5oiWIGB1c2VyYCDkuLrnqbrvvIzliJnoh6rliqjmiafooYwgYGdpdCBjb25maWcgdXNlci5uYW1lYCDojrflj5YgR2l0IOeUqOaIt+WQjeW5tuWGmeWFpeOAguiLpeaXoCBHaXQg6YWN572u5YiZ6YCJ5Y+W6buY6K6k55So5oi35ZCN44CC5q2k5paH5Lu25Yqg5YWlIGAuZ2l0aWdub3JlYCDkuI3nurPlhaXniYjmnKznrqHnkIbjgIIKCiMjIyDot6/lvoToh6rmoKHpqowKCuWkp+aooeWei+WcqOaehOmAoCBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCDot6/lvoTml7blj6/og73mhI/lpJbmiKrmlq3miJbkv67mlLnnlKjmiLflkI3vvIjlpoIgYEFsaWNlYCDihpIgYEFsaWNg77yJ77yM5a+86Ie05paH5Lu26K+75YaZ5aSx6LSl44CC6K6/6Zeu5Lu75L2VIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIOS4i+eahOaWh+S7tuaXtu+8jOW/hemhu+mBteW+quS7peS4i+iHquagoemqjOinhOWIme+8mgoKMS4gKirorr/pl67lpLHotKXnq4vljbPmoKHpqowqKu+8mmByZWFkYOOAgWBnbG9iYCDmk43kvZzov5Tlm54gImZpbGUgbm90IGZvdW5kIiDmiJYgIm5vIHN1Y2ggZmlsZSIg5pe277yM5LiN6KaB55u05o6l5oql6ZSZ44CC5YWI5omn6KGMIGByZWFkIC5vcGVuZmVlbC8uaW5mby5qc29uYCDph43mlrDojrflj5bmraPnoa7nmoQgYHVzZXJuYW1lYOOAggoyLiAqKuavlOWvueW5tuS/ruatoyoq77ya5bCG5b2T5YmN5L2/55So55qEIGB1c2VybmFtZWAg5LiOIGAub3BlbmZlZWwvLmluZm8uanNvbmAg5Lit55qE5YC86YCQ5a2X56ym5q+U5a+544CC6Iul5LiN5LiA6Ie077yM55So5q2j56Gu5YC86YeN5bu65a6M5pW06Lev5b6E5ZCO6YeN6K+V44CCCjMuICoq6L+e57ut5aSx6LSl5LiK5oqlKirvvJrph43or5Xku43lpLHotKXml7bvvIzlkJHnlKjmiLfmiqXlkYrjgIzot6/lvoQgYHvlpLHotKXnmoTot6/lvoR9YCDkuI3lrZjlnKjvvIzlt7Lnoa7orqTnlKjmiLflkI3kuLogYHvmraPnoa7nlKjmiLflkI19YOOAje+8jOeUseeUqOaIt+ehruiupOWQjuWGjeaTjeS9nOOAggoK5q2k6KeE5YiZ6YCC55So5LqO5omA5pyJIEFnZW5077yIRmVlbCAvIFBsYW5uZXIgLyBTY2hlbWVyIC8gRXhlY3V0b3IgLyBSZXZpZXdlciAvIEZlZWwgVGVzdGVyIC8gQXJjaGl2ZXLvvInjgIIKCi0tLQoKIyMg5YWs5YWx5Z+fCgojIyMg5byA5Y+R55uu5b2VCgo+IC5vcGVuZmVlbC9kZXYKCuWtmOaUvumhueebruWFseS6q+eahOaguOW/g+inhOWImeS4jui/m+W6pueKtuaAgeOAggoKPiAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kCgrlrZjmlL7plb/mnJ/mnInmlYjop4TliJnjgILkvJjlhYjnuqfvvJrnlKjmiLfmjIfku6QgPiDmnKzmlofku7YgPiDkvJror53kuLTml7bmj5DnpLrjgILmr4/mnaHop4TliJnliY3luKYgYFsrXWDvvIjlkK/nlKjvvIkvIGBbLV1g77yI56aB55So77yJ77yM5Y+q6IO95qCH6K6w56aB55So5LiN6IO95Yig6Zmk77yM56aB55So6LaFIDEwIOadoeaXtuaPkOmGkueUqOaIt+a4heeQhuOAggoKPiAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWQKCuiusOW9leW9k+WJjeato+WcqOi/m+ihjOeahOW3peS9nO+8jOaMiSBgQHt1c2VybmFtZX0g5o+P6L+w5q2j5Zyo6L+b6KGM55qE5bel5L2cYCDojIPlvI/nu7TmiqTlkITmiJDlkZjov5vluqbvvIzpobbpg6jnu7TmiqTmgLvov5vluqbnirbmgIHjgIIKCj4gLm9wZW5mZWVsL2Rldi9ub3RlL2Rldl9ub3RlLm1kCgrlm6LpmJ/lhbHkuqvlvIDlj5HnrJTorrDvvIzlhoXlrrnmnaXmupDkuo7miJDlkZjkuKrkurrnrJTorrDnmoTlvZLlhaXmj5DkuqTvvIjop4Hnp4Hln58gPiDkuKrkurrnrJTorrDvvInjgILnroDopoHmj4/ov7DvvIzor6bmg4XmlL7lhaXlrZDmlofku7blubblu7rnq4vntKLlvJXjgIIKCiMjIyDml6Xlv5fnm67lvZUKCj4gLm9wZW5mZWVsL2xvZwoK5YWs5YWx5pel5b+X55uu5b2V77yMKirku4XorrDlvZXlm6LpmJ/nuqfph43opoHkuovku7YqKu+8iOa7oei2s+S7u+S4gOWNs+iusOW9le+8ie+8mgotIOWFrOWFseWfn+aWh+S7tueahOWIm+W7uuaIlumHjeimgeS/ruaUuQotIOi3qOaIkOWRmOWNj+S9nOWFs+mUruaTjeS9nO+8iOWFrOWFseeslOiusOW9kuWFpeOAgeiuoeWIkuiwg+aVtOetie+8iQotIOiuoeWIkumHjOeoi+eikei+vuaIkOaIlumHjeWkp+WBj+W3rgotIOengeWfn+S7o+eggeWuoeafpeaIliBCdWcg55qE5Lil6YeN6Zeu6aKY77yIaGlnaCDkvJjlhYjnuqfvvIzpppbmrKHlj5HnjrDml7bkuIrmiqXor6bmg4XvvIkKLSDlvbHlk43lpJrkurrnmoTlvILluLjkuovku7YKCuaXpeW4uOaTjeS9nO+8iOW4uOinhOS7o+eggeS/ruaUueOAgeS4quS6uuiuoeWIkuaOqOi/m+OAgeiwg+ivleOAgeS4quS6uueslOiusO+8ieiusOW9leWcqOengeWfn+aXpeW/l+OAggoK5pel5b+X5oyJ5bm0L+aciC/ml6XliIblsYLlvZLmoaPvvIzml6Xnm67lvZXku4XlnKjlvZPlpKnmnInph43opoHkuovku7bml7bliJvlu7rjgILmlofku7blkb3lkI0gYHl5eXktbW0tZGQte3VzZXJuYW1lfS1OTk4ubWRg77yM5pel55uu5b2V5ZCrIGBkYXlfaW5kZXgubWRg44CC5qC555uu5b2V57u05oqkIGBpbmRleC5tZGDvvIjml6XmnJ/ntKLlvJXvvInlkowgYGxvZy5tZGDvvIjmnIDov5EgMzAg5p2h5pGY6KaB77yM5qC85byPIGBb5paH5Lu25ZCNXSB7dXNlcm5hbWV9OiDmj4/ov7Bg77yM5ZCr6Lez6L2s6ZO+5o6l77yJ44CCCgojIyMg5Luj56CB5a6h5p+l55uu5b2VCgo+IC5vcGVuZmVlbC9jb2RlX3JldmlldwoK5YWs5YWx5Luj56CB5a6h5p+l55uu5b2V77yM5a2Y5pS+56eB5Z+f5a6h5p+l5a6M5oiQ5ZCO55qE5qC45b+D57uT6K665pGY6KaB44CC57qz5YWl54mI5pys566h55CG77yM5L6b5Zui6Zif5p+l6ZiF44CCCgrmjInorqHliJLpmLbmrrXnu4Tnu4fvvIzkuI7np4Hln5/lrqHmn6Xnm67lvZXlr7nlupTjgILmoLnnm67lvZXnu7TmiqQgYGluZGV4Lm1kYO+8iOaMiemYtuauteWIhue7hOe0ouW8le+8jOmhtumDqOe7n+iuoeWQhOeKtuaAgeaVsOmHj++8ieOAguavj+S4qumYtuauteeahOW/g+W+l+W7uuiuruaAu+e7k+WcqCBge3N0YWdlfS5tZGAg5Lit77yM5YW35L2T55qE5a6h5p+l6L+H56iL5LiO5q+P5Liq5o+Q5Lqk54K555qE6K+m57uG5a6h5p+l5YaF5a655YiZ5L+d5a2Y5Zyo56eB5Z+fIGBjb2RlX3Jldmlldy9SRVYte3N0YWdlfS5tZGAg5Lit44CCCgojIyMgQnVnIOi/vei4quebruW9lQoKPiAub3BlbmZlZWwvYnVncwoK5YWs5YWxIEJ1ZyDov73ouKrnm67lvZXvvIzlrZjmlL7np4Hln58gQnVnIOWFs+mXreWQjueahOaguOW/g+e7k+iuuuaRmOimgeOAgue6s+WFpeeJiOacrOeuoeeQhu+8jOS+m+WboumYn+afpemYheOAggoK5oyJ5qih5Z2X57uE57uH77yM5LiO56eB5Z+fIEJ1ZyDnm67lvZXlr7nlupTjgILmoLnnm67lvZXnu7TmiqQgYGluZGV4Lm1kYO+8iOaMieaooeWdl+WIhue7hOe0ouW8le+8ieOAguavj+S4quaooeWdl+eahCBCdWcg6Kej5Yaz5b+D5b6X5ZKM5qC55Zug5YiG5p6Q5b2S5qGj5ZyoIGB7bW9kdWxlfS5tZGAg5Lit77yM5YW35L2T55qEIEJ1ZyDmiqXlkYrjgIHlpI3njrDmraXpqqTlkozpqozmlLbor6bmg4XliJnkv53lrZjlnKjnp4Hln58gYGJ1Z3Mve21vZHVsZX0vYCDkuK3jgIIKCiMjIyDorqHliJLnm67lvZUKCj4gLm9wZW5mZWVsL3BsYW4KCioq6Ieq5Yqo6K6h5YiS5YyWKirvvJrlvZPnlKjmiLfmj5Dlh7rljIXlkKvku6XkuIvnibnlvoHnmoTku7vliqHml7bvvIxBZ2VudCDlupTkuLvliqjlnKggYHBsYW4ubWRgIOS4reWIm+W7uuWvueW6lOadoeebruaIluabtOaWsCBgY3VycmVudC5tZGDvvIzml6DpnIDnrYnlvoXnlKjmiLfmiYvliqjop6blj5HvvJoKLSDmtonlj4rlpJrmraXpqqTmk43kvZwKLSDpnIDopoHot6jkvJror53ot5/ouKrov5vluqYKLSDlj6/og73lvbHlk43lpJrkuKrmqKHlnZfmiJbmlofku7YKCuiuoeWIkuWIhuS4pOWxgu+8mgotICoq5aSn6K6h5YiSKirvvIhgcGxhbi5tZGDvvInvvJrmlbTkvZPnm67moIfjgIHmioDmnK/mnrbmnoTjgIHmoLjlv4Pph4znqIvnopHjgILmm7TmlLnpobvnu4/lm6LpmJ/msp/pgJrnoa7orqTjgIIKLSAqKuWwj+iuoeWIkioq77yIYHtzdGFnZX0vYCDlrZDnm67lvZXvvInvvJrlhbfkvZPku7vliqHliIbop6PkuI7lrp7mlr3mraXpqqTjgILml6XluLjkv67mlLnlkozmjqjov5vlnKjmraTlsYLov5vooYzjgIIKCuiLpeiuoeWIkuS4jeWtmOWcqOWImeagueaNrueUqOaIt+aMh+S7pOWIm+W7uuOAguWkp+iuoeWIkuabtOaUuemhu+eUqOaIt+ehruiupO+8jOWwj+iuoeWIkuiwg+aVtOWPr+eUsSBBZ2VudCDoh6rkuLvlrozmiJDkvYbpobvorrDlvZXjgIIKCuiuoeWIkue0ouW8leaMieWkp+eJiOacrOezu+WIl+e7hOe7h++8mmBwbGFuL2luZGV4Lm1kYCDkuLrpobblsYLntKLlvJXvvIxgcGxhbi92NC9pbmRleC5tZGDjgIFgcGxhbi92NS9pbmRleC5tZGAg562J57O75YiX57Si5byV5a2Y5pS+5ZCE5pyf6K6h5YiS5qC45b+D5pGY6KaB44CCYHBsYW5fbG9nLm1kYCDorrDlvZXmnIDov5EgMzAg5p2h5Y+Y5pu05pGY6KaB77yM5qC85byPIGB7dXNlcm5hbWV9OiDlj5jmm7Tmj4/ov7Bg77yM5ZCr6Lez6L2s6ZO+5o6l44CCCgrlj5HnlJ/orqHliJLlpJbmk43kvZzmiJblgY/lt67ml7bvvIzlv4XpobvlhYjlkJHnlKjmiLfor7TmmI7lubblr7vmsYLnoa7orqTvvIzlkIzml7blnKjml6Xlv5fkuK3orrDlvZXjgIIKCiMjIyMg5rWB5rC057q/5o6o6L+bCgrlkITpmLbmrrXnirbmgIHnlLEgYGZsb3cuanNvbmAg5ZKMIGBzdGF0dXMubWRgIOiBlOWQiOeuoeeQhuOAgkZlZWwgQWdlbnQg6K+75Y+WIGZsb3cuanNvbiDliKTmlq3lvZPliY3pmLbmrrXlkowgcGhhc2XvvIzpgJrov4cgYG9wZW5mZWVsIGZsb3dgIOWRveS7pOaOqOi/m+a1geawtOe6v++8mgoKLSBgb3BlbmZlZWwgZmxvdyBzdGF0dXNgIOKAlCDmn6XnnIvlvZPliY3mtYHmsLTnur/nirbmgIEKLSBgb3BlbmZlZWwgZmxvdyBhZHZhbmNlYCDigJQg5o6o6L+b5Yiw5LiL5LiA6Zi25q61Ci0gYG9wZW5mZWVsIGZsb3cgcmVwYWlyYCDigJQg5L+u5aSN5rWB5rC057q/54q25oCBCgrmtYHmsLTnur8gcGhhc2Ug5p6a5Li+77yIZmxvdy5qc29uIFBpcGVsaW5lUGhhc2XvvInvvJoKcGxhbl9wZW5kaW5nIOKGkiBwbGFuX3JldmlldyDihpIgcGxhbl9wYXNzZWQg4oaSIHNjaGVtZV9wZW5kaW5nIOKGkiBzY2hlbWVfcmV2aWV3IOKGkiBzY2hlbWVfcGFzc2VkIOKGkiBleGVjX3J1bm5pbmcg4oaSIHJldmlld19wZW5kaW5nIOKGkiByZXZpZXdfZmFpbGVkIOKGkiByZXZpZXdfcGFzc2VkIOKGkiB0ZXN0X3BlbmRpbmcg4oaSIHRlc3RfZmFpbGVkIOKGkiB0ZXN0X3Bhc3NlZCDihpIgYXJjaGl2aW5nIOKGkiBkb25lCgrkurrlt6XmtYHnqIvkuLrpu5jorqTmqKHlvI/jgIJGZWVsIOagueaNriBmbG93Lmpzb24g54q25oCB6LCD5bqm5LiL5ri4IEFnZW5077yIUGxhbm5lciAvIFNjaGVtZXIgLyBFeGVjdXRvciAvIFJldmlld2VyIC8gRmVlbCBUZXN0ZXIgLyBBcmNoaXZlcu+8ie+8jOS4jeS+nei1luaXp+W8j+iHquWKqOWMluiwg+W6puOAggoK54q25oCB5Li6IGRvbmUg5oiWIHBhdXNlZCDml7bvvIzkuI3lvpfnu6fnu63oh6rliqjmjqjov5vjgILpgYfliLDorqHliJLlpJblj5jmm7TmiJbov57nu63lpLHotKXml7bvvIzlv4XpobvmmoLlgZzlubbnrYnlvoXnlKjmiLflhrPnrZbjgIIKCiMjIyDkuLTml7bnm67lvZUKCj4gLm9wZW5mZWVsL3RtcAoK5a2Y5pS+6aG555uu57qn5Li05pe25paH5Lu277yI5YWx5Lqr5pWw5o2u44CB5p6E5bu65Lqn54mp562J77yJ44CC5LuF5Zyo55So5oi35oyH5a6a5pe26K+75Y+W5YW25Lit5paH5Lu244CCCgojIyMg55+l6K+G5bqTCgo+IC5vcGVuZmVlbC9rYgoK6K6w5b2VIui/meS4qumhueebruaYr+S7gOS5iOagt+eahCLlkowi6YGH5Yiw6Zeu6aKY5oCO5LmI5YqeIu+8jOS4jue6puadn+S9k+ezu++8iOiusOW9lSLlupTor6XmgI7kuYjlgZoi77yJ5YiG56a744CCCgpgYGAKLm9wZW5mZWVsL2tiLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICMg5oC757Si5byV77ya5YiG57G75qaC6KeI44CB5ZCE5paH5Lu25pGY6KaB44CB5pyA6L+R5pu05pawCuKUnOKUgOKUgCBhcmNoaXRlY3R1cmUubWQgICAgIyDmnrbmnoTlhrPnrZbjgIHorr7orqHnkIbnlLHjgIHmioDmnK/pgInlnosK4pSc4pSA4pSAIHBhdHRlcm5zLm1kICAgICAgICAjIOS7o+eggeaooeW8j+OAgemhueebrue6puWumuOAgeacgOS9s+Wunui3tQrilJzilIDilIAgdHJvdWJsZXNob290aW5nLm1kICMg5bi46KeB6Zeu6aKY44CB6LCD6K+V5rWB56iL44CB5bey55+l5Z2R5L2NCuKUlOKUgOKUgCBzZXR1cC5tZCAgICAgICAgICAgIyDnjq/looPmkK3lu7rjgIHmnoTlu7rmtYHnqIvjgIHkvp3otZbnrqHnkIYKYGBgCgrliIbnsbvmlbDph4/kuI3lgZrnoazmgKfpmZDliLbjgIJgaW5kZXgubWRgIOe7tOaKpOa4heaZsOaRmOimgeS+myBBZ2VudCDlv6vpgJ/lrprkvY3jgILmr4/kuKrliIbnsbvmlofku7bnmoQgYFsrXWAvYFstXWAg5qCH6K6w6KeE5YiZ5LiOIGBkZXZfY29yZS5tZGAg5LiA6Ie044CCCgoqKuWGmeWFpeinhOiMg++8mioqCgp8IOexu+WeiyB8IOWGmeWFpei3r+W+hCB8CnwtLS0tLS18LS0tLS0tLS0tLXwKfCDmnrbmnoTlhrPnrZbvvIjlpoIgT0F1dGgyICsgcmVmcmVzaCB0b2tlbiDmlrnmoYjvvIkgfCBgYXJjaGl0ZWN0dXJlLm1kYCB8Cnwg5Luj56CB5qih5byP77yI5aaC54q25oCB5py657uf5LiA55SoIFN3aXRjaCArIEVudW3vvIkgfCBgcGF0dGVybnMubWRgIHwKfCDmjpLmn6Xnu4/pqozvvIjlpoLmnoTlu7rmiqXplJnml7bnmoTlpITnkIbmraXpqqTvvIkgfCBgdHJvdWJsZXNob290aW5nLm1kYCB8Cnwg546v5aKD6YWN572u77yI5aaC54m55q6K57yW6K+R5rWB56iL77yJIHwgYHNldHVwLm1kYCB8Cnwg6aG555uu5YiG5p6Q5oql5ZGK77yI5rWL6K+V5aSN55uY44CB5rWB56iL5YiG5p6Q44CB6Zeu6aKY5oC757uT77yJIHwg6aG555uu5qC555uu5b2V5LiL55qEIGBkb2NzL3BoYXNlLXtOfS9gIHwKfCDlr7nkvZPns7vnmoTnkIbop6PvvIjkuI7pobnnm67liIbmnpDmiqXlkYrlkIznm67lvZXvvIkgfCDpobnnm67moLnnm67lvZXkuIvnmoQgYGRvY3MvcGhhc2Ute059L2AgfAoK56aB5q2i5YaZ5YWl55+l6K+G5bqT77ya6KGM5Li657qm5p2f77yI4oaSIEFHRU5UUy5tZO+8ieOAgeaTjeS9nOa1geeoi++8iOKGkiBJbnN0cnVjdGlvbnPvvInjgIHlt6XkvZzljLrnu7TmiqTop4TliJnvvIjihpIgZGV2X2NvcmUubWTvvInjgILmr4/mrKHlhpnlhaXlkI7lnKjlhazlhbHml6Xlv5fkuK3orrDlvZXjgIIKCiMjIyMg6Ieq5Yqo5YaZ5YWl5py65Yi2CgoqKuinpuWPkeaXtuacuioq77ya5q+P5qyh5Lya6K+d5Lit77yMQWdlbnQg5a6M5oiQ6Z2e5bmz5Yeh5Lu75Yqh5ZCO77yI5o6S6Zmk57qv5p+l6K+iL+Wvueivneexu+aTjeS9nO+8ie+8jOW6lOWcqOimhuebluWGmeWFpSBgZGV2X2xhc3QubWRgIOaXtuWwhuacrOS8muivneeahCoq5YWz6ZSu57uP6aqMKirmmoLlrZjlhbbkuK3jgIIKCioq57uP6aqM5pqC5a2Y5qC85byPKirvvIjlhpnlhaUgYGRldl9sYXN0Lm1kYO+8ie+8mgotIGAtIFsgXSBcYHvliIbnsbt9XGDvvJp757uP6aqM5o+P6L+wfWAg4oCUIOW+heeUqOaIt+ehruiupOW9kuWFpSBrYi8KCioq5b2S5qGj5rWB56iLKirvvJoKMS4gQWdlbnQg5Zyo5LiL5LiA5qyh5Lya6K+d5ZCv5Yqo5pe26K+75Y+WIGBkZXZfbGFzdC5tZGDvvIzoi6Xlj5HnjrDmnInmnKrlvZLmoaPnmoTnu4/pqozmnaHnm67vvIzmj5DphpLnlKjmiLfnoa7orqTjgIIKMi4g55So5oi356Gu6K6k5ZCO77yMQWdlbnQg5bCG57uP6aqM5YaZ5YWl5a+55bqUIGtiLyDliIbnsbvmlofku7bvvIhgYXJjaGl0ZWN0dXJlLm1kYCAvIGBwYXR0ZXJucy5tZGAgLyBgdHJvdWJsZXNob290aW5nLm1kYCAvIGBzZXR1cC5tZGDvvInjgIIKMy4g5YaZ5YWl5qC85byP77ya5q+P5Liq57uP6aqM5p2h55uu5LulIGAjIyBbK10ge+agh+mimH0gKHvml6XmnJ99KWAg5byA5aS077yM5ZCr5o+P6L+w5ZKM5LiK5LiL5paH44CCCjQuIOWGmeWFpeWQjuabtOaWsCBga2IvaW5kZXgubWRgIOeahOOAjOacgOi/keabtOaWsOOAjeihqOagvO+8jOW5tuWcqOWFrOWFseaXpeW/lyBgLm9wZW5mZWVsL2xvZy9gIOS4reiusOW9leOAggo1LiDmnIDlkI7lsIYgYGRldl9sYXN0Lm1kYCDkuK3nmoTnu4/pqozmnaHnm67moIforrDkuLogYFt4XWDvvIjlt7LlvZLmoaPvvInmiJbliKDpmaTjgIIKCioq6Ieq5Yqo5YaZ5YWl5Yik5pat5qCH5YeGKirvvIjmu6HotrPku7vkuIDljbPlhpnlhaXvvInvvJoKLSDop6PlhrPkuobkuIDkuKrmraTliY3mnKrnn6XnmoTmnoTlu7ov546v5aKD6Zeu6aKYCi0g5Y+R546w5bm26K6w5b2V5LqG5LiA5Liq5Luj56CB5qih5byPL+acgOS9s+Wunui3tQotIOWBmuS6huS4gOS4quW9seWTjeWQjue7reW8gOWPkeeahOaetuaehOWGs+etlgotIOmBh+WIsOS4gOS4quWAvOW+l+iusOW9leeahOWdkeS9jS/mjpLmn6Xnu4/pqowKCuatpOa1geeoi+ehruS/nSBBZ2VudCDnmoTnu4/pqozkuI3kvJrpmo/kvJror53kuKLlpLHvvIznn6Xor4blupPpmo/pobnnm67mjIHnu63lop7plb/jgIIKCi0tLQoKIyMg56eB5Z+fCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9LwoK56eB5Z+f55uu5b2V77yMQWdlbnQg5q+P5qyh6YCa6L+HIGAub3BlbmZlZWwvLmluZm8uanNvbmAg6I635Y+W5b2T5YmN55So5oi35ZCN56Gu5a6a5a+55bqU6Lev5b6E44CC5Luj56CB5L+u5pS55ZCO6aG75ZCM5q2l5pu05paw56eB5Z+f5YaF55u45YWz5paH5Lu277yI6K6h5YiS44CB5pel5b+X44CB56yU6K6w562J77yJ77yM5L+d5oyB5LiO5a6e6ZmF54q25oCB5LiA6Ie044CCCgojIyMg5Liq5Lq65pON5L2c54q25oCBCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Rldl9sYXN0Lm1kCgrorrDlvZXkuIrkuIDmrKHmk43kvZznu5PmnZ/ml7bnmoTnroDopoHnirbmgIHvvIzlr7nor53mnKvlsL7opobnm5blhpnlhaXjgILkuIvmrKHlkK/liqjml7blhYjor7vlj5bku6XmgaLlpI3kuIrkuIvmlofjgILoi6XlhoXlrrnkuI7lvZPliY3lr7nor53nn5vnm77liJnmoIforrAi5Y+v6IO96L+H5pyfIuW5tuWQkeeUqOaIt+ehruiupOOAggoKKirmqKHmnb8qKu+8mgpgYGBtYXJrZG93bgojIOS4iuasoeaTjeS9nOeKtuaAgQotIOaXtumXtDogeXl5eS1tbS1kZCBISDpNTQotIOmYtuautToge+W9k+WJjeiuoeWIkumYtuautX0KLSDmk43kvZw6IHvkuIDlj6Xor53mj4/ov7DkuIrmrKHmk43kvZx9Ci0g5paH5Lu2OiB75paw5aKe5oiW5L+u5pS555qE5YWz6ZSu5paH5Lu25YiX6KGofQotIOW9k+WJjeeKtuaAgToge+mYtuautei/m+W6pu+8jOWmgiAzLzcg5Lu75Yqh5a6M5oiQfQoKIyMg55So5oi35YGP5aW9Ci0g6K+t6KiA77yae2xhbmd9Ci0g6Ieq5Yqo5o6o6L+b77yae2F1dG9fYWR2YW5jZX0KLSDlrqHmn6XmqKHlvI/vvJp7cmV2aWV3X21vZGV9Ci0g5rKf6YCa6aOO5qC877yae2NvbW11bmljYXRpb259Ci0g56Gu6K6k6ZiI5YC877yae2NvbmZpcm1fdGhyZXNob2xkfQoKIyMg5LiK5LiL5paH5b+r54WnCi0g5b2T5YmN5rWB5rC057q/6Zi25q6177yae3BoYXNlfQotIOa0u+i3g+mYtuaute+8mnthY3RpdmVfc3RhZ2VzfQotIOS4iuasoeaTjeS9nOaRmOimge+8mnvkuIDlj6Xor519CgojIyDlvoXnu63kuovpobkKLSBbIF0ge+acquWujOaIkOeahOS7u+WKoX0KLSBbIF0ge+mYu+WhnumhuX0KCiMjIOWFs+mUruWGs+etlgotIHvmnKzmrKHkvJror53kuK3nmoTph43opoHmnrbmnoTmiJborr7orqHlhrPnrZZ9CgojIyDlhrPnrZbljoblj7IK77yI5pys5Lya6K+d5paw5aKe55qE5Yaz562W5LulIGAtIFt4XSB7ZGF0ZX3vvJp75Yaz562W5o+P6L+wfWAg5qC85byP6L+95Yqg5LqO5q2k77yJCgojIyDnu4/pqozmmoLlrZgKLSBbIF0gYGFyY2hpdGVjdHVyZWDvvJp75b6F5b2S5qGj55qE5p625p6E5Yaz562WfQotIFsgXSBgcGF0dGVybnNg77yae+W+heW9kuaho+eahOS7o+eggeaooeW8j30KLSBbIF0gYHRyb3VibGVzaG9vdGluZ2DvvJp75b6F5b2S5qGj55qE5o6S5p+l57uP6aqMfQotIFsgXSBgc2V0dXBg77yae+W+heW9kuaho+eahOeOr+Wig+mFjee9rn0KYGBgCgrmraTmqKHmnb/noa7kv53ot6jkvJror53kuIrkuIvmlofmgaLlpI3liLDotrPlpJ/miafooYzkuIvkuIDkuKrku7vliqHnmoTnqIvluqbvvIzlkIzml7bmib/ovb3nu4/pqozmmoLlrZjlip/og73vvIzmlK/mkpHnn6Xor4blupPoh6rliqjlhpnlhaXmnLrliLbjgIIqKuWGmeWFpeivtOaYjioq77yaRmVlbCDlkK/liqjml7bku44gYHJlYWRQcm9maWxlKClgIOivu+WPluWFqOWxgOWBj+WlveWhq+WFheOAjOeUqOaIt+WBj+WlveOAje+8m+S8muivneS4reWBmuaKgOacry/mnrbmnoTlhrPnrZbml7boh6rliqjov73liqDliLDjgIzlhrPnrZbljoblj7LjgI3vvJvmr4/mrKHlhpnlhaUgZGV2X2xhc3QubWQg5pe25pu05paw44CM5LiK5LiL5paH5b+r54Wn44CN44CCCgojIyMg5Liq5Lq656yU6K6wCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L25vdGUvCgrnu4/pqozmlZnorq3nmoQqKuS4u+imgeiusOW9leS9jee9rioq44CC566A6KaB5o+P6L+w77yM6K+m5oOF5pS+5a2Q5paH5Lu25bm25bu657Si5byV44CCQWdlbnQg5Zyo5q+P5qyh5a+56K+d5Lit6ZqP5py65o+Q6YaS55So5oi35piv5ZCm6ZyA6KaB5b2S5YWl5YWs5YWx56yU6K6wIGBkZXYvbm90ZS9kZXZfbm90ZS5tZGDvvIzlvZLlhaXlkI7moIfms6gi5bey5b2S5YWl5YWs5YWx5Z+fIuWPiui3s+i9rOmTvuaOpeOAggoKIyMjIOS4quS6uuaXpeW/lwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9sb2cvCgrml6XluLjmk43kvZznmoQqKuS4u+imgeiusOW9leS9jee9rioq44CC57uT5p6E5LiO5YWs5Z+f5pel5b+X5LiA6Ie077yM5ZG95ZCN5qC85byPIGB5eXl5LW1tLWRkLU5OTi5tZGDvvIjml6DpnIDnlKjmiLflkI3vvIzlm6Dlt7LlnKjnlKjmiLfnm67lvZXkuIvvvInjgIIKCiMjIyDku6PnoIHlrqHmn6UKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vY29kZV9yZXZpZXcvCgrnrqHnkIblvIDlj5HpmLbmrrXnmoTku6PnoIHor4TlrqHpl67popjvvIjmnrbmnoTjgIHop4TojIPjgIHpgLvovpHvvInvvIzmjInorqHliJLpmLbmrrXnu4Tnu4fjgILkuI4gQnVnIOi/vei4quWIhuemu+OAggoKKirop5LoibLliIblt6XvvJoqKgotICoqUmV2aWV3ZXIqKu+8muagueaNruiuoeWIkumYtuauteWuoeafpeS7o+egge+8jOaPkOS6pOmXrumimO+8jOmqjOaUtuS/ruWkjee7k+aenOOAggotICoqRXhlY3V0b3IqKu+8muWkhOeQhuWuoeafpemXrumimO+8jOS/ruaUueS7o+eggeW5tuagh+iusOeKtuaAgeOAggoK5q+P5Liq6K6h5YiS6Zi25q6155qE5a6h5p+l6Zeu6aKY6ZuG5Lit5ZyoIGBSRVYte3BsYW5fc3RhZ2V9Lm1kYOOAguadoeebruaooeadv++8mgoKYGBgbWFya2Rvd24KIyMgUkVWLXtOT306IHvnroDopoHmoIfpoph9Ci0gKirnirbmgIEqKu+8mnBlbmRpbmcgfCBmaXhpbmcgfCByZXNvbHZlZCB8IGNsb3NlZAotICoq5LyY5YWI57qnKirvvJpoaWdoIHwgbWVkaXVtIHwgbG93Ci0gKirmj5Dlh7rkuroqKu+8mlJldmlld2VyCi0gKirmj5Dlh7rml7bpl7QqKu+8mnl5eXktbW0tZGQgSEg6TU0KCiMjIyDpl67popjmj4/ov7AKLi4uCgojIyMg5aSE55CG6K6w5b2VCnwg5pe26Ze0IHwg5pON5L2c6ICFIHwg6K+05piOIHwgQ29tbWl0IHwKfC0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tLS18CgojIyMg6aqM5pS26K6w5b2VCnwg5pe26Ze0IHwg6aqM5pS25Lq6IHwg57uT6K66IHwg5aSH5rOoIHwKfC0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tfApgYGAKCuagueebruW9lee7tOaKpCBgaW5kZXgubWRg77yI5oyJ6Zi25q615YiG57uE57Si5byV77yM6aG26YOo57uf6K6h5ZCE54q25oCB5pWw6YeP77yJ5ZKMIGBsb2cubWRg77yI5pyA6L+RIDMwIOadoeWuoeafpeWPmOabtOaRmOimge+8ieOAggoK5a6h5p+l6Zeu6aKY5qCH6K6w5Li6IGBwZW5kaW5nYCDml7bvvIzoi6XkvJjlhYjnuqfkuLogYGhpZ2hg77yM6aG75bCG6Zeu6aKY6K+m5oOF77yI5qCH6aKY44CB5o+P6L+w44CB5b2x5ZON6IyD5Zu077yJ5YaZ5YWl5YWs5YWx5pel5b+X77yM56Gu5L+d5Zui6Zif5Y+K5pe25Y+v6KeB44CC5p2h55uuIGBjbG9zZWRgIOaXtu+8jOaguOW/g+e7k+iuuuWGmeWFpSBgLm9wZW5mZWVsL2NvZGVfcmV2aWV3L3tzdGFnZX0ubWRg77yM5bm25Zyo5YWs5YWx5pel5b+X566A6KaB6K6w5b2V44CCCgojIyMgQnVnIOi/vei4qgoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwoK566h55CG5rWL6K+V6Zi25q615Y+R546w55qE57y66Zm377yM5oyJ5qih5Z2X57uE57uH44CC5LiO5Luj56CB5a6h5p+l5YiG56a744CCCgoqKuinkuiJsuWIhuW3pe+8mioqCi0gKipUZXN0ZXIqKu+8muaPkOS6pCBCdWcg5ZKM5pyA57uI6aqM5pS244CCCi0gKipFeGVjdXRvcioq77ya5oyJ5qih5Z2X5YiG5bel5L+u5aSN77yM5Lya6K+d5ZCv5Yqo5pe26YCa6L+HIGBsb2FkIHNraWxsIGdldC1idWdzYCDojrflj5botJ/otKPmqKHlnZfnmoTlvoXlpITnkIYgQnVn44CCCgpCdWcg5oyJ5qih5Z2X5a2Q55uu5b2V57uE57uH77yM5q+P5Liq5qih5Z2X55uu5b2V5LiLIEJ1ZyDlkb3lkI0gYEJVRy17Tk5OfV97566A55Wl5qCH6aKYfS5tZGDvvIhOTk4g5qih5Z2X5YaF6YCS5aKe77yJ77yaCgpgYGAKLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYnVncy8K4pSc4pSA4pSAIGluZGV4Lm1kICAgICAgICAgICAgICAjIOaMieaooeWdl+WIhue7hOe0ouW8le+8iCMjIyB75qih5Z2X5ZCNfSBAe+i0n+i0o0FnZW505ZCNfe+8iQrilJzilIDilIAgbG9nLm1kICAgICAgICAgICAgICAgICMg5pyA6L+RIDMwIOadoeWPmOabtOaRmOimgQrilJzilIDilIAge21vZHVsZV9hfS8K4pSCICAg4pSc4pSA4pSAIEJVRy0wMDFf5qCH6aKYLm1kCuKUgiAgIOKUlOKUgOKUgCBCVUctMDAyX+agh+mimC5tZArilJTilIDilIAge21vZHVsZV9ifS8KICAgIOKUlOKUgOKUgCBCVUctMDAxX+agh+mimC5tZApgYGAKCkJ1ZyDmoIforrDkuLogYG9wZW5gIOaXtu+8jOiLpeS8mOWFiOe6p+S4uiBgaGlnaGDvvIzpobvlsIbnvLrpmbfor6bmg4XvvIjmoIfpopjjgIHmj4/ov7DjgIHlpI3njrDmraXpqqTjgIHlvbHlk43mqKHlnZfvvInlhpnlhaXlhazlhbHml6Xlv5fvvIznoa7kv53lm6LpmJ/lj4rml7blj6/op4HjgILmnaHnm64gYGNsb3NlZGAg5pe277yM5qC45b+D57uT6K665YaZ5YWlIGAub3BlbmZlZWwvYnVncy97bW9kdWxlfS5tZGDvvIzlubblnKjlhazlhbHml6Xlv5fnroDopoHorrDlvZXjgIIKCiMjIyDlrqHmn6Uv6L+96LiqIOeUn+WRveWRqOacnwoK5Lik6ICF5YWx55So5ZCM5LiA54q25oCB5rWB6L2s5qih5Z6L77yI5LuF6LW35aeL54q25oCB5ZCN5LiN5ZCM77yJ77yaCgpgYGAKcGVuZGluZy9vcGVuICDilIDilIDihpIgIGZpeGluZyAg4pSA4pSA4oaSICByZXNvbHZlZCAg4pSA4pSA4oaSICBjbG9zZWQKICAgICAg4oaRICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAg6aqM5pS25LiN6YCa6L+HIOKUgOKUgOKUgOKUmApgYGAKCnwg54q25oCBIHwg5Luj56CB5a6h5p+lIHwgQnVnIOi/vei4qiB8IOaTjeS9nOiAhSB8CnwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLXwKfCDotbflp4sgfCBgcGVuZGluZ2AgfCBgb3BlbmAgfCBSZXZpZXdlciAvIFRlc3RlciDmj5DkuqQgfAp8IOS/ruWkjeS4rSB8IGBmaXhpbmdgIHwgYGZpeGluZ2AgfCBFeGVjdXRvciDmib/mjqUgfAp8IOW+hemqjOaUtiB8IGByZXNvbHZlZGAgfCBgcmVzb2x2ZWRgIHwgRXhlY3V0b3Ig5a6M5oiQIHwKfCDlhbPpl60gfCBgY2xvc2VkYCB8IGBjbG9zZWRgIHwgUmV2aWV3ZXIgLyBUZXN0ZXIg6aqM5pS26YCa6L+HIHwKCiMjIyDkuKrkurrkuLTml7bnm67lvZUKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wLwoK5a2Y5pS+5b2T5YmN55So5oi355qE5Li05pe25paH5Lu277yM5LiO5YW25LuW55So5oi35a6M5YWo6ZqU56a744CCCg=='
2551
2619
  };
2552
2620
  // AUTO-GENERATED-END: CORE_INSTRUCTIONS_TEMPLATES
2553
2621
  // AUTO-GENERATED-BEGIN: AGENTS_MD_TEMPLATES
@@ -2562,6 +2630,18 @@ Project-level behavioral constraints and coding conventions for AI Agents. This
2562
2630
 
2563
2631
  You should think in English. At the start of a session, organize your analysis into concise information and output it in English.
2564
2632
 
2633
+ ## Task Type Routing
2634
+
2635
+ Not all tasks must go through the full pipeline. Non-coding tasks and coding tasks are both first-class citizens; choose the path based on task type:
2636
+
2637
+ | Task Type | Handling Path | Notes |
2638
+ |-----------|---------------|-------|
2639
+ | Research/exploration (reading code, consulting references, locating issues) | Feel → research (general / explore Agent) | Read-only exploration, no source code changes; flow.json need not spin up for this |
2640
+ | Coding implementation (adding/modifying source code) | Full pipeline (Planner → Schemer → Executor → Reviewer → Tester) | Involves source changes, must go through the full audit chain |
2641
+ | Selection discussion (settling a technical approach / design trade-off) | Feel + \`question\` tool | Conversational decision, produces a conclusion, no plan.md |
2642
+
2643
+ > Non-coding tasks (research, selection discussion) do not require creating a plan or advancing the pipeline; the pipeline is engaged only when source changes or a formal plan document is produced.
2644
+
2565
2645
  ## Core Constraints
2566
2646
 
2567
2647
  1. When the user makes a request, first analyze and break down the requirements, then list your understanding in bullet points for user confirmation. Requirements that are extremely simple and unambiguous may skip confirmation, but a brief explanation of your understanding is still required. Content that is uncertain during analysis must be clarified promptly; avoid speculative assumptions.
@@ -2635,6 +2715,8 @@ When encountering technical issues, **the first action MUST be to consult the kn
2635
2715
 
2636
2716
  4. **Feel orchestration constraint**: Feel, as the overall commander, uniformly orchestrates downstream Agents (Planner / Schemer / Executor / Reviewer / Feel Tester / Utility Agent / Vision / Archiver), advancing serially via the \`task\` tool according to pipeline phases (plan → scheme → execute → review → test → archive). Each Agent operates only within its own responsibility boundary and must not start other Agents beyond its scope or modify flow.json state on its own.
2637
2717
 
2718
+ 5. **Lightweight decision boundary**: Conversational selections (Feel and the user settle a technical direction or design trade-off via the \`question\` tool, producing a conclusion but no plan.md) are handled by Feel directly, without delegating to Planner; only when a **formal plan document** (plan.md, including stage division, task table, constraint table) is needed, or the planning scale threshold is reached, should Planner be delegated. Avoid the extremes of "handle everything personally" or "delegate everything".
2719
+
2638
2720
  Deviating from the above constraints is considered a violation and will be flagged during review.
2639
2721
 
2640
2722
  ### 9-Agent System Overview
@@ -2669,7 +2751,7 @@ Version progression must be prudent, using the four-level X.Y.Z.W version number
2669
2751
  | Level 4 (W) | Feature detail | Independently committed feature or submodule |
2670
2752
 
2671
2753
  When Feel starts a new version, it defaults to incrementing the fourth level (W+1), unless the user explicitly specifies otherwise.
2672
- The project is currently in the v0 development stage; the official v1 will be released when features are complete.
2754
+ The OpenFeel framework has released the official v1.0.x (currently v1.0.8). After deploying this template via openfeel init, new projects set their own starting version number as needed.
2673
2755
 
2674
2756
  ## Project Flow Tools
2675
2757
 
@@ -2696,6 +2778,18 @@ AI Agent 项目级行为约束与编码规范。本文件为永久性约束,
2696
2778
 
2697
2779
  你应当以中文思维思考问题,在会话开始时,将思考结论整理为简扼信息,以中文形式输出。
2698
2780
 
2781
+ ## 任务类型路由
2782
+
2783
+ 并非所有任务都须走完整流水线。非编码任务与编码任务是一等公民,按任务类型选择路径:
2784
+
2785
+ | 任务类型 | 处理路径 | 说明 |
2786
+ |----------|----------|------|
2787
+ | 调研/探索(读代码、查资料、定位问题) | Feel → research(general / explore Agent) | 只读探索,不产出源码变更,flow.json 不必为此空转 |
2788
+ | 编码实现(新增/修改源码) | 完整流水线(Planner → Schemer → Executor → Reviewer → Tester) | 有源码变更,须走完整审计链 |
2789
+ | 选型讨论(敲定技术方案/设计取舍) | Feel + \`question\` 工具 | 对话式决策,产出结论,不产出 plan.md |
2790
+
2791
+ > 非编码任务(调研、选型讨论)不强制创建计划或推进流水线;仅当产生源码变更或正式计划文档时才接入流水线。
2792
+
2699
2793
  ## 核心约束
2700
2794
 
2701
2795
  1. 当用户提出需求时,先分析拆解需求,并将理解列点回馈给用户确认。需求极其简单且无歧义的可以跳过确认,但仍需简要说明理解。分析中不确定的内容必须及时提问,避免推测性假设。
@@ -2769,6 +2863,8 @@ AI Agent 项目级行为约束与编码规范。本文件为永久性约束,
2769
2863
 
2770
2864
  4. **Feel 调度约束**:Feel 总统领统一调度下游 Agent(Planner / Schemer / Executor / Reviewer / Feel Tester / 事务官 / Vision / Archiver),通过 \`task\` 工具按流水线阶段(计划→方案→执行→审查→测试→归档)串行推进。各 Agent 仅在自己的职责边界内操作,不得越界启动其他 Agent 或自行修改 flow.json 状态。
2771
2865
 
2866
+ 5. **轻量决策边界**:对话式选型(Feel 与用户通过 \`question\` 工具敲定技术方向/设计取舍,产出结论不产出 plan.md)由 Feel 直接处理,不委托 Planner;仅当需要**产出正式计划文档**(plan.md,含阶段划分、任务表、约束表)或达到规划规模阈值时,才委托 Planner。避免"要么全亲为、要么全委托"的极端。
2867
+
2772
2868
  偏离以上约束的行为视为违规,审查时将被标记。
2773
2869
 
2774
2870
  ### 9 Agent 体系总览
@@ -2803,7 +2899,7 @@ AI Agent 项目级行为约束与编码规范。本文件为永久性约束,
2803
2899
  | 四级(W) | 功能细节 | 独立提交的功能或子模块 |
2804
2900
 
2805
2901
  Feel 启动新版本时默认使用四级版本递增(W+1),除非用户明确指定。
2806
- 当前项目处于 v0 开发阶段,正式版 v1 待功能完备后发布。
2902
+ OpenFeel 框架已发布正式版 v1.0.x(当前 v1.0.8)。新项目经 openfeel init 部署本模板后,按自身需求设定起始版本号。
2807
2903
 
2808
2904
  ## 项目流程工具
2809
2905
 
@@ -3519,6 +3615,12 @@ Choose the appropriate process path based on the change scale:
3519
3615
 
3520
3616
  > Meeting either the line count or file count threshold upgrades to the corresponding level.
3521
3617
 
3618
+ ### Lightweight Decision Boundary
3619
+
3620
+ A **lightweight decision** is a conversational selection: Feel and the user clarify and settle a technical direction or design trade-off through the \`question\` tool, producing a "conclusion" rather than a "formal plan document" — no plan.md is produced. Such decisions are handled by Feel directly, without delegating to Planner.
3621
+
3622
+ Only when a **formal plan document** (plan.md, including stage division, task table, constraint table) is needed, or the scale thresholds above are reached, should Feel delegate to Planner.
3623
+
3522
3624
  ## Workflow
3523
3625
 
3524
3626
  \`\`\`
@@ -3555,7 +3657,7 @@ A shared log entry (\`.openfeel/log/yyyy-mm-dd-feel-NNN.md\`) must be created wh
3555
3657
 
3556
3658
  - Advancing pipeline state (\`openfeel flow advance\`)
3557
3659
  - Modifying stage state (\`openfeel stage set\`)
3558
- - Delegating operations to Executor / Utility Agent (record: delegation target, op number, output summary)
3660
+ - Delegating operations to any downstream Agent (including research-type agents such as general / explore / utility) (record: delegation target, op number, output summary). No task-type exemption — research-type delegations must also be logged
3559
3661
  - Decision making when review fails (retry / re-scheme / pause / human intervention)
3560
3662
  - Stage summary when a stage reaches done
3561
3663
 
@@ -3621,6 +3723,8 @@ At startup, Feel must load the memory system in the following order:
3621
3723
 
3622
3724
  When making technical/architecture decisions during a session (including: choosing a technical approach, rejecting alternatives, adjusting design direction, accepting trade-offs), Feel must append the new decision to the "Decision History" section in the format \`- [x] {date}: {decision description}\` before finally writing dev_last.md (do not overwrite existing entries).
3623
3725
 
3726
+ **Decision ownership**: Long-term decisions (technology selection, architecture direction, cross-session design trade-offs) must be synced to \`.openfeel/dev/decisions.md\` in ADR format in addition to being appended to the dev_last.md "Decision History" section; session-scoped temporary decisions (process adjustments, one-off trade-offs) are recorded only in the dev_last.md "Decision History" section.
3727
+
3624
3728
  Decision criteria (record when any applies):
3625
3729
  - Involves introducing a new dependency or version choice
3626
3730
  - Involves an architecture pattern choice (e.g., choosing YAML over JSON)
@@ -3680,6 +3784,12 @@ Planner acts as an independent sub-agent invoked by Feel on demand. Feel decides
3680
3784
  - **May invoke** (medium scale): Single stage with ≥ 5 files but no architectural adjustments, or ambiguous requirements needing structured decomposition
3681
3785
  - **Feel handles concurrently** (small scale): < 5 files, ≤ 30 lines of changes, supplementing existing plans, or bug fixes
3682
3786
 
3787
+ ### Lightweight Decision Boundary
3788
+
3789
+ **Lightweight decisions** (conversational selections: Feel and the user settle a technical direction or design trade-off via the \`question\` tool, producing a conclusion but no plan.md) are handled by Feel directly; Planner is not invoked.
3790
+
3791
+ Feel invokes Planner only when a **formal plan document** (plan.md, including stage division, task table, constraint table) is needed, or the scale thresholds above are reached.
3792
+
3683
3793
  ## Core Responsibilities
3684
3794
 
3685
3795
  1. **Version roadmap**: Based on project overall goals, define version roadmaps.
@@ -3764,7 +3874,7 @@ Planner is driven by a **reasoning model** (such as DeepSeek V4 Pro). In the Fee
3764
3874
  reviewer: `---
3765
3875
  description: Reviewer Agent, heterogenous reasoning model, responsible for cross-reviewing plans/schemes/code.
3766
3876
  mode: subagent
3767
- model: zhipuai/glm-5.1
3877
+ model: zhipuai/glm-5.2
3768
3878
  reasoning_effort: medium
3769
3879
  color: "#D4A017"
3770
3880
  permission:
@@ -4786,6 +4896,12 @@ Agent 模型需求对照:
4786
4896
 
4787
4897
  > 满足行数或文件数任一条件即升级到对应级别。
4788
4898
 
4899
+ ### 轻量决策边界
4900
+
4901
+ **轻量决策**指对话式选型:Feel 与用户通过 \`question\` 工具澄清并敲定技术方向或设计取舍,产出的是「结论」而非「正式计划文档」,不产出 plan.md。此类决策由 Feel 直接处理,无需委托 Planner。
4902
+
4903
+ 仅当需要**产出正式计划文档**(plan.md,含阶段划分、任务表、约束表)或达到上方规模阈值时,才委托 Planner。
4904
+
4789
4905
  ## 工作流程
4790
4906
 
4791
4907
  \`\`\`
@@ -4822,7 +4938,7 @@ Agent 模型需求对照:
4822
4938
 
4823
4939
  - 推进流水线状态(\`openfeel flow advance\`)
4824
4940
  - 修改阶段状态(\`openfeel stage set\`)
4825
- - 委托 Executor / 事务官 执行的操作(记录:委托目标、op 编号、产出摘要)
4941
+ - 委托任意下游 Agent(含 general / explore / utility 等调研类 Agent)执行的操作(记录:委托目标、op 编号、产出摘要)。不受任务类型豁免——调研类委托同样须落日志
4826
4942
  - 审查不通过时的处理决策(重试 / 重新方案 / 暂停 / 人工介入)
4827
4943
  - 阶段 done 时的阶段性总结
4828
4944
 
@@ -4888,6 +5004,8 @@ Feel 启动时必须按以下顺序加载记忆体系:
4888
5004
 
4889
5005
  会话中做出技术/架构决策(包括:选择技术方案、拒绝备选方案、调整设计方向、接受 trade-off)时,Feel 必须在最终写入 dev_last.md 前,以 \`- [x] {date}:{决策描述}\` 格式将新决策追加到「决策历史」节(不覆盖已有条目)。
4890
5006
 
5007
+ **决策归属区分**:长期决策(技术选型、架构方向、跨会话有效的设计取舍)除追加到 dev_last.md「决策历史」节外,还须以 ADR 格式同步写入 \`.openfeel/dev/decisions.md\`;会话临时决策(流程调整、单次取舍)仅记录在 dev_last.md「决策历史」节。
5008
+
4891
5009
  决策判断标准(满足任一即记录):
4892
5010
  - 涉及新依赖引入或版本抉择
4893
5011
  - 涉及架构模式选择(如选 YAML 而非 JSON)
@@ -4947,6 +5065,12 @@ Planner 作为独立子 Agent 由 Feel 按需唤起。Feel 根据规划规模决
4947
5065
  - **可唤起**(中等规模):单阶段 ≥ 5 个文件但无架构调整、或需求模糊需结构化拆解
4948
5066
  - **Feel 兼任**(小规模):< 5 个文件、≤ 30 行修改、补充已有计划、或 Bug 修复
4949
5067
 
5068
+ ### 轻量决策边界
5069
+
5070
+ **轻量决策**(对话式选型:Feel 与用户通过 \`question\` 工具敲定技术方向或设计取舍,产出结论但不产出 plan.md)由 Feel 直接处理,不唤起 Planner。
5071
+
5072
+ 仅当需要**产出正式计划文档**(plan.md,含阶段划分、任务表、约束表)或达到上方规模阈值时,Feel 才唤起 Planner。
5073
+
4950
5074
  ## 核心职责
4951
5075
 
4952
5076
  1. **分期大纲**:根据项目整体目标,制定 roadmap 中的版本分期。
@@ -5031,7 +5155,7 @@ Planner 由**推理模型**(如 DeepSeek V4 Pro)驱动。在 Feel 体系设
5031
5155
  reviewer: `---
5032
5156
  description: Reviewer 审查官 Agent,异种推理模型,负责交叉审查计划/方案/代码。
5033
5157
  mode: subagent
5034
- model: deepseek/deepseek-v4-pro
5158
+ model: zhipuai/glm-5.2
5035
5159
  reasoning_effort: medium
5036
5160
  color: "#D4A017"
5037
5161
  permission:
@@ -6505,7 +6629,7 @@ description: 交互式流水线向导,供 Agent 在终端中逐步推进流水
6505
6629
  // AUTO-GENERATED-BEGIN: OPENCODE_CONFIG_TEMPLATES
6506
6630
  const OPENCODE_CONFIG_TEMPLATES = {
6507
6631
  'zh-CN': {
6508
- instructions: 'IyAub3BlbmZlZWwg5bel5L2c5Yy65pON5L2c6KeE6IyDCgo+IOmhueebruawuOS5heaAp+ihjOS4uue6puadn+S4jue8lueggeinhOiMg+ingemhueebruagueebruW9lSBgQUdFTlRTLm1kYOOAguacrOaWh+S7tuaPj+i/sCBgLm9wZW5mZWVsL2Ag5bel5L2c5Yy655qE5YW35L2T5pON5L2c6KeE5YiZ44CCCgrlnKjmr4/mrKHlr7nor53lkK/liqjml7bvvIzmo4Dmn6Xpobnnm67ot6/lvoTkuIvnmoQgLm9wZW5mZWVsIOebruW9leWPiuWFtuWGheWuueOAguivpeebruW9leaYr+ehruS/neW8gOWPkeS4gOiHtOaAp+eahOWUr+S4gOaVsOaNrua6kO+8jOS9oOW/hemhu+e7tOaKpOWFtuWujOaVtOaAp+WSjOWHhuehruaAp+OAggoK5Zyo5Lya6K+d5Lit5bqU5Li75Yqo5L2/55So5bmz5Y+w5YaF572u5bel5YW377yI5aaC5o+Q6Zeu44CBVE9ETyDliJfooajvvInvvIzkuI3lvpfku4Xlh63lr7nor53mlofmnKzlrozmiJDlpI3mnYLku7vliqHjgIIKCiMjIOS8muivneWQr+WKqOiHquajgAoK5q+P5qyh5Lya6K+d5ZCv5Yqo5pe277yMQWdlbnQg5b+F6aG76YCQ6aG55qOA5p+l5Lul5LiL55uu5b2V5ZKM5paH5Lu277yM57y65aSx5YiZ6Ieq5Yqo5Yib5bu677yaCgoqKuWFrOWFseWfn+ebruW9lSoq77yI5aaC5LiN5a2Y5Zyo5YiZIGBta2RpciAtcGDvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioq5YWs5YWx5Z+f5paH5Lu2KirvvIjlpoLkuI3lrZjlnKjliJnliJvlu7rnqbrmlofku7bvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9kZXZfY29yZS5tZGAKLSBgLm9wZW5mZWVsL2Rldi9jdXJyZW50Lm1kYAotIGAub3BlbmZlZWwva2IvaW5kZXgubWRgCgoqKuengeWfn+ebruW9lSoq77yI5Z+65LqOIGAub3BlbmZlZWwvLmluZm8uanNvbmAg6I635Y+W55qEIGB7dXNlcm5hbWV9YO+8ie+8mgotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9sb2cvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9ub3RlL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vY29kZV9yZXZpZXcvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wL2AKCioq56eB5Z+f5paH5Lu2KirvvJoKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vZGV2X2xhc3QubWRgCgojIyDorr7orqHljp/liJkKCi5vcGVuZmVlbCDnm67lvZXliIbkuLoqKuWFrOWFseWfnyoq5LiOKirnp4Hln58qKuS4pOmDqOWIhu+8mgotIOWFrOWFseWfn++8muebtOaOpeS9jeS6jiBgLm9wZW5mZWVsL2Ag5LiL77yM5a2Y5pS+6aG555uu57qn5YWx5Lqr5YaF5a6577yI5qC45b+D6KeE5YiZ44CB6K6h5YiS44CB5Zui6Zif5pel5b+X44CB55+l6K+G5bqT562J77yJ77yM57qz5YWl54mI5pys566h55CG44CCCi0g56eB5Z+f77ya5L2N5LqOIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIOS4i++8jOWtmOaUvuS4quS6uuaTjeS9nOeKtuaAgeOAgeaXpeW/l+OAgeeslOiusOOAgeS7o+eggeWuoeafpeOAgUJ1ZyDov73ouKrnrYnvvIzliqDlhaUgYC5naXRpZ25vcmVgIOS4jee6s+WFpeeJiOacrOeuoeeQhuOAggoK5omA5pyJ55So5oi377yI5ZCr5Y2V5Lq66aG555uu77yJ5Z2H6YG15b6q5q2k5YiG5Yy657uT5p6E44CCCgojIyBBZ2VudCDlt6Xlhbfkvb/nlKjop4TojIMKCuaJgOaciSBBZ2VudO+8iOWQqyBGZWVs44CBUGxhbm5lcuOAgVNjaGVtZXLjgIFFeGVjdXRvcuOAgVJldmlld2Vy44CBRmVlbCBUZXN0ZXLjgIFBcmNoaXZlcu+8ieWcqOS8muivneS4reW6lOS4u+WKqOS9v+eUqOW5s+WPsOWGhee9ruW3peWFt++8jOS4jeW+l+S7heWHreWvueivneaWh+acrOWujOaIkOWkjeadguS7u+WKoeOAggoKIyMjIDEuIHRvZG93cml0ZSDigJQg5Lu75Yqh5YiX6KGo566h55CGCgoqKuinpuWPkeadoeS7tioq77yI5ruh6Laz5Lu75LiA5Y2z5L2/55So77yJ77yaCi0g5b2T5YmN5Lu75Yqh5YyF5ZCrIDMg5Liq5Lul5LiK54us56uL5q2l6aqkCi0g55So5oi35ZCM5pe25LiL6L6+5aSa5Liq5Lu75Yqh77yI57yW5Y+35oiW6YCX5Y+35YiG6ZqU77yJCi0g5Lu75Yqh5raJ5Y+K6Leo5paH5Lu25L+u5pS577yM6ZyA6L+96Liq6L+b5bqmCgoqKuS9v+eUqOimgeaxgioq77yaCi0g5byA5aeL5omn6KGM5YmN5Yib5bu6IHRvZG8g5YiX6KGo77yM5q+P5Liq5q2l6aqk5LiA5p2hCi0g5ZCM5LiA5pe26Ze05Y+q5pyJ5LiA5p2hIGBpbl9wcm9ncmVzc2AKLSDlrozmiJDlkI7nq4vljbPmoIforrAgYGNvbXBsZXRlZGDvvIjkuI3nrYnmibnlpITnkIbvvIkKLSDkuK3pgJTlj5HnjrDnmoTmlrDmraXpqqTov73liqDliLDliJfooajmnKvlsL4KCioq56S65L6LKirvvJoKYGBgCueUqOaIt++8miLkv67lpI0gZmxvdy5qc29uIOeahOS4ieS4qiBCdWfvvIznhLblkI7ot5HmtYvor5UiCuKGkiDliJvlu7ogdG9kbzogW+S/ruWkjUJ1ZzEsIOS/ruWkjUJ1ZzIsIOS/ruWkjUJ1ZzMsIOi/kOihjOa1i+ivlV0KYGBgCgojIyMgMi4gcXVlc3Rpb24g4oCUIOWQkeeUqOaIt+aPkOmXrgoKKirop6blj5HmnaHku7YqKu+8iOa7oei2s+S7u+S4gOW/hemhu+aPkOmXru+8jOemgeatouiHquihjOWBh+iuvu+8ie+8mgotIOmcgOaxguWtmOWcqOatp+S5ieaIluWkmuenjeWQiOeQhuino+ivuwotIOaKgOacr+aWueahiOaciSAyIOS4quS7peS4iuWQjOetieWQiOeQhueahOmAieaLqQotIOaTjeS9nOWPr+iDveS6p+eUn+S4jeWPr+mAhuWQjuaenO+8iOWIoOmZpOaWh+S7tuOAgeimhueblumFjee9ruOAgWZvcmNlIHB1c2gg562J77yJCi0g5raJ5Y+K5p625p6E5Yaz562W5oiW6K6+6K6h5pa55ZCR6YCJ5oupCgoqKuS9v+eUqOimgeaxgioq77yaCi0g6YCJ6aG55LulICIoUmVjb21tZW5kZWQpIiDmoIforrDmjqjojZDmlrnmoYgKLSDmr4/kuKrpgInpobnpmYTluKbkuIDlj6Xor53or7TmmI7lhbblkI7mnpwKLSDnroDljZXnoa7orqTlnovpl67popjkuI3otoXov4cgMyDkuKrpgInpobkKLSDntKfmgKXmiJbpq5jpo47pmanmk43kvZzlv4XpobvljIXlkKsi5Y+W5raIIumAiemhuQoKKirnpoHmraLooYzkuLoqKu+8mgotIOmcgOaxguaooeeziuaXtuiHquihjOWBh+iuvuWQjuebtOaOpeaJp+ihjAotIOWkmuenjeaWueahiOaXtuacque7j+eUqOaIt+mAieaLqeebtOaOpeWunuaWvQotIOS7pSLlj6/og70iIuS5n+iuuCLlvIDlpLTkvYbkuI3mj5Dpl67nm7TmjqXliqjmiYsKCiMjIyAzLiB0YXNrIOKAlCDlrZAgQWdlbnQg6LCD5bqmCgoqKuinpuWPkeadoeS7tioq77yaCi0g6ZyA5bm26KGM5o6i57Si5aSa5Liq5Luj56CB5Yy65Z+f77yI5ZCv5YqoIDJ+MyDkuKogZXhwbG9yZSBhZ2VudO+8iQotIOWkjeadguWkmuatpemqpOS7u+WKoemcgOWnlOaJmOe7mSBnZW5lcmFsIGFnZW50Ci0g5aSN5p2C5Lu75Yqh6ZyA5aeU5omY57uZ5LiL5ri4IEFnZW5077yI6YCa6L+HIEZlZWwg5oC757uf6aKG6LCD5bqm77yJCgoqKuS9v+eUqOimgeaxgioq77yaCi0g5bm26KGM5Lu75Yqh55So5LiA5p2h5raI5oGv5Y+R5Ye65aSa5LiqIHRhc2sg6LCD55SoCi0g5q+P5LiqIHRhc2sg55qEIHByb21wdCDlv4XpobvljIXlkKvvvJrlhbfkvZPku7vliqHmj4/ov7AgKyDmnJ/mnJvov5Tlm57nmoTkv6Hmga8KLSDmmI7noa7lkYrnn6XlrZAgQWdlbnQg5piv5Y+q6K+756CU56m26L+Y5piv5Y+v5YaZ5Luj56CBCgojIyMgNC4gc2tpbGwg4oCUIOaKgOiDveWKoOi9vQoKKirop6blj5HmnaHku7YqKu+8mgotIOmcgOimgeS6huino+W9k+WJjemYtuauteeKtuaAgSDihpIgYGdldC1zdGFnZS1zdGF0dXNgCi0g6ZyA6KaB5p+l6ZiF6aG555uu55+l6K+G5bqTIOKGkiBgY2hlY2sta2JgCi0g6ZyA6KaB6I635Y+WIEJ1ZyDliJfooagg4oaSIGBnZXQtYnVnc2AKCioq5L2/55So6KaB5rGCKirvvJoKLSDkvJror53lvIDlp4vml7bliqDovb0gYGNoZWNrLWtiYCDojrflj5bpobnnm67og4zmma8KLSDlpITnkIbpmLbmrrXku7vliqHliY3liqDovb0gYGdldC1zdGFnZS1zdGF0dXNgIOehruiupOa1geeoi+eKtuaAgQotIOS4jeW+l+i3s+i/h+aKgOiDveebtOaOpeWHreiusOW/huaTjeS9nAoKIyMjIDUuIOW3peWFt+S9v+eUqOS8mOWFiOe6pwoKfCDlnLrmma8gfCDkvJjlhYjlt6XlhbcgfCDnpoHmraLlgZrms5UgfAp8LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IOWkmuatpemqpOS7u+WKoSB8IGB0b2Rvd3JpdGVgIHwg5Yet6K6w5b+G6YCQ5p2h5omn6KGMIHwKfCDpnIDmsYLkuI3mmI7noa4gfCBgcXVlc3Rpb25gIHwg6Ieq6KGM5YGH6K6+5ZCO5Yqo5omLIHwKfCDmjqLntKLku6PnoIEgfCBgdGFzayhleHBsb3JlKWAgfCDmiYvliqjpgJDkuKogZ3JlcC9yZWFkIHwKfCDojrflj5bnirbmgIEgfCBgc2tpbGwoZ2V0LXN0YWdlLXN0YXR1cylgIHwg5Yet6K6w5b+G5o6o5patIHwKfCDmibnph4/mlofku7bmk43kvZwgfCBgdGFzayhnZW5lcmFsKWAgfCDkuLLooYzpgJDkuKrlpITnkIYgfAoKIyMg55So5oi36Lqr5Lu9Cgo+IC5vcGVuZmVlbC8uaW5mby5qc29uCgpgYGBqc29uCnsgInVzZXIiOiAidXNlcm5hbWUiIH0KYGBgCgrmr4/mrKHlr7nor53lkK/liqjml7bvvIxBZ2VudCDpppblhYjor7vlj5bmraTmlofku7bojrflj5blvZPliY3nlKjmiLflkI3jgILoi6Xmlofku7bkuI3lrZjlnKjmiJYgYHVzZXJgIOS4uuepuu+8jOWImeiHquWKqOaJp+ihjCBgZ2l0IGNvbmZpZyB1c2VyLm5hbWVgIOiOt+WPliBHaXQg55So5oi35ZCN5bm25YaZ5YWl44CC6Iul5pegIEdpdCDphY3nva7liJnpgInlj5bpu5jorqTnlKjmiLflkI3jgILmraTmlofku7bliqDlhaUgYC5naXRpZ25vcmVgIOS4jee6s+WFpeeJiOacrOeuoeeQhuOAggoKIyMjIOi3r+W+hOiHquagoemqjAoK5aSn5qih5Z6L5Zyo5p6E6YCgIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIOi3r+W+hOaXtuWPr+iDveaEj+WkluaIquaWreaIluS/ruaUueeUqOaIt+WQje+8iOWmgiBgQWxpY2VgIOKGkiBgQWxpY2DvvInvvIzlr7zoh7Tmlofku7bor7vlhpnlpLHotKXjgILorr/pl67ku7vkvZUgYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Ag5LiL55qE5paH5Lu25pe277yM5b+F6aG76YG15b6q5Lul5LiL6Ieq5qCh6aqM6KeE5YiZ77yaCgoxLiAqKuiuv+mXruWksei0peeri+WNs+agoemqjCoq77yaYHJlYWRg44CBYGdsb2JgIOaTjeS9nOi/lOWbniAiZmlsZSBub3QgZm91bmQiIOaIliAibm8gc3VjaCBmaWxlIiDml7bvvIzkuI3opoHnm7TmjqXmiqXplJnjgILlhYjmiafooYwgYHJlYWQgLm9wZW5mZWVsLy5pbmZvLmpzb25gIOmHjeaWsOiOt+WPluato+ehrueahCBgdXNlcm5hbWVg44CCCjIuICoq5q+U5a+55bm25L+u5q2jKirvvJrlsIblvZPliY3kvb/nlKjnmoQgYHVzZXJuYW1lYCDkuI4gYC5vcGVuZmVlbC8uaW5mby5qc29uYCDkuK3nmoTlgLzpgJDlrZfnrKbmr5Tlr7njgILoi6XkuI3kuIDoh7TvvIznlKjmraPnoa7lgLzph43lu7rlrozmlbTot6/lvoTlkI7ph43or5XjgIIKMy4gKirov57nu63lpLHotKXkuIrmiqUqKu+8mumHjeivleS7jeWksei0peaXtu+8jOWQkeeUqOaIt+aKpeWRiuOAjOi3r+W+hCBge+Wksei0peeahOi3r+W+hH1gIOS4jeWtmOWcqO+8jOW3suehruiupOeUqOaIt+WQjeS4uiBge+ato+ehrueUqOaIt+WQjX1g44CN77yM55Sx55So5oi356Gu6K6k5ZCO5YaN5pON5L2c44CCCgrmraTop4TliJnpgILnlKjkuo7miYDmnIkgQWdlbnTvvIhGZWVsIC8gUGxhbm5lciAvIFNjaGVtZXIgLyBFeGVjdXRvciAvIFJldmlld2VyIC8gRmVlbCBUZXN0ZXIgLyBWaXNpb24gLyBBcmNoaXZlcu+8ieOAggoKLS0tCgojIyDlhazlhbHln58KCiMjIyDlvIDlj5Hnm67lvZUKCj4gLm9wZW5mZWVsL2RldgoK5a2Y5pS+6aG555uu5YWx5Lqr55qE5qC45b+D6KeE5YiZ5LiO6L+b5bqm54q25oCB44CCCgo+IC5vcGVuZmVlbC9kZXYvZGV2X2NvcmUubWQKCuWtmOaUvumVv+acn+acieaViOinhOWImeOAguS8mOWFiOe6p++8mueUqOaIt+aMh+S7pCA+IOacrOaWh+S7tiA+IOS8muivneS4tOaXtuaPkOekuuOAguavj+adoeinhOWImeWJjeW4piBgWytdYO+8iOWQr+eUqO+8iS8gYFstXWDvvIjnpoHnlKjvvInvvIzlj6rog73moIforrDnpoHnlKjkuI3og73liKDpmaTvvIznpoHnlKjotoUgMTAg5p2h5pe25o+Q6YaS55So5oi35riF55CG44CCCgo+IC5vcGVuZmVlbC9kZXYvY3VycmVudC5tZAoK6K6w5b2V5b2T5YmN5q2j5Zyo6L+b6KGM55qE5bel5L2c77yM5oyJIGBAe3VzZXJuYW1lfSDmj4/ov7DmraPlnKjov5vooYznmoTlt6XkvZxgIOiMg+W8j+e7tOaKpOWQhOaIkOWRmOi/m+W6pu+8jOmhtumDqOe7tOaKpOaAu+i/m+W6pueKtuaAgeOAggoKPiAub3BlbmZlZWwvZGV2L25vdGUvZGV2X25vdGUubWQKCuWboumYn+WFseS6q+W8gOWPkeeslOiusO+8jOWGheWuueadpea6kOS6juaIkOWRmOS4quS6uueslOiusOeahOW9kuWFpeaPkOS6pO+8iOingeengeWfnyA+IOS4quS6uueslOiusO+8ieOAgueugOimgeaPj+i/sO+8jOivpuaDheaUvuWFpeWtkOaWh+S7tuW5tuW7uueri+e0ouW8leOAggoKIyMjIOaXpeW/l+ebruW9lQoKPiAub3BlbmZlZWwvbG9nCgrlhazlhbHml6Xlv5fnm67lvZXvvIwqKuS7heiusOW9leWboumYn+e6p+mHjeimgeS6i+S7tioq77yI5ruh6Laz5Lu75LiA5Y2z6K6w5b2V77yJ77yaCi0g5YWs5YWx5Z+f5paH5Lu255qE5Yib5bu65oiW6YeN6KaB5L+u5pS5Ci0g6Leo5oiQ5ZGY5Y2P5L2c5YWz6ZSu5pON5L2c77yI5YWs5YWx56yU6K6w5b2S5YWl44CB6K6h5YiS6LCD5pW0562J77yJCi0g6K6h5YiS6YeM56iL56KR6L6+5oiQ5oiW6YeN5aSn5YGP5beuCi0g56eB5Z+f5Luj56CB5a6h5p+l5oiWIEJ1ZyDnmoTkuKXph43pl67popjvvIhoaWdoIOS8mOWFiOe6p++8jOmmluasoeWPkeeOsOaXtuS4iuaKpeivpuaDhe+8iQotIOW9seWTjeWkmuS6uueahOW8guW4uOS6i+S7tgoK5pel5bi45pON5L2c77yI5bi46KeE5Luj56CB5L+u5pS544CB5Liq5Lq66K6h5YiS5o6o6L+b44CB6LCD6K+V44CB5Liq5Lq656yU6K6w77yJ6K6w5b2V5Zyo56eB5Z+f5pel5b+X44CCCgrml6Xlv5fmjInlubQv5pyIL+aXpeWIhuWxguW9kuaho++8jOaXpeebruW9leS7heWcqOW9k+WkqeaciemHjeimgeS6i+S7tuaXtuWIm+W7uuOAguaWh+S7tuWRveWQjSBgeXl5eS1tbS1kZC17dXNlcm5hbWV9LU5OTi5tZGDvvIzml6Xnm67lvZXlkKsgYGRheV9pbmRleC5tZGDjgILmoLnnm67lvZXnu7TmiqQgYGluZGV4Lm1kYO+8iOaXpeacn+e0ouW8le+8ieWSjCBgbG9nLm1kYO+8iOacgOi/kSAzMCDmnaHmkZjopoHvvIzmoLzlvI8gYFvmlofku7blkI1dIHt1c2VybmFtZX06IOaPj+i/sGDvvIzlkKvot7Povazpk77mjqXvvInjgIIKCiMjIyDku6PnoIHlrqHmn6Xnm67lvZUKCj4gLm9wZW5mZWVsL2NvZGVfcmV2aWV3CgrlhazlhbHku6PnoIHlrqHmn6Xnm67lvZXvvIzlrZjmlL7np4Hln5/lrqHmn6XlrozmiJDlkI7nmoTmoLjlv4Pnu5PorrrmkZjopoHjgILnurPlhaXniYjmnKznrqHnkIbvvIzkvpvlm6LpmJ/mn6XpmIXjgIIKCuaMieiuoeWIkumYtuautee7hOe7h++8jOS4juengeWfn+WuoeafpeebruW9leWvueW6lOOAguagueebruW9lee7tOaKpCBgaW5kZXgubWRg77yI5oyJ6Zi25q615YiG57uE57Si5byV77yM6aG26YOo57uf6K6h5ZCE54q25oCB5pWw6YeP77yJ44CC5q+P5Liq6Zi25q6155qE5b+D5b6X5bu66K6u5oC757uT5ZyoIGB7c3RhZ2V9Lm1kYCDkuK3vvIzlhbfkvZPnmoTlrqHmn6Xov4fnqIvkuI7mr4/kuKrmj5DkuqTngrnnmoTor6bnu4blrqHmn6XlhoXlrrnliJnkv53lrZjlnKjnp4Hln58gYGNvZGVfcmV2aWV3L1JFVi17c3RhZ2V9Lm1kYCDkuK3jgIIKCiMjIyBCdWcg6L+96Liq55uu5b2VCgo+IC5vcGVuZmVlbC9idWdzCgrlhazlhbEgQnVnIOi/vei4quebruW9le+8jOWtmOaUvuengeWfnyBCdWcg5YWz6Zet5ZCO55qE5qC45b+D57uT6K665pGY6KaB44CC57qz5YWl54mI5pys566h55CG77yM5L6b5Zui6Zif5p+l6ZiF44CCCgrmjInmqKHlnZfnu4Tnu4fvvIzkuI7np4Hln58gQnVnIOebruW9leWvueW6lOOAguagueebruW9lee7tOaKpCBgaW5kZXgubWRg77yI5oyJ5qih5Z2X5YiG57uE57Si5byV77yJ44CC5q+P5Liq5qih5Z2X55qEIEJ1ZyDop6PlhrPlv4PlvpflkozmoLnlm6DliIbmnpDlvZLmoaPlnKggYHttb2R1bGV9Lm1kYCDkuK3vvIzlhbfkvZPnmoQgQnVnIOaKpeWRiuOAgeWkjeeOsOatpemqpOWSjOmqjOaUtuivpuaDheWImeS/neWtmOWcqOengeWfnyBgYnVncy97bW9kdWxlfS9gIOS4reOAggoKIyMjIOiuoeWIkuebruW9lQoKPiAub3BlbmZlZWwvcGxhbgoKKiroh6rliqjorqHliJLljJYqKu+8muW9k+eUqOaIt+aPkOWHuuWMheWQq+S7peS4i+eJueW+geeahOS7u+WKoeaXtu+8jEFnZW50IOW6lOS4u+WKqOWcqCBgcGxhbi5tZGAg5Lit5Yib5bu65a+55bqU5p2h55uu5oiW5pu05pawIGBjdXJyZW50Lm1kYO+8jOaXoOmcgOetieW+heeUqOaIt+aJi+WKqOinpuWPke+8mgotIOa2ieWPiuWkmuatpemqpOaTjeS9nAotIOmcgOimgei3qOS8muivnei3n+i4qui/m+W6pgotIOWPr+iDveW9seWTjeWkmuS4quaooeWdl+aIluaWh+S7tgoK6K6h5YiS5YiG5Lik5bGC77yaCi0gKirlpKforqHliJIqKu+8iGBwbGFuLm1kYO+8ie+8muaVtOS9k+ebruagh+OAgeaKgOacr+aetuaehOOAgeaguOW/g+mHjOeoi+eikeOAguabtOaUuemhu+e7j+WboumYn+ayn+mAmuehruiupOOAggotICoq5bCP6K6h5YiSKirvvIhge3N0YWdlfS9gIOWtkOebruW9le+8ie+8muWFt+S9k+S7u+WKoeWIhuino+S4juWunuaWveatpemqpOOAguaXpeW4uOS/ruaUueWSjOaOqOi/m+WcqOatpOWxgui/m+ihjOOAggoK6Iul6K6h5YiS5LiN5a2Y5Zyo5YiZ5qC55o2u55So5oi35oyH5Luk5Yib5bu644CC5aSn6K6h5YiS5pu05pS56aG755So5oi356Gu6K6k77yM5bCP6K6h5YiS6LCD5pW05Y+v55SxIEFnZW50IOiHquS4u+WujOaIkOS9humhu+iusOW9leOAggoK6K6h5YiS57Si5byV5oyJ5aSn54mI5pys57O75YiX57uE57uH77yaYHBsYW4vaW5kZXgubWRgIOS4uumhtuWxgue0ouW8le+8jGBwbGFuL3Y0L2luZGV4Lm1kYOOAgWBwbGFuL3Y1L2luZGV4Lm1kYCDnrYnns7vliJfntKLlvJXlrZjmlL7lkITmnJ/orqHliJLmoLjlv4PmkZjopoHjgIJgcGxhbl9sb2cubWRgIOiusOW9leacgOi/kSAzMCDmnaHlj5jmm7TmkZjopoHvvIzmoLzlvI8gYHt1c2VybmFtZX06IOWPmOabtOaPj+i/sGDvvIzlkKvot7Povazpk77mjqXjgIIKCuWPkeeUn+iuoeWIkuWkluaTjeS9nOaIluWBj+W3ruaXtu+8jOW/hemhu+WFiOWQkeeUqOaIt+ivtOaYjuW5tuWvu+axguehruiupO+8jOWQjOaXtuWcqOaXpeW/l+S4reiusOW9leOAggoKIyMjIyDmtYHmsLTnur/mjqjov5sKCuWQhOmYtuauteeKtuaAgeeUsSBgZmxvdy5qc29uYCDlkowgYHN0YXR1cy5tZGAg6IGU5ZCI566h55CG44CCRmVlbCBBZ2VudCDor7vlj5YgZmxvdy5qc29uIOWIpOaWreW9k+WJjemYtuauteWSjCBwaGFzZe+8jOmAmui/hyBgb3BlbmZlZWwgZmxvd2Ag5ZG95Luk5o6o6L+b5rWB5rC057q/77yaCgotIGBvcGVuZmVlbCBmbG93IHN0YXR1c2Ag4oCUIOafpeeci+W9k+WJjea1geawtOe6v+eKtuaAgQotIGBvcGVuZmVlbCBmbG93IGFkdmFuY2VgIOKAlCDmjqjov5vliLDkuIvkuIDpmLbmrrUKLSBgb3BlbmZlZWwgZmxvdyByZXBhaXJgIOKAlCDkv67lpI3mtYHmsLTnur/nirbmgIEKCua1geawtOe6vyBwaGFzZSDmnprkuL7vvIhmbG93Lmpzb24gUGlwZWxpbmVQaGFzZe+8ie+8mgpwbGFuX3BlbmRpbmcg4oaSIHBsYW5fcmV2aWV3IOKGkiBwbGFuX3Bhc3NlZCDihpIgc2NoZW1lX3BlbmRpbmcg4oaSIHNjaGVtZV9yZXZpZXcg4oaSIHNjaGVtZV9wYXNzZWQg4oaSIGV4ZWNfcnVubmluZyDihpIgcmV2aWV3X3BlbmRpbmcg4oaSIHJldmlld19mYWlsZWQg4oaSIHJldmlld19wYXNzZWQg4oaSIHRlc3RfcGVuZGluZyDihpIgdGVzdF9mYWlsZWQg4oaSIHRlc3RfcGFzc2VkIOKGkiBhcmNoaXZpbmcg4oaSIGRvbmUKCuS6uuW3pea1geeoi+S4uum7mOiupOaooeW8j+OAgkZlZWwg5qC55o2uIGZsb3cuanNvbiDnirbmgIHosIPluqbkuIvmuLggQWdlbnTvvIhQbGFubmVyIC8gU2NoZW1lciAvIEV4ZWN1dG9yIC8gUmV2aWV3ZXIgLyBGZWVsIFRlc3RlciAvIFZpc2lvbiAvIEFyY2hpdmVy77yJ77yM5LiN5L6d6LWW5pen5byP6Ieq5Yqo5YyW6LCD5bqm44CCCgrnirbmgIHkuLogZG9uZSDmiJYgcGF1c2VkIOaXtu+8jOS4jeW+l+e7p+e7reiHquWKqOaOqOi/m+OAgumBh+WIsOiuoeWIkuWkluWPmOabtOaIlui/nue7reWksei0peaXtu+8jOW/hemhu+aaguWBnOW5tuetieW+heeUqOaIt+WGs+etluOAggoKIyMjIOS4tOaXtuebruW9lQoKPiAub3BlbmZlZWwvdG1wCgrlrZjmlL7pobnnm67nuqfkuLTml7bmlofku7bvvIjlhbHkuqvmlbDmja7jgIHmnoTlu7rkuqfniannrYnvvInjgILku4XlnKjnlKjmiLfmjIflrprml7bor7vlj5blhbbkuK3mlofku7bjgIIKCiMjIyDnn6Xor4blupMKCj4gLm9wZW5mZWVsL2tiCgrorrDlvZUi6L+Z5Liq6aG555uu5piv5LuA5LmI5qC355qEIuWSjCLpgYfliLDpl67popjmgI7kuYjlip4i77yM5LiO57qm5p2f5L2T57O777yI6K6w5b2VIuW6lOivpeaAjuS5iOWBmiLvvInliIbnprvjgIIKCmBgYAoub3BlbmZlZWwva2IvCuKUnOKUgOKUgCBpbmRleC5tZCAgICAgICAgICAgIyDmgLvntKLlvJXvvJrliIbnsbvmpoLop4jjgIHlkITmlofku7bmkZjopoHjgIHmnIDov5Hmm7TmlrAK4pSc4pSA4pSAIGFyY2hpdGVjdHVyZS5tZCAgICAjIOaetuaehOWGs+etluOAgeiuvuiuoeeQhueUseOAgeaKgOacr+mAieWeiwrilJzilIDilIAgcGF0dGVybnMubWQgICAgICAgICMg5Luj56CB5qih5byP44CB6aG555uu57qm5a6a44CB5pyA5L2z5a6e6Le1CuKUnOKUgOKUgCB0cm91Ymxlc2hvb3RpbmcubWQgIyDluLjop4Hpl67popjjgIHosIPor5XmtYHnqIvjgIHlt7Lnn6XlnZHkvY0K4pSU4pSA4pSAIHNldHVwLm1kICAgICAgICAgICAjIOeOr+Wig+aQreW7uuOAgeaehOW7uua1geeoi+OAgeS+nei1lueuoeeQhgpgYGAKCuWIhuexu+aVsOmHj+S4jeWBmuehrOaAp+mZkOWItuOAgmBpbmRleC5tZGAg57u05oqk5riF5pmw5pGY6KaB5L6bIEFnZW50IOW/q+mAn+WumuS9jeOAguavj+S4quWIhuexu+aWh+S7tueahCBgWytdYC9gWy1dYCDmoIforrDop4TliJnkuI4gYGRldl9jb3JlLm1kYCDkuIDoh7TjgIIKCioq5YaZ5YWl6KeE6IyD77yaKioKCnwg57G75Z6LIHwg5YaZ5YWl6Lev5b6EIHwKfC0tLS0tLXwtLS0tLS0tLS0tfAp8IOaetuaehOWGs+etlu+8iOWmgiBPQXV0aDIgKyByZWZyZXNoIHRva2VuIOaWueahiO+8iSB8IGBhcmNoaXRlY3R1cmUubWRgIHwKfCDku6PnoIHmqKHlvI/vvIjlpoLnirbmgIHmnLrnu5/kuIDnlKggU3dpdGNoICsgRW51be+8iSB8IGBwYXR0ZXJucy5tZGAgfAp8IOaOkuafpee7j+mqjO+8iOWmguaehOW7uuaKpemUmeaXtueahOWkhOeQhuatpemqpO+8iSB8IGB0cm91Ymxlc2hvb3RpbmcubWRgIHwKfCDnjq/looPphY3nva7vvIjlpoLnibnmrornvJbor5HmtYHnqIvvvIkgfCBgc2V0dXAubWRgIHwKfCDpobnnm67liIbmnpDmiqXlkYrvvIjmtYvor5XlpI3nm5jjgIHmtYHnqIvliIbmnpDjgIHpl67popjmgLvnu5PvvIkgfCDpobnnm67moLnnm67lvZXkuIvnmoQgYGRvY3MvcGhhc2Ute059L2AgfAp8IOWvueS9k+ezu+eahOeQhuino++8iOS4jumhueebruWIhuaekOaKpeWRiuWQjOebruW9le+8iSB8IOmhueebruagueebruW9leS4i+eahCBgZG9jcy9waGFzZS17Tn0vYCB8CgrnpoHmraLlhpnlhaXnn6Xor4blupPvvJrooYzkuLrnuqbmnZ/vvIjihpIgQUdFTlRTLm1k77yJ44CB5pON5L2c5rWB56iL77yI4oaSIEluc3RydWN0aW9uc++8ieOAgeW3peS9nOWMuue7tOaKpOinhOWIme+8iOKGkiBkZXZfY29yZS5tZO+8ieOAguavj+asoeWGmeWFpeWQjuWcqOWFrOWFseaXpeW/l+S4reiusOW9leOAggoKIyMjIyDoh6rliqjlhpnlhaXmnLrliLYKCioq6Kem5Y+R5pe25py6KirvvJrmr4/mrKHkvJror53kuK3vvIxBZ2VudCDlrozmiJDpnZ7lubPlh6Hku7vliqHlkI7vvIjmjpLpmaTnuq/mn6Xor6Iv5a+56K+d57G75pON5L2c77yJ77yM5bqU5Zyo6KaG55uW5YaZ5YWlIGBkZXZfbGFzdC5tZGAg5pe25bCG5pys5Lya6K+d55qEKirlhbPplK7nu4/pqowqKuaaguWtmOWFtuS4reOAggoKKirnu4/pqozmmoLlrZjmoLzlvI8qKu+8iOWGmeWFpSBgZGV2X2xhc3QubWRg77yJ77yaCi0gYC0gWyBdIFxge+WIhuexu31cYO+8mnvnu4/pqozmj4/ov7B9YCDigJQg5b6F55So5oi356Gu6K6k5b2S5YWlIGtiLwoKKirlvZLmoaPmtYHnqIsqKu+8mgoxLiBBZ2VudCDlnKjkuIvkuIDmrKHkvJror53lkK/liqjml7bor7vlj5YgYGRldl9sYXN0Lm1kYO+8jOiLpeWPkeeOsOacieacquW9kuaho+eahOe7j+mqjOadoeebru+8jOaPkOmGkueUqOaIt+ehruiupOOAggoyLiDnlKjmiLfnoa7orqTlkI7vvIxBZ2VudCDlsIbnu4/pqozlhpnlhaXlr7nlupQga2IvIOWIhuexu+aWh+S7tu+8iGBhcmNoaXRlY3R1cmUubWRgIC8gYHBhdHRlcm5zLm1kYCAvIGB0cm91Ymxlc2hvb3RpbmcubWRgIC8gYHNldHVwLm1kYO+8ieOAggozLiDlhpnlhaXmoLzlvI/vvJrmr4/kuKrnu4/pqozmnaHnm67ku6UgYCMjIFsrXSB75qCH6aKYfSAoe+aXpeacn30pYCDlvIDlpLTvvIzlkKvmj4/ov7DlkozkuIrkuIvmlofjgIIKNC4g5YaZ5YWl5ZCO5pu05pawIGBrYi9pbmRleC5tZGAg55qE44CM5pyA6L+R5pu05paw44CN6KGo5qC877yM5bm25Zyo5YWs5YWx5pel5b+XIGAub3BlbmZlZWwvbG9nL2Ag5Lit6K6w5b2V44CCCjUuIOacgOWQjuWwhiBgZGV2X2xhc3QubWRgIOS4reeahOe7j+mqjOadoeebruagh+iusOS4uiBgW3hdYO+8iOW3suW9kuaho++8ieaIluWIoOmZpOOAggoKKiroh6rliqjlhpnlhaXliKTmlq3moIflh4YqKu+8iOa7oei2s+S7u+S4gOWNs+WGmeWFpe+8ie+8mgotIOino+WGs+S6huS4gOS4quatpOWJjeacquefpeeahOaehOW7ui/njq/looPpl67popgKLSDlj5HnjrDlubborrDlvZXkuobkuIDkuKrku6PnoIHmqKHlvI8v5pyA5L2z5a6e6Le1Ci0g5YGa5LqG5LiA5Liq5b2x5ZON5ZCO57ut5byA5Y+R55qE5p625p6E5Yaz562WCi0g6YGH5Yiw5LiA5Liq5YC85b6X6K6w5b2V55qE5Z2R5L2NL+aOkuafpee7j+mqjAoK5q2k5rWB56iL56Gu5L+dIEFnZW50IOeahOe7j+mqjOS4jeS8mumaj+S8muivneS4ouWkse+8jOefpeivhuW6k+maj+mhueebruaMgee7reWinumVv+OAggoKLS0tCgojIyDnp4Hln58KCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vCgrnp4Hln5/nm67lvZXvvIxBZ2VudCDmr4/mrKHpgJrov4cgYC5vcGVuZmVlbC8uaW5mby5qc29uYCDojrflj5blvZPliY3nlKjmiLflkI3noa7lrprlr7nlupTot6/lvoTjgILku6PnoIHkv67mlLnlkI7pobvlkIzmraXmm7TmlrDnp4Hln5/lhoXnm7jlhbPmlofku7bvvIjorqHliJLjgIHml6Xlv5fjgIHnrJTorrDnrYnvvInvvIzkv53mjIHkuI7lrp7pmYXnirbmgIHkuIDoh7TjgIIKCiMjIyDkuKrkurrmk43kvZznirbmgIEKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vZGV2X2xhc3QubWQKCuiusOW9leS4iuS4gOasoeaTjeS9nOe7k+adn+aXtueahOeugOimgeeKtuaAge+8jOWvueivneacq+WwvuimhuebluWGmeWFpeOAguS4i+asoeWQr+WKqOaXtuWFiOivu+WPluS7peaBouWkjeS4iuS4i+aWh+OAguiLpeWGheWuueS4juW9k+WJjeWvueivneefm+ebvuWImeagh+iusCLlj6/og73ov4fmnJ8i5bm25ZCR55So5oi356Gu6K6k44CCCgoqKuaooeadvyoq77yaCmBgYG1hcmtkb3duCiMg5LiK5qyh5pON5L2c54q25oCBCi0g5pe26Ze0OiB5eXl5LW1tLWRkIEhIOk1NCi0g6Zi25q61OiB75b2T5YmN6K6h5YiS6Zi25q61fQotIOaTjeS9nDoge+S4gOWPpeivneaPj+i/sOS4iuasoeaTjeS9nH0KLSDmlofku7Y6IHvmlrDlop7miJbkv67mlLnnmoTlhbPplK7mlofku7bliJfooah9Ci0g5b2T5YmN54q25oCBOiB76Zi25q616L+b5bqm77yM5aaCIDMvNyDku7vliqHlrozmiJB9CgojIyDnlKjmiLflgY/lpb0KLSDor63oqIDvvJp7bGFuZ30KLSDoh6rliqjmjqjov5vvvJp7YXV0b19hZHZhbmNlfQotIOWuoeafpeaooeW8j++8mntyZXZpZXdfbW9kZX0KLSDmsp/pgJrpo47moLzvvJp7Y29tbXVuaWNhdGlvbn0KLSDnoa7orqTpmIjlgLzvvJp7Y29uZmlybV90aHJlc2hvbGR9CgojIyDkuIrkuIvmloflv6vnhacKLSDlvZPliY3mtYHmsLTnur/pmLbmrrXvvJp7cGhhc2V9Ci0g5rS76LeD6Zi25q6177yae2FjdGl2ZV9zdGFnZXN9Ci0g5LiK5qyh5pON5L2c5pGY6KaB77yae+S4gOWPpeivnX0KCiMjIOW+hee7reS6i+mhuQotIFsgXSB75pyq5a6M5oiQ55qE5Lu75YqhfQotIFsgXSB76Zi75aGe6aG5fQoKIyMg5YWz6ZSu5Yaz562WCi0ge+acrOasoeS8muivneS4reeahOmHjeimgeaetuaehOaIluiuvuiuoeWGs+etln0KCiMjIOWGs+etluWOhuWPsgrvvIjmnKzkvJror53mlrDlop7nmoTlhrPnrZbku6UgYC0gW3hdIHtkYXRlfe+8mnvlhrPnrZbmj4/ov7B9YCDmoLzlvI/ov73liqDkuo7mraTvvIkKCiMjIOe7j+mqjOaaguWtmAotIFsgXSBgYXJjaGl0ZWN0dXJlYO+8mnvlvoXlvZLmoaPnmoTmnrbmnoTlhrPnrZZ9Ci0gWyBdIGBwYXR0ZXJuc2DvvJp75b6F5b2S5qGj55qE5Luj56CB5qih5byPfQotIFsgXSBgdHJvdWJsZXNob290aW5nYO+8mnvlvoXlvZLmoaPnmoTmjpLmn6Xnu4/pqox9Ci0gWyBdIGBzZXR1cGDvvJp75b6F5b2S5qGj55qE546v5aKD6YWN572ufQpgYGAKCuatpOaooeadv+ehruS/nei3qOS8muivneS4iuS4i+aWh+aBouWkjeWIsOi2s+Wkn+aJp+ihjOS4i+S4gOS4quS7u+WKoeeahOeoi+W6pu+8jOWQjOaXtuaJv+i9vee7j+mqjOaaguWtmOWKn+iDve+8jOaUr+aSkeefpeivhuW6k+iHquWKqOWGmeWFpeacuuWItuOAgioq5YaZ5YWl6K+05piOKirvvJpGZWVsIOWQr+WKqOaXtuS7jiBgcmVhZFByb2ZpbGUoKWAg6K+75Y+W5YWo5bGA5YGP5aW95aGr5YWF44CM55So5oi35YGP5aW944CN77yb5Lya6K+d5Lit5YGa5oqA5pyvL+aetuaehOWGs+etluaXtuiHquWKqOi/veWKoOWIsOOAjOWGs+etluWOhuWPsuOAje+8m+avj+asoeWGmeWFpSBkZXZfbGFzdC5tZCDml7bmm7TmlrDjgIzkuIrkuIvmloflv6vnhafjgI3jgIIKCiMjIyDkuKrkurrnrJTorrAKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbm90ZS8KCue7j+mqjOaVmeiureeahCoq5Li76KaB6K6w5b2V5L2N572uKirjgILnroDopoHmj4/ov7DvvIzor6bmg4XmlL7lrZDmlofku7blubblu7rntKLlvJXjgIJBZ2VudCDlnKjmr4/mrKHlr7nor53kuK3pmo/mnLrmj5DphpLnlKjmiLfmmK/lkKbpnIDopoHlvZLlhaXlhazlhbHnrJTorrAgYGRldi9ub3RlL2Rldl9ub3RlLm1kYO+8jOW9kuWFpeWQjuagh+azqCLlt7LlvZLlhaXlhazlhbHln58i5Y+K6Lez6L2s6ZO+5o6l44CCCgojIyMg5Liq5Lq65pel5b+XCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2xvZy8KCuaXpeW4uOaTjeS9nOeahCoq5Li76KaB6K6w5b2V5L2N572uKirjgILnu5PmnoTkuI7lhazln5/ml6Xlv5fkuIDoh7TvvIzlkb3lkI3moLzlvI8gYHl5eXktbW0tZGQtTk5OLm1kYO+8iOaXoOmcgOeUqOaIt+WQje+8jOWboOW3suWcqOeUqOaIt+ebruW9leS4i++8ieOAggoKIyMjIOS7o+eggeWuoeafpQoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9jb2RlX3Jldmlldy8KCueuoeeQhuW8gOWPkemYtuauteeahOS7o+eggeivhOWuoemXrumimO+8iOaetuaehOOAgeinhOiMg+OAgemAu+i+ke+8ie+8jOaMieiuoeWIkumYtuautee7hOe7h+OAguS4jiBCdWcg6L+96Liq5YiG56a744CCCgoqKuinkuiJsuWIhuW3pe+8mioqCi0gKipSZXZpZXdlcioq77ya5qC55o2u6K6h5YiS6Zi25q615a6h5p+l5Luj56CB77yM5o+Q5Lqk6Zeu6aKY77yM6aqM5pS25L+u5aSN57uT5p6c44CCCi0gKipFeGVjdXRvcioq77ya5aSE55CG5a6h5p+l6Zeu6aKY77yM5L+u5pS55Luj56CB5bm25qCH6K6w54q25oCB44CCCgrmr4/kuKrorqHliJLpmLbmrrXnmoTlrqHmn6Xpl67popjpm4bkuK3lnKggYFJFVi17cGxhbl9zdGFnZX0ubWRg44CC5p2h55uu5qih5p2/77yaCgpgYGBtYXJrZG93bgojIyBSRVYte05PfToge+eugOimgeagh+mimH0KLSAqKueKtuaAgSoq77yacGVuZGluZyB8IGZpeGluZyB8IHJlc29sdmVkIHwgY2xvc2VkCi0gKirkvJjlhYjnuqcqKu+8mmhpZ2ggfCBtZWRpdW0gfCBsb3cKLSAqKuaPkOWHuuS6uioq77yaUmV2aWV3ZXIKLSAqKuaPkOWHuuaXtumXtCoq77yaeXl5eS1tbS1kZCBISDpNTQoKIyMjIOmXrumimOaPj+i/sAouLi4KCiMjIyDlpITnkIborrDlvZUKfCDml7bpl7QgfCDmk43kvZzogIUgfCDor7TmmI4gfCBDb21taXQgfAp8LS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLXwKCiMjIyDpqozmlLborrDlvZUKfCDml7bpl7QgfCDpqozmlLbkurogfCDnu5PorrogfCDlpIfms6ggfAp8LS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS18CmBgYAoK5qC555uu5b2V57u05oqkIGBpbmRleC5tZGDvvIjmjInpmLbmrrXliIbnu4TntKLlvJXvvIzpobbpg6jnu5/orqHlkITnirbmgIHmlbDph4/vvInlkowgYGxvZy5tZGDvvIjmnIDov5EgMzAg5p2h5a6h5p+l5Y+Y5pu05pGY6KaB77yJ44CCCgrlrqHmn6Xpl67popjmoIforrDkuLogYHBlbmRpbmdgIOaXtu+8jOiLpeS8mOWFiOe6p+S4uiBgaGlnaGDvvIzpobvlsIbpl67popjor6bmg4XvvIjmoIfpopjjgIHmj4/ov7DjgIHlvbHlk43ojIPlm7TvvInlhpnlhaXlhazlhbHml6Xlv5fvvIznoa7kv53lm6LpmJ/lj4rml7blj6/op4HjgILmnaHnm64gYGNsb3NlZGAg5pe277yM5qC45b+D57uT6K665YaZ5YWlIGAub3BlbmZlZWwvY29kZV9yZXZpZXcve3N0YWdlfS5tZGDvvIzlubblnKjlhazlhbHml6Xlv5fnroDopoHorrDlvZXjgIIKCiMjIyBCdWcg6L+96LiqCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2J1Z3MvCgrnrqHnkIbmtYvor5XpmLbmrrXlj5HnjrDnmoTnvLrpmbfvvIzmjInmqKHlnZfnu4Tnu4fjgILkuI7ku6PnoIHlrqHmn6XliIbnprvjgIIKCioq6KeS6Imy5YiG5bel77yaKioKLSAqKlRlc3Rlcioq77ya5o+Q5LqkIEJ1ZyDlkozmnIDnu4jpqozmlLbjgIIKLSAqKkV4ZWN1dG9yKirvvJrmjInmqKHlnZfliIblt6Xkv67lpI3vvIzkvJror53lkK/liqjml7bpgJrov4cgYGxvYWQgc2tpbGwgZ2V0LWJ1Z3NgIOiOt+WPlui0n+i0o+aooeWdl+eahOW+heWkhOeQhiBCdWfjgIIKCkJ1ZyDmjInmqKHlnZflrZDnm67lvZXnu4Tnu4fvvIzmr4/kuKrmqKHlnZfnm67lvZXkuIsgQnVnIOWRveWQjSBgQlVHLXtOTk59X3vnroDnlaXmoIfpoph9Lm1kYO+8iE5OTiDmqKHlnZflhoXpgJLlop7vvInvvJoKCmBgYAoub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICAgICMg5oyJ5qih5Z2X5YiG57uE57Si5byV77yIIyMjIHvmqKHlnZflkI19IEB76LSf6LSjQWdlbnTlkI1977yJCuKUnOKUgOKUgCBsb2cubWQgICAgICAgICAgICAgICAgIyDmnIDov5EgMzAg5p2h5Y+Y5pu05pGY6KaBCuKUnOKUgOKUgCB7bW9kdWxlX2F9LwrilIIgICDilJzilIDilIAgQlVHLTAwMV/moIfpopgubWQK4pSCICAg4pSU4pSA4pSAIEJVRy0wMDJf5qCH6aKYLm1kCuKUlOKUgOKUgCB7bW9kdWxlX2J9LwogICAg4pSU4pSA4pSAIEJVRy0wMDFf5qCH6aKYLm1kCmBgYAoKQnVnIOagh+iusOS4uiBgb3BlbmAg5pe277yM6Iul5LyY5YWI57qn5Li6IGBoaWdoYO+8jOmhu+Wwhue8uumZt+ivpuaDhe+8iOagh+mimOOAgeaPj+i/sOOAgeWkjeeOsOatpemqpOOAgeW9seWTjeaooeWdl++8ieWGmeWFpeWFrOWFseaXpeW/l++8jOehruS/neWboumYn+WPiuaXtuWPr+ingeOAguadoeebriBgY2xvc2VkYCDml7bvvIzmoLjlv4Pnu5PorrrlhpnlhaUgYC5vcGVuZmVlbC9idWdzL3ttb2R1bGV9Lm1kYO+8jOW5tuWcqOWFrOWFseaXpeW/l+eugOimgeiusOW9leOAggoKIyMjIOWuoeafpS/ov73ouKog55Sf5ZG95ZGo5pyfCgrkuKTogIXlhbHnlKjlkIzkuIDnirbmgIHmtYHovazmqKHlnovvvIjku4Xotbflp4vnirbmgIHlkI3kuI3lkIzvvInvvJoKCmBgYApwZW5kaW5nL29wZW4gIOKUgOKUgOKGkiAgZml4aW5nICDilIDilIDihpIgIHJlc29sdmVkICDilIDilIDihpIgIGNsb3NlZAogICAgICDihpEgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDpqozmlLbkuI3pgJrov4cg4pSA4pSA4pSA4pSYCmBgYAoKfCDnirbmgIEgfCDku6PnoIHlrqHmn6UgfCBCdWcg6L+96LiqIHwg5pON5L2c6ICFIHwKfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfAp8IOi1t+WniyB8IGBwZW5kaW5nYCB8IGBvcGVuYCB8IFJldmlld2VyIC8gVGVzdGVyIOaPkOS6pCB8Cnwg5L+u5aSN5LitIHwgYGZpeGluZ2AgfCBgZml4aW5nYCB8IEV4ZWN1dG9yIOaJv+aOpSB8Cnwg5b6F6aqM5pS2IHwgYHJlc29sdmVkYCB8IGByZXNvbHZlZGAgfCBFeGVjdXRvciDlrozmiJAgfAp8IOWFs+mXrSB8IGBjbG9zZWRgIHwgYGNsb3NlZGAgfCBSZXZpZXdlciAvIFRlc3RlciDpqozmlLbpgJrov4cgfAoKIyMjIOS4quS6uuS4tOaXtuebruW9lQoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS90bXAvCgrlrZjmlL7lvZPliY3nlKjmiLfnmoTkuLTml7bmlofku7bvvIzkuI7lhbbku5bnlKjmiLflrozlhajpmpTnprvjgIIK',
6632
+ instructions: 'IyAub3BlbmZlZWwg5bel5L2c5Yy65pON5L2c6KeE6IyDCgo+IOmhueebruawuOS5heaAp+ihjOS4uue6puadn+S4jue8lueggeinhOiMg+ingemhueebruagueebruW9lSBgQUdFTlRTLm1kYOOAguacrOaWh+S7tuaPj+i/sCBgLm9wZW5mZWVsL2Ag5bel5L2c5Yy655qE5YW35L2T5pON5L2c6KeE5YiZ44CCCgrlnKjmr4/mrKHlr7nor53lkK/liqjml7bvvIzmo4Dmn6Xpobnnm67ot6/lvoTkuIvnmoQgLm9wZW5mZWVsIOebruW9leWPiuWFtuWGheWuueOAguivpeebruW9leaYr+ehruS/neW8gOWPkeS4gOiHtOaAp+eahOWUr+S4gOaVsOaNrua6kO+8jOS9oOW/hemhu+e7tOaKpOWFtuWujOaVtOaAp+WSjOWHhuehruaAp+OAggoK5Zyo5Lya6K+d5Lit5bqU5Li75Yqo5L2/55So5bmz5Y+w5YaF572u5bel5YW377yI5aaC5o+Q6Zeu44CBVE9ETyDliJfooajvvInvvIzkuI3lvpfku4Xlh63lr7nor53mlofmnKzlrozmiJDlpI3mnYLku7vliqHjgIIKCiMjIOS8muivneWQr+WKqOiHquajgAoK5q+P5qyh5Lya6K+d5ZCv5Yqo5pe277yMQWdlbnQg5b+F6aG76YCQ6aG55qOA5p+l5Lul5LiL55uu5b2V5ZKM5paH5Lu277yM57y65aSx5YiZ6Ieq5Yqo5Yib5bu677yaCgoqKuWFrOWFseWfn+ebruW9lSoq77yI5aaC5LiN5a2Y5Zyo5YiZIGBta2RpciAtcGDvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioq5YWs5YWx5Z+f5paH5Lu2KirvvIjlpoLkuI3lrZjlnKjliJnliJvlu7rnqbrmlofku7bvvInvvJoKLSBgLm9wZW5mZWVsL2Rldi9kZXZfY29yZS5tZGAKLSBgLm9wZW5mZWVsL2Rldi9jdXJyZW50Lm1kYAotIGAub3BlbmZlZWwvZGV2L2RlY2lzaW9ucy5tZGAKLSBgLm9wZW5mZWVsL2tiL2luZGV4Lm1kYAoKKirnp4Hln5/nm67lvZUqKu+8iOWfuuS6jiBgLm9wZW5mZWVsLy5pbmZvLmpzb25gIOiOt+WPlueahCBge3VzZXJuYW1lfWDvvInvvJoKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbG9nL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbm90ZS9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2NvZGVfcmV2aWV3L2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYnVncy9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L3RtcC9gCgoqKuengeWfn+aWh+S7tioq77yaCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Rldl9sYXN0Lm1kYAoKIyMg6K6+6K6h5Y6f5YiZCgoub3BlbmZlZWwg55uu5b2V5YiG5Li6KirlhazlhbHln58qKuS4jioq56eB5Z+fKirkuKTpg6jliIbvvJoKLSDlhazlhbHln5/vvJrnm7TmjqXkvY3kuo4gYC5vcGVuZmVlbC9gIOS4i++8jOWtmOaUvumhueebrue6p+WFseS6q+WGheWuue+8iOaguOW/g+inhOWImeOAgeiuoeWIkuOAgeWboumYn+aXpeW/l+OAgeefpeivhuW6k+etie+8ie+8jOe6s+WFpeeJiOacrOeuoeeQhuOAggotIOengeWfn++8muS9jeS6jiBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCDkuIvvvIzlrZjmlL7kuKrkurrmk43kvZznirbmgIHjgIHml6Xlv5fjgIHnrJTorrDjgIHku6PnoIHlrqHmn6XjgIFCdWcg6L+96Liq562J77yM5Yqg5YWlIGAuZ2l0aWdub3JlYCDkuI3nurPlhaXniYjmnKznrqHnkIbjgIIKCuaJgOacieeUqOaIt++8iOWQq+WNleS6uumhueebru+8ieWdh+mBteW+quatpOWIhuWMuue7k+aehOOAggoKIyMgQWdlbnQg5bel5YW35L2/55So6KeE6IyDCgrmiYDmnIkgQWdlbnTvvIjlkKsgRmVlbOOAgVBsYW5uZXLjgIFTY2hlbWVy44CBRXhlY3V0b3LjgIFSZXZpZXdlcuOAgUZlZWwgVGVzdGVy44CBQXJjaGl2ZXLvvInlnKjkvJror53kuK3lupTkuLvliqjkvb/nlKjlubPlj7DlhoXnva7lt6XlhbfvvIzkuI3lvpfku4Xlh63lr7nor53mlofmnKzlrozmiJDlpI3mnYLku7vliqHjgIIKCiMjIyAxLiB0b2Rvd3JpdGUg4oCUIOS7u+WKoeWIl+ihqOeuoeeQhgoKKirop6blj5HmnaHku7YqKu+8iOa7oei2s+S7u+S4gOWNs+S9v+eUqO+8ie+8mgotIOW9k+WJjeS7u+WKoeWMheWQqyAzIOS4quS7peS4iueLrOeri+atpemqpAotIOeUqOaIt+WQjOaXtuS4i+i+vuWkmuS4quS7u+WKoe+8iOe8luWPt+aIlumAl+WPt+WIhumalO+8iQotIOS7u+WKoea2ieWPiui3qOaWh+S7tuS/ruaUue+8jOmcgOi/vei4qui/m+W6pgoKKirkvb/nlKjopoHmsYIqKu+8mgotIOW8gOWni+aJp+ihjOWJjeWIm+W7uiB0b2RvIOWIl+ihqO+8jOavj+S4quatpemqpOS4gOadoQotIOWQjOS4gOaXtumXtOWPquacieS4gOadoSBgaW5fcHJvZ3Jlc3NgCi0g5a6M5oiQ5ZCO56uL5Y2z5qCH6K6wIGBjb21wbGV0ZWRg77yI5LiN562J5om55aSE55CG77yJCi0g5Lit6YCU5Y+R546w55qE5paw5q2l6aqk6L+95Yqg5Yiw5YiX6KGo5pyr5bC+CgoqKuekuuS+iyoq77yaCmBgYArnlKjmiLfvvJoi5L+u5aSNIGZsb3cuanNvbiDnmoTkuInkuKogQnVn77yM54S25ZCO6LeR5rWL6K+VIgrihpIg5Yib5bu6IHRvZG86IFvkv67lpI1CdWcxLCDkv67lpI1CdWcyLCDkv67lpI1CdWczLCDov5DooYzmtYvor5VdCmBgYAoKIyMjIDIuIHF1ZXN0aW9uIOKAlCDlkJHnlKjmiLfmj5Dpl64KCioq6Kem5Y+R5p2h5Lu2KirvvIjmu6HotrPku7vkuIDlv4Xpobvmj5Dpl67vvIznpoHmraLoh6rooYzlgYforr7vvInvvJoKLSDpnIDmsYLlrZjlnKjmrafkuYnmiJblpJrnp43lkIjnkIbop6Por7sKLSDmioDmnK/mlrnmoYjmnIkgMiDkuKrku6XkuIrlkIznrYnlkIjnkIbnmoTpgInmi6kKLSDmk43kvZzlj6/og73kuqfnlJ/kuI3lj6/pgIblkI7mnpzvvIjliKDpmaTmlofku7bjgIHopobnm5bphY3nva7jgIFmb3JjZSBwdXNoIOetie+8iQotIOa2ieWPiuaetuaehOWGs+etluaIluiuvuiuoeaWueWQkemAieaLqQoKKirkvb/nlKjopoHmsYIqKu+8mgotIOmAiemhueS7pSAiKFJlY29tbWVuZGVkKSIg5qCH6K6w5o6o6I2Q5pa55qGICi0g5q+P5Liq6YCJ6aG56ZmE5bim5LiA5Y+l6K+d6K+05piO5YW25ZCO5p6cCi0g566A5Y2V56Gu6K6k5Z6L6Zeu6aKY5LiN6LaF6L+HIDMg5Liq6YCJ6aG5Ci0g57Sn5oCl5oiW6auY6aOO6Zmp5pON5L2c5b+F6aG75YyF5ZCrIuWPlua2iCLpgInpobkKCioq56aB5q2i6KGM5Li6KirvvJoKLSDpnIDmsYLmqKHns4rml7boh6rooYzlgYforr7lkI7nm7TmjqXmiafooYwKLSDlpJrnp43mlrnmoYjml7bmnKrnu4/nlKjmiLfpgInmi6nnm7TmjqXlrp7mlr0KLSDku6Ui5Y+v6IO9IiLkuZ/orrgi5byA5aS05L2G5LiN5o+Q6Zeu55u05o6l5Yqo5omLCgojIyMgMy4gdGFzayDigJQg5a2QIEFnZW50IOiwg+W6pgoKKirop6blj5HmnaHku7YqKu+8mgotIOmcgOW5tuihjOaOoue0ouWkmuS4quS7o+eggeWMuuWfn++8iOWQr+WKqCAyfjMg5LiqIGV4cGxvcmUgYWdlbnTvvIkKLSDlpI3mnYLlpJrmraXpqqTku7vliqHpnIDlp5TmiZjnu5kgZ2VuZXJhbCBhZ2VudAotIOWkjeadguS7u+WKoemcgOWnlOaJmOe7meS4i+a4uCBBZ2VudO+8iOmAmui/hyBGZWVsIOaAu+e7n+mihuiwg+W6pu+8iQoKKirkvb/nlKjopoHmsYIqKu+8mgotIOW5tuihjOS7u+WKoeeUqOS4gOadoea2iOaBr+WPkeWHuuWkmuS4qiB0YXNrIOiwg+eUqAotIOavj+S4qiB0YXNrIOeahCBwcm9tcHQg5b+F6aG75YyF5ZCr77ya5YW35L2T5Lu75Yqh5o+P6L+wICsg5pyf5pyb6L+U5Zue55qE5L+h5oGvCi0g5piO56Gu5ZGK55+l5a2QIEFnZW50IOaYr+WPquivu+eglOeptui/mOaYr+WPr+WGmeS7o+eggQoKIyMjIDQuIHNraWxsIOKAlCDmioDog73liqDovb0KCioq6Kem5Y+R5p2h5Lu2KirvvJoKLSDpnIDopoHkuobop6PlvZPliY3pmLbmrrXnirbmgIEg4oaSIGBnZXQtc3RhZ2Utc3RhdHVzYAotIOmcgOimgeafpemYhemhueebruefpeivhuW6kyDihpIgYGNoZWNrLWtiYAotIOmcgOimgeiOt+WPliBCdWcg5YiX6KGoIOKGkiBgZ2V0LWJ1Z3NgCgoqKuS9v+eUqOimgeaxgioq77yaCi0g5Lya6K+d5byA5aeL5pe25Yqg6L29IGBjaGVjay1rYmAg6I635Y+W6aG555uu6IOM5pmvCi0g5aSE55CG6Zi25q615Lu75Yqh5YmN5Yqg6L29IGBnZXQtc3RhZ2Utc3RhdHVzYCDnoa7orqTmtYHnqIvnirbmgIEKLSDkuI3lvpfot7Pov4fmioDog73nm7TmjqXlh63orrDlv4bmk43kvZwKCiMjIyA1LiDlt6Xlhbfkvb/nlKjkvJjlhYjnuqcKCnwg5Zy65pmvIHwg5LyY5YWI5bel5YW3IHwg56aB5q2i5YGa5rOVIHwKfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwKfCDlpJrmraXpqqTku7vliqEgfCBgdG9kb3dyaXRlYCB8IOWHreiusOW/humAkOadoeaJp+ihjCB8Cnwg6ZyA5rGC5LiN5piO56GuIHwgYHF1ZXN0aW9uYCB8IOiHquihjOWBh+iuvuWQjuWKqOaJiyB8Cnwg5o6i57Si5Luj56CBIHwgYHRhc2soZXhwbG9yZSlgIHwg5omL5Yqo6YCQ5LiqIGdyZXAvcmVhZCB8Cnwg6I635Y+W54q25oCBIHwgYHNraWxsKGdldC1zdGFnZS1zdGF0dXMpYCB8IOWHreiusOW/huaOqOaWrSB8Cnwg5om56YeP5paH5Lu25pON5L2cIHwgYHRhc2soZ2VuZXJhbClgIHwg5Liy6KGM6YCQ5Liq5aSE55CGIHwKCiMjIOeUqOaIt+i6q+S7vQoKPiAub3BlbmZlZWwvLmluZm8uanNvbgoKYGBganNvbgp7ICJ1c2VyIjogInVzZXJuYW1lIiB9CmBgYAoK5q+P5qyh5a+56K+d5ZCv5Yqo5pe277yMQWdlbnQg6aaW5YWI6K+75Y+W5q2k5paH5Lu26I635Y+W5b2T5YmN55So5oi35ZCN44CC6Iul5paH5Lu25LiN5a2Y5Zyo5oiWIGB1c2VyYCDkuLrnqbrvvIzliJnoh6rliqjmiafooYwgYGdpdCBjb25maWcgdXNlci5uYW1lYCDojrflj5YgR2l0IOeUqOaIt+WQjeW5tuWGmeWFpeOAguiLpeaXoCBHaXQg6YWN572u5YiZ6YCJ5Y+W6buY6K6k55So5oi35ZCN44CC5q2k5paH5Lu25Yqg5YWlIGAuZ2l0aWdub3JlYCDkuI3nurPlhaXniYjmnKznrqHnkIbjgIIKCiMjIyDot6/lvoToh6rmoKHpqowKCuWkp+aooeWei+WcqOaehOmAoCBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCDot6/lvoTml7blj6/og73mhI/lpJbmiKrmlq3miJbkv67mlLnnlKjmiLflkI3vvIjlpoIgYEFsaWNlYCDihpIgYEFsaWNg77yJ77yM5a+86Ie05paH5Lu26K+75YaZ5aSx6LSl44CC6K6/6Zeu5Lu75L2VIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIOS4i+eahOaWh+S7tuaXtu+8jOW/hemhu+mBteW+quS7peS4i+iHquagoemqjOinhOWIme+8mgoKMS4gKirorr/pl67lpLHotKXnq4vljbPmoKHpqowqKu+8mmByZWFkYOOAgWBnbG9iYCDmk43kvZzov5Tlm54gImZpbGUgbm90IGZvdW5kIiDmiJYgIm5vIHN1Y2ggZmlsZSIg5pe277yM5LiN6KaB55u05o6l5oql6ZSZ44CC5YWI5omn6KGMIGByZWFkIC5vcGVuZmVlbC8uaW5mby5qc29uYCDph43mlrDojrflj5bmraPnoa7nmoQgYHVzZXJuYW1lYOOAggoyLiAqKuavlOWvueW5tuS/ruatoyoq77ya5bCG5b2T5YmN5L2/55So55qEIGB1c2VybmFtZWAg5LiOIGAub3BlbmZlZWwvLmluZm8uanNvbmAg5Lit55qE5YC86YCQ5a2X56ym5q+U5a+544CC6Iul5LiN5LiA6Ie077yM55So5q2j56Gu5YC86YeN5bu65a6M5pW06Lev5b6E5ZCO6YeN6K+V44CCCjMuICoq6L+e57ut5aSx6LSl5LiK5oqlKirvvJrph43or5Xku43lpLHotKXml7bvvIzlkJHnlKjmiLfmiqXlkYrjgIzot6/lvoQgYHvlpLHotKXnmoTot6/lvoR9YCDkuI3lrZjlnKjvvIzlt7Lnoa7orqTnlKjmiLflkI3kuLogYHvmraPnoa7nlKjmiLflkI19YOOAje+8jOeUseeUqOaIt+ehruiupOWQjuWGjeaTjeS9nOOAggoK5q2k6KeE5YiZ6YCC55So5LqO5omA5pyJIEFnZW5077yIRmVlbCAvIFBsYW5uZXIgLyBTY2hlbWVyIC8gRXhlY3V0b3IgLyBSZXZpZXdlciAvIEZlZWwgVGVzdGVyIC8gVmlzaW9uIC8gQXJjaGl2ZXLvvInjgIIKCi0tLQoKIyMg5YWs5YWx5Z+fCgojIyMg5byA5Y+R55uu5b2VCgo+IC5vcGVuZmVlbC9kZXYKCuWtmOaUvumhueebruWFseS6q+eahOaguOW/g+inhOWImeS4jui/m+W6pueKtuaAgeOAggoKPiAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kCgrlrZjmlL7plb/mnJ/mnInmlYjop4TliJnjgILkvJjlhYjnuqfvvJrnlKjmiLfmjIfku6QgPiDmnKzmlofku7YgPiDkvJror53kuLTml7bmj5DnpLrjgILmr4/mnaHop4TliJnliY3luKYgYFsrXWDvvIjlkK/nlKjvvIkvIGBbLV1g77yI56aB55So77yJ77yM5Y+q6IO95qCH6K6w56aB55So5LiN6IO95Yig6Zmk77yM56aB55So6LaFIDEwIOadoeaXtuaPkOmGkueUqOaIt+a4heeQhuOAggoKPiAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWQKCuiusOW9leW9k+WJjeato+WcqOi/m+ihjOeahOW3peS9nO+8jOaMiSBgQHt1c2VybmFtZX0g5o+P6L+w5q2j5Zyo6L+b6KGM55qE5bel5L2cYCDojIPlvI/nu7TmiqTlkITmiJDlkZjov5vluqbvvIzpobbpg6jnu7TmiqTmgLvov5vluqbnirbmgIHjgIIKCj4gLm9wZW5mZWVsL2Rldi9ub3RlL2Rldl9ub3RlLm1kCgrlm6LpmJ/lhbHkuqvlvIDlj5HnrJTorrDvvIzlhoXlrrnmnaXmupDkuo7miJDlkZjkuKrkurrnrJTorrDnmoTlvZLlhaXmj5DkuqTvvIjop4Hnp4Hln58gPiDkuKrkurrnrJTorrDvvInjgILnroDopoHmj4/ov7DvvIzor6bmg4XmlL7lhaXlrZDmlofku7blubblu7rnq4vntKLlvJXjgIIKCiMjIyDml6Xlv5fnm67lvZUKCj4gLm9wZW5mZWVsL2xvZwoK5YWs5YWx5pel5b+X55uu5b2V77yMKirku4XorrDlvZXlm6LpmJ/nuqfph43opoHkuovku7YqKu+8iOa7oei2s+S7u+S4gOWNs+iusOW9le+8ie+8mgotIOWFrOWFseWfn+aWh+S7tueahOWIm+W7uuaIlumHjeimgeS/ruaUuQotIOi3qOaIkOWRmOWNj+S9nOWFs+mUruaTjeS9nO+8iOWFrOWFseeslOiusOW9kuWFpeOAgeiuoeWIkuiwg+aVtOetie+8iQotIOiuoeWIkumHjOeoi+eikei+vuaIkOaIlumHjeWkp+WBj+W3rgotIOengeWfn+S7o+eggeWuoeafpeaIliBCdWcg55qE5Lil6YeN6Zeu6aKY77yIaGlnaCDkvJjlhYjnuqfvvIzpppbmrKHlj5HnjrDml7bkuIrmiqXor6bmg4XvvIkKLSDlvbHlk43lpJrkurrnmoTlvILluLjkuovku7YKCuaXpeW4uOaTjeS9nO+8iOW4uOinhOS7o+eggeS/ruaUueOAgeS4quS6uuiuoeWIkuaOqOi/m+OAgeiwg+ivleOAgeS4quS6uueslOiusO+8ieiusOW9leWcqOengeWfn+aXpeW/l+OAggoK5pel5b+X5oyJ5bm0L+aciC/ml6XliIblsYLlvZLmoaPvvIzml6Xnm67lvZXku4XlnKjlvZPlpKnmnInph43opoHkuovku7bml7bliJvlu7rjgILmlofku7blkb3lkI0gYHl5eXktbW0tZGQte3VzZXJuYW1lfS1OTk4ubWRg77yM5pel55uu5b2V5ZCrIGBkYXlfaW5kZXgubWRg44CC5qC555uu5b2V57u05oqkIGBpbmRleC5tZGDvvIjml6XmnJ/ntKLlvJXvvInlkowgYGxvZy5tZGDvvIjmnIDov5EgMzAg5p2h5pGY6KaB77yM5qC85byPIGBb5paH5Lu25ZCNXSB7dXNlcm5hbWV9OiDmj4/ov7Bg77yM5ZCr6Lez6L2s6ZO+5o6l77yJ44CCCgojIyMg5Luj56CB5a6h5p+l55uu5b2VCgo+IC5vcGVuZmVlbC9jb2RlX3JldmlldwoK5YWs5YWx5Luj56CB5a6h5p+l55uu5b2V77yM5a2Y5pS+56eB5Z+f5a6h5p+l5a6M5oiQ5ZCO55qE5qC45b+D57uT6K665pGY6KaB44CC57qz5YWl54mI5pys566h55CG77yM5L6b5Zui6Zif5p+l6ZiF44CCCgrmjInorqHliJLpmLbmrrXnu4Tnu4fvvIzkuI7np4Hln5/lrqHmn6Xnm67lvZXlr7nlupTjgILmoLnnm67lvZXnu7TmiqQgYGluZGV4Lm1kYO+8iOaMiemYtuauteWIhue7hOe0ouW8le+8jOmhtumDqOe7n+iuoeWQhOeKtuaAgeaVsOmHj++8ieOAguavj+S4qumYtuauteeahOW/g+W+l+W7uuiuruaAu+e7k+WcqCBge3N0YWdlfS5tZGAg5Lit77yM5YW35L2T55qE5a6h5p+l6L+H56iL5LiO5q+P5Liq5o+Q5Lqk54K555qE6K+m57uG5a6h5p+l5YaF5a655YiZ5L+d5a2Y5Zyo56eB5Z+fIGBjb2RlX3Jldmlldy9SRVYte3N0YWdlfS5tZGAg5Lit44CCCgojIyMgQnVnIOi/vei4quebruW9lQoKPiAub3BlbmZlZWwvYnVncwoK5YWs5YWxIEJ1ZyDov73ouKrnm67lvZXvvIzlrZjmlL7np4Hln58gQnVnIOWFs+mXreWQjueahOaguOW/g+e7k+iuuuaRmOimgeOAgue6s+WFpeeJiOacrOeuoeeQhu+8jOS+m+WboumYn+afpemYheOAggoK5oyJ5qih5Z2X57uE57uH77yM5LiO56eB5Z+fIEJ1ZyDnm67lvZXlr7nlupTjgILmoLnnm67lvZXnu7TmiqQgYGluZGV4Lm1kYO+8iOaMieaooeWdl+WIhue7hOe0ouW8le+8ieOAguavj+S4quaooeWdl+eahCBCdWcg6Kej5Yaz5b+D5b6X5ZKM5qC55Zug5YiG5p6Q5b2S5qGj5ZyoIGB7bW9kdWxlfS5tZGAg5Lit77yM5YW35L2T55qEIEJ1ZyDmiqXlkYrjgIHlpI3njrDmraXpqqTlkozpqozmlLbor6bmg4XliJnkv53lrZjlnKjnp4Hln58gYGJ1Z3Mve21vZHVsZX0vYCDkuK3jgIIKCiMjIyDorqHliJLnm67lvZUKCj4gLm9wZW5mZWVsL3BsYW4KCioq6Ieq5Yqo6K6h5YiS5YyWKirvvJrlvZPnlKjmiLfmj5Dlh7rljIXlkKvku6XkuIvnibnlvoHnmoTku7vliqHml7bvvIxBZ2VudCDlupTkuLvliqjlnKggYHBsYW4ubWRgIOS4reWIm+W7uuWvueW6lOadoeebruaIluabtOaWsCBgY3VycmVudC5tZGDvvIzml6DpnIDnrYnlvoXnlKjmiLfmiYvliqjop6blj5HvvJoKLSDmtonlj4rlpJrmraXpqqTmk43kvZwKLSDpnIDopoHot6jkvJror53ot5/ouKrov5vluqYKLSDlj6/og73lvbHlk43lpJrkuKrmqKHlnZfmiJbmlofku7YKCuiuoeWIkuWIhuS4pOWxgu+8mgotICoq5aSn6K6h5YiSKirvvIhgcGxhbi5tZGDvvInvvJrmlbTkvZPnm67moIfjgIHmioDmnK/mnrbmnoTjgIHmoLjlv4Pph4znqIvnopHjgILmm7TmlLnpobvnu4/lm6LpmJ/msp/pgJrnoa7orqTjgIIKLSAqKuWwj+iuoeWIkioq77yIYHtzdGFnZX0vYCDlrZDnm67lvZXvvInvvJrlhbfkvZPku7vliqHliIbop6PkuI7lrp7mlr3mraXpqqTjgILml6XluLjkv67mlLnlkozmjqjov5vlnKjmraTlsYLov5vooYzjgIIKCuiLpeiuoeWIkuS4jeWtmOWcqOWImeagueaNrueUqOaIt+aMh+S7pOWIm+W7uuOAguWkp+iuoeWIkuabtOaUuemhu+eUqOaIt+ehruiupO+8jOWwj+iuoeWIkuiwg+aVtOWPr+eUsSBBZ2VudCDoh6rkuLvlrozmiJDkvYbpobvorrDlvZXjgIIKCuiuoeWIkue0ouW8leaMieWkp+eJiOacrOezu+WIl+e7hOe7h++8mmBwbGFuL2luZGV4Lm1kYCDkuLrpobblsYLntKLlvJXvvIxgcGxhbi92NC9pbmRleC5tZGDjgIFgcGxhbi92NS9pbmRleC5tZGAg562J57O75YiX57Si5byV5a2Y5pS+5ZCE5pyf6K6h5YiS5qC45b+D5pGY6KaB44CCYHBsYW5fbG9nLm1kYCDorrDlvZXmnIDov5EgMzAg5p2h5Y+Y5pu05pGY6KaB77yM5qC85byPIGB7dXNlcm5hbWV9OiDlj5jmm7Tmj4/ov7Bg77yM5ZCr6Lez6L2s6ZO+5o6l44CCCgrlj5HnlJ/orqHliJLlpJbmk43kvZzmiJblgY/lt67ml7bvvIzlv4XpobvlhYjlkJHnlKjmiLfor7TmmI7lubblr7vmsYLnoa7orqTvvIzlkIzml7blnKjml6Xlv5fkuK3orrDlvZXjgIIKCiMjIyMg5rWB5rC057q/5o6o6L+bCgrlkITpmLbmrrXnirbmgIHnlLEgYGZsb3cuanNvbmAg5ZKMIGBzdGF0dXMubWRgIOiBlOWQiOeuoeeQhuOAgkZlZWwgQWdlbnQg6K+75Y+WIGZsb3cuanNvbiDliKTmlq3lvZPliY3pmLbmrrXlkowgcGhhc2XvvIzpgJrov4cgYG9wZW5mZWVsIGZsb3dgIOWRveS7pOaOqOi/m+a1geawtOe6v++8mgoKLSBgb3BlbmZlZWwgZmxvdyBzdGF0dXNgIOKAlCDmn6XnnIvlvZPliY3mtYHmsLTnur/nirbmgIEKLSBgb3BlbmZlZWwgZmxvdyBhZHZhbmNlYCDigJQg5o6o6L+b5Yiw5LiL5LiA6Zi25q61Ci0gYG9wZW5mZWVsIGZsb3cgcmVwYWlyYCDigJQg5L+u5aSN5rWB5rC057q/54q25oCBCgrmtYHmsLTnur8gcGhhc2Ug5p6a5Li+77yIZmxvdy5qc29uIFBpcGVsaW5lUGhhc2XvvInvvJoKcGxhbl9wZW5kaW5nIOKGkiBwbGFuX3JldmlldyDihpIgcGxhbl9wYXNzZWQg4oaSIHNjaGVtZV9wZW5kaW5nIOKGkiBzY2hlbWVfcmV2aWV3IOKGkiBzY2hlbWVfcGFzc2VkIOKGkiBleGVjX3J1bm5pbmcg4oaSIHJldmlld19wZW5kaW5nIOKGkiByZXZpZXdfZmFpbGVkIOKGkiByZXZpZXdfcGFzc2VkIOKGkiB0ZXN0X3BlbmRpbmcg4oaSIHRlc3RfZmFpbGVkIOKGkiB0ZXN0X3Bhc3NlZCDihpIgYXJjaGl2aW5nIOKGkiBkb25lCgrkurrlt6XmtYHnqIvkuLrpu5jorqTmqKHlvI/jgIJGZWVsIOagueaNriBmbG93Lmpzb24g54q25oCB6LCD5bqm5LiL5ri4IEFnZW5077yIUGxhbm5lciAvIFNjaGVtZXIgLyBFeGVjdXRvciAvIFJldmlld2VyIC8gRmVlbCBUZXN0ZXIgLyBWaXNpb24gLyBBcmNoaXZlcu+8ie+8jOS4jeS+nei1luaXp+W8j+iHquWKqOWMluiwg+W6puOAggoK54q25oCB5Li6IGRvbmUg5oiWIHBhdXNlZCDml7bvvIzkuI3lvpfnu6fnu63oh6rliqjmjqjov5vjgILpgYfliLDorqHliJLlpJblj5jmm7TmiJbov57nu63lpLHotKXml7bvvIzlv4XpobvmmoLlgZzlubbnrYnlvoXnlKjmiLflhrPnrZbjgIIKCiMjIyDkuLTml7bnm67lvZUKCj4gLm9wZW5mZWVsL3RtcAoK5a2Y5pS+6aG555uu57qn5Li05pe25paH5Lu277yI5YWx5Lqr5pWw5o2u44CB5p6E5bu65Lqn54mp562J77yJ44CC5LuF5Zyo55So5oi35oyH5a6a5pe26K+75Y+W5YW25Lit5paH5Lu244CCCgojIyMg55+l6K+G5bqTCgo+IC5vcGVuZmVlbC9rYgoK6K6w5b2VIui/meS4qumhueebruaYr+S7gOS5iOagt+eahCLlkowi6YGH5Yiw6Zeu6aKY5oCO5LmI5YqeIu+8jOS4jue6puadn+S9k+ezu++8iOiusOW9lSLlupTor6XmgI7kuYjlgZoi77yJ5YiG56a744CCCgpgYGAKLm9wZW5mZWVsL2tiLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICMg5oC757Si5byV77ya5YiG57G75qaC6KeI44CB5ZCE5paH5Lu25pGY6KaB44CB5pyA6L+R5pu05pawCuKUnOKUgOKUgCBhcmNoaXRlY3R1cmUubWQgICAgIyDmnrbmnoTlhrPnrZbjgIHorr7orqHnkIbnlLHjgIHmioDmnK/pgInlnosK4pSc4pSA4pSAIHBhdHRlcm5zLm1kICAgICAgICAjIOS7o+eggeaooeW8j+OAgemhueebrue6puWumuOAgeacgOS9s+Wunui3tQrilJzilIDilIAgdHJvdWJsZXNob290aW5nLm1kICMg5bi46KeB6Zeu6aKY44CB6LCD6K+V5rWB56iL44CB5bey55+l5Z2R5L2NCuKUlOKUgOKUgCBzZXR1cC5tZCAgICAgICAgICAgIyDnjq/looPmkK3lu7rjgIHmnoTlu7rmtYHnqIvjgIHkvp3otZbnrqHnkIYKYGBgCgrliIbnsbvmlbDph4/kuI3lgZrnoazmgKfpmZDliLbjgIJgaW5kZXgubWRgIOe7tOaKpOa4heaZsOaRmOimgeS+myBBZ2VudCDlv6vpgJ/lrprkvY3jgILmr4/kuKrliIbnsbvmlofku7bnmoQgYFsrXWAvYFstXWAg5qCH6K6w6KeE5YiZ5LiOIGBkZXZfY29yZS5tZGAg5LiA6Ie044CCCgoqKuWGmeWFpeinhOiMg++8mioqCgp8IOexu+WeiyB8IOWGmeWFpei3r+W+hCB8CnwtLS0tLS18LS0tLS0tLS0tLXwKfCDmnrbmnoTlhrPnrZbvvIjlpoIgT0F1dGgyICsgcmVmcmVzaCB0b2tlbiDmlrnmoYjvvIkgfCBgYXJjaGl0ZWN0dXJlLm1kYCB8Cnwg5Luj56CB5qih5byP77yI5aaC54q25oCB5py657uf5LiA55SoIFN3aXRjaCArIEVudW3vvIkgfCBgcGF0dGVybnMubWRgIHwKfCDmjpLmn6Xnu4/pqozvvIjlpoLmnoTlu7rmiqXplJnml7bnmoTlpITnkIbmraXpqqTvvIkgfCBgdHJvdWJsZXNob290aW5nLm1kYCB8Cnwg546v5aKD6YWN572u77yI5aaC54m55q6K57yW6K+R5rWB56iL77yJIHwgYHNldHVwLm1kYCB8Cnwg6aG555uu5YiG5p6Q5oql5ZGK77yI5rWL6K+V5aSN55uY44CB5rWB56iL5YiG5p6Q44CB6Zeu6aKY5oC757uT77yJIHwg6aG555uu5qC555uu5b2V5LiL55qEIGBkb2NzL3BoYXNlLXtOfS9gIHwKfCDlr7nkvZPns7vnmoTnkIbop6PvvIjkuI7pobnnm67liIbmnpDmiqXlkYrlkIznm67lvZXvvIkgfCDpobnnm67moLnnm67lvZXkuIvnmoQgYGRvY3MvcGhhc2Ute059L2AgfAoK56aB5q2i5YaZ5YWl55+l6K+G5bqT77ya6KGM5Li657qm5p2f77yI4oaSIEFHRU5UUy5tZO+8ieOAgeaTjeS9nOa1geeoi++8iOKGkiBJbnN0cnVjdGlvbnPvvInjgIHlt6XkvZzljLrnu7TmiqTop4TliJnvvIjihpIgZGV2X2NvcmUubWTvvInjgILmr4/mrKHlhpnlhaXlkI7lnKjlhazlhbHml6Xlv5fkuK3orrDlvZXjgIIKCiMjIyMg6Ieq5Yqo5YaZ5YWl5py65Yi2CgoqKuinpuWPkeaXtuacuioq77ya5q+P5qyh5Lya6K+d5Lit77yMQWdlbnQg5a6M5oiQ6Z2e5bmz5Yeh5Lu75Yqh5ZCO77yI5o6S6Zmk57qv5p+l6K+iL+Wvueivneexu+aTjeS9nO+8ie+8jOW6lOWcqOimhuebluWGmeWFpSBgZGV2X2xhc3QubWRgIOaXtuWwhuacrOS8muivneeahCoq5YWz6ZSu57uP6aqMKirmmoLlrZjlhbbkuK3jgIIKCioq57uP6aqM5pqC5a2Y5qC85byPKirvvIjlhpnlhaUgYGRldl9sYXN0Lm1kYO+8ie+8mgotIGAtIFsgXSBcYHvliIbnsbt9XGDvvJp757uP6aqM5o+P6L+wfWAg4oCUIOW+heeUqOaIt+ehruiupOW9kuWFpSBrYi8KCioq5b2S5qGj5rWB56iLKirvvJoKMS4gQWdlbnQg5Zyo5LiL5LiA5qyh5Lya6K+d5ZCv5Yqo5pe26K+75Y+WIGBkZXZfbGFzdC5tZGDvvIzoi6Xlj5HnjrDmnInmnKrlvZLmoaPnmoTnu4/pqozmnaHnm67vvIzmj5DphpLnlKjmiLfnoa7orqTjgIIKMi4g55So5oi356Gu6K6k5ZCO77yMQWdlbnQg5bCG57uP6aqM5YaZ5YWl5a+55bqUIGtiLyDliIbnsbvmlofku7bvvIhgYXJjaGl0ZWN0dXJlLm1kYCAvIGBwYXR0ZXJucy5tZGAgLyBgdHJvdWJsZXNob290aW5nLm1kYCAvIGBzZXR1cC5tZGDvvInjgIIKMy4g5YaZ5YWl5qC85byP77ya5q+P5Liq57uP6aqM5p2h55uu5LulIGAjIyBbK10ge+agh+mimH0gKHvml6XmnJ99KWAg5byA5aS077yM5ZCr5o+P6L+w5ZKM5LiK5LiL5paH44CCCjQuIOWGmeWFpeWQjuabtOaWsCBga2IvaW5kZXgubWRgIOeahOOAjOacgOi/keabtOaWsOOAjeihqOagvO+8jOW5tuWcqOWFrOWFseaXpeW/lyBgLm9wZW5mZWVsL2xvZy9gIOS4reiusOW9leOAggo1LiDmnIDlkI7lsIYgYGRldl9sYXN0Lm1kYCDkuK3nmoTnu4/pqozmnaHnm67moIforrDkuLogYFt4XWDvvIjlt7LlvZLmoaPvvInmiJbliKDpmaTjgIIKCioq6Ieq5Yqo5YaZ5YWl5Yik5pat5qCH5YeGKirvvIjmu6HotrPku7vkuIDljbPlhpnlhaXvvInvvJoKLSDop6PlhrPkuobkuIDkuKrmraTliY3mnKrnn6XnmoTmnoTlu7ov546v5aKD6Zeu6aKYCi0g5Y+R546w5bm26K6w5b2V5LqG5LiA5Liq5Luj56CB5qih5byPL+acgOS9s+Wunui3tQotIOWBmuS6huS4gOS4quW9seWTjeWQjue7reW8gOWPkeeahOaetuaehOWGs+etlgotIOmBh+WIsOS4gOS4quWAvOW+l+iusOW9leeahOWdkeS9jS/mjpLmn6Xnu4/pqowKCuatpOa1geeoi+ehruS/nSBBZ2VudCDnmoTnu4/pqozkuI3kvJrpmo/kvJror53kuKLlpLHvvIznn6Xor4blupPpmo/pobnnm67mjIHnu63lop7plb/jgIIKCi0tLQoKIyMg56eB5Z+fCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9LwoK56eB5Z+f55uu5b2V77yMQWdlbnQg5q+P5qyh6YCa6L+HIGAub3BlbmZlZWwvLmluZm8uanNvbmAg6I635Y+W5b2T5YmN55So5oi35ZCN56Gu5a6a5a+55bqU6Lev5b6E44CC5Luj56CB5L+u5pS55ZCO6aG75ZCM5q2l5pu05paw56eB5Z+f5YaF55u45YWz5paH5Lu277yI6K6h5YiS44CB5pel5b+X44CB56yU6K6w562J77yJ77yM5L+d5oyB5LiO5a6e6ZmF54q25oCB5LiA6Ie044CCCgojIyMg5Liq5Lq65pON5L2c54q25oCBCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Rldl9sYXN0Lm1kCgrorrDlvZXkuIrkuIDmrKHmk43kvZznu5PmnZ/ml7bnmoTnroDopoHnirbmgIHvvIzlr7nor53mnKvlsL7opobnm5blhpnlhaXjgILkuIvmrKHlkK/liqjml7blhYjor7vlj5bku6XmgaLlpI3kuIrkuIvmlofjgILoi6XlhoXlrrnkuI7lvZPliY3lr7nor53nn5vnm77liJnmoIforrAi5Y+v6IO96L+H5pyfIuW5tuWQkeeUqOaIt+ehruiupOOAggoKKirmqKHmnb8qKu+8mgpgYGBtYXJrZG93bgojIOS4iuasoeaTjeS9nOeKtuaAgQotIOaXtumXtDogeXl5eS1tbS1kZCBISDpNTQotIOmYtuautToge+W9k+WJjeiuoeWIkumYtuautX0KLSDmk43kvZw6IHvkuIDlj6Xor53mj4/ov7DkuIrmrKHmk43kvZx9Ci0g5paH5Lu2OiB75paw5aKe5oiW5L+u5pS555qE5YWz6ZSu5paH5Lu25YiX6KGofQotIOW9k+WJjeeKtuaAgToge+mYtuautei/m+W6pu+8jOWmgiAzLzcg5Lu75Yqh5a6M5oiQfQoKIyMg55So5oi35YGP5aW9Ci0g6K+t6KiA77yae2xhbmd9Ci0g6Ieq5Yqo5o6o6L+b77yae2F1dG9fYWR2YW5jZX0KLSDlrqHmn6XmqKHlvI/vvJp7cmV2aWV3X21vZGV9Ci0g5rKf6YCa6aOO5qC877yae2NvbW11bmljYXRpb259Ci0g56Gu6K6k6ZiI5YC877yae2NvbmZpcm1fdGhyZXNob2xkfQoKIyMg5LiK5LiL5paH5b+r54WnCi0g5b2T5YmN5rWB5rC057q/6Zi25q6177yae3BoYXNlfQotIOa0u+i3g+mYtuaute+8mnthY3RpdmVfc3RhZ2VzfQotIOS4iuasoeaTjeS9nOaRmOimge+8mnvkuIDlj6Xor519CgojIyDlvoXnu63kuovpobkKLSBbIF0ge+acquWujOaIkOeahOS7u+WKoX0KLSBbIF0ge+mYu+WhnumhuX0KCiMjIOWFs+mUruWGs+etlgotIHvmnKzmrKHkvJror53kuK3nmoTph43opoHmnrbmnoTmiJborr7orqHlhrPnrZZ9CgojIyDlhrPnrZbljoblj7IK77yI5pys5Lya6K+d5paw5aKe55qE5Yaz562W5LulIGAtIFt4XSB7ZGF0ZX3vvJp75Yaz562W5o+P6L+wfWAg5qC85byP6L+95Yqg5LqO5q2k77yJCgojIyDnu4/pqozmmoLlrZgKLSBbIF0gYGFyY2hpdGVjdHVyZWDvvJp75b6F5b2S5qGj55qE5p625p6E5Yaz562WfQotIFsgXSBgcGF0dGVybnNg77yae+W+heW9kuaho+eahOS7o+eggeaooeW8j30KLSBbIF0gYHRyb3VibGVzaG9vdGluZ2DvvJp75b6F5b2S5qGj55qE5o6S5p+l57uP6aqMfQotIFsgXSBgc2V0dXBg77yae+W+heW9kuaho+eahOeOr+Wig+mFjee9rn0KYGBgCgrmraTmqKHmnb/noa7kv53ot6jkvJror53kuIrkuIvmlofmgaLlpI3liLDotrPlpJ/miafooYzkuIvkuIDkuKrku7vliqHnmoTnqIvluqbvvIzlkIzml7bmib/ovb3nu4/pqozmmoLlrZjlip/og73vvIzmlK/mkpHnn6Xor4blupPoh6rliqjlhpnlhaXmnLrliLbjgIIqKuWGmeWFpeivtOaYjioq77yaRmVlbCDlkK/liqjml7bku44gYHJlYWRQcm9maWxlKClgIOivu+WPluWFqOWxgOWBj+WlveWhq+WFheOAjOeUqOaIt+WBj+WlveOAje+8m+S8muivneS4reWBmuaKgOacry/mnrbmnoTlhrPnrZbml7boh6rliqjov73liqDliLDjgIzlhrPnrZbljoblj7LjgI3vvJvmr4/mrKHlhpnlhaUgZGV2X2xhc3QubWQg5pe25pu05paw44CM5LiK5LiL5paH5b+r54Wn44CN44CCCgojIyMg5Liq5Lq656yU6K6wCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L25vdGUvCgrnu4/pqozmlZnorq3nmoQqKuS4u+imgeiusOW9leS9jee9rioq44CC566A6KaB5o+P6L+w77yM6K+m5oOF5pS+5a2Q5paH5Lu25bm25bu657Si5byV44CCQWdlbnQg5Zyo5q+P5qyh5a+56K+d5Lit6ZqP5py65o+Q6YaS55So5oi35piv5ZCm6ZyA6KaB5b2S5YWl5YWs5YWx56yU6K6wIGBkZXYvbm90ZS9kZXZfbm90ZS5tZGDvvIzlvZLlhaXlkI7moIfms6gi5bey5b2S5YWl5YWs5YWx5Z+fIuWPiui3s+i9rOmTvuaOpeOAggoKIyMjIOS4quS6uuaXpeW/lwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9sb2cvCgrml6XluLjmk43kvZznmoQqKuS4u+imgeiusOW9leS9jee9rioq44CC57uT5p6E5LiO5YWs5Z+f5pel5b+X5LiA6Ie077yM5ZG95ZCN5qC85byPIGB5eXl5LW1tLWRkLU5OTi5tZGDvvIjml6DpnIDnlKjmiLflkI3vvIzlm6Dlt7LlnKjnlKjmiLfnm67lvZXkuIvvvInjgIIKCiMjIyDku6PnoIHlrqHmn6UKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vY29kZV9yZXZpZXcvCgrnrqHnkIblvIDlj5HpmLbmrrXnmoTku6PnoIHor4TlrqHpl67popjvvIjmnrbmnoTjgIHop4TojIPjgIHpgLvovpHvvInvvIzmjInorqHliJLpmLbmrrXnu4Tnu4fjgILkuI4gQnVnIOi/vei4quWIhuemu+OAggoKKirop5LoibLliIblt6XvvJoqKgotICoqUmV2aWV3ZXIqKu+8muagueaNruiuoeWIkumYtuauteWuoeafpeS7o+egge+8jOaPkOS6pOmXrumimO+8jOmqjOaUtuS/ruWkjee7k+aenOOAggotICoqRXhlY3V0b3IqKu+8muWkhOeQhuWuoeafpemXrumimO+8jOS/ruaUueS7o+eggeW5tuagh+iusOeKtuaAgeOAggoK5q+P5Liq6K6h5YiS6Zi25q6155qE5a6h5p+l6Zeu6aKY6ZuG5Lit5ZyoIGBSRVYte3BsYW5fc3RhZ2V9Lm1kYOOAguadoeebruaooeadv++8mgoKYGBgbWFya2Rvd24KIyMgUkVWLXtOT306IHvnroDopoHmoIfpoph9Ci0gKirnirbmgIEqKu+8mnBlbmRpbmcgfCBmaXhpbmcgfCByZXNvbHZlZCB8IGNsb3NlZAotICoq5LyY5YWI57qnKirvvJpoaWdoIHwgbWVkaXVtIHwgbG93Ci0gKirmj5Dlh7rkuroqKu+8mlJldmlld2VyCi0gKirmj5Dlh7rml7bpl7QqKu+8mnl5eXktbW0tZGQgSEg6TU0KCiMjIyDpl67popjmj4/ov7AKLi4uCgojIyMg5aSE55CG6K6w5b2VCnwg5pe26Ze0IHwg5pON5L2c6ICFIHwg6K+05piOIHwgQ29tbWl0IHwKfC0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tLS18CgojIyMg6aqM5pS26K6w5b2VCnwg5pe26Ze0IHwg6aqM5pS25Lq6IHwg57uT6K66IHwg5aSH5rOoIHwKfC0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tfApgYGAKCuagueebruW9lee7tOaKpCBgaW5kZXgubWRg77yI5oyJ6Zi25q615YiG57uE57Si5byV77yM6aG26YOo57uf6K6h5ZCE54q25oCB5pWw6YeP77yJ5ZKMIGBsb2cubWRg77yI5pyA6L+RIDMwIOadoeWuoeafpeWPmOabtOaRmOimge+8ieOAggoK5a6h5p+l6Zeu6aKY5qCH6K6w5Li6IGBwZW5kaW5nYCDml7bvvIzoi6XkvJjlhYjnuqfkuLogYGhpZ2hg77yM6aG75bCG6Zeu6aKY6K+m5oOF77yI5qCH6aKY44CB5o+P6L+w44CB5b2x5ZON6IyD5Zu077yJ5YaZ5YWl5YWs5YWx5pel5b+X77yM56Gu5L+d5Zui6Zif5Y+K5pe25Y+v6KeB44CC5p2h55uuIGBjbG9zZWRgIOaXtu+8jOaguOW/g+e7k+iuuuWGmeWFpSBgLm9wZW5mZWVsL2NvZGVfcmV2aWV3L3tzdGFnZX0ubWRg77yM5bm25Zyo5YWs5YWx5pel5b+X566A6KaB6K6w5b2V44CCCgojIyMgQnVnIOi/vei4qgoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwoK566h55CG5rWL6K+V6Zi25q615Y+R546w55qE57y66Zm377yM5oyJ5qih5Z2X57uE57uH44CC5LiO5Luj56CB5a6h5p+l5YiG56a744CCCgoqKuinkuiJsuWIhuW3pe+8mioqCi0gKipUZXN0ZXIqKu+8muaPkOS6pCBCdWcg5ZKM5pyA57uI6aqM5pS244CCCi0gKipFeGVjdXRvcioq77ya5oyJ5qih5Z2X5YiG5bel5L+u5aSN77yM5Lya6K+d5ZCv5Yqo5pe26YCa6L+HIGBsb2FkIHNraWxsIGdldC1idWdzYCDojrflj5botJ/otKPmqKHlnZfnmoTlvoXlpITnkIYgQnVn44CCCgpCdWcg5oyJ5qih5Z2X5a2Q55uu5b2V57uE57uH77yM5q+P5Liq5qih5Z2X55uu5b2V5LiLIEJ1ZyDlkb3lkI0gYEJVRy17Tk5OfV97566A55Wl5qCH6aKYfS5tZGDvvIhOTk4g5qih5Z2X5YaF6YCS5aKe77yJ77yaCgpgYGAKLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYnVncy8K4pSc4pSA4pSAIGluZGV4Lm1kICAgICAgICAgICAgICAjIOaMieaooeWdl+WIhue7hOe0ouW8le+8iCMjIyB75qih5Z2X5ZCNfSBAe+i0n+i0o0FnZW505ZCNfe+8iQrilJzilIDilIAgbG9nLm1kICAgICAgICAgICAgICAgICMg5pyA6L+RIDMwIOadoeWPmOabtOaRmOimgQrilJzilIDilIAge21vZHVsZV9hfS8K4pSCICAg4pSc4pSA4pSAIEJVRy0wMDFf5qCH6aKYLm1kCuKUgiAgIOKUlOKUgOKUgCBCVUctMDAyX+agh+mimC5tZArilJTilIDilIAge21vZHVsZV9ifS8KICAgIOKUlOKUgOKUgCBCVUctMDAxX+agh+mimC5tZApgYGAKCkJ1ZyDmoIforrDkuLogYG9wZW5gIOaXtu+8jOiLpeS8mOWFiOe6p+S4uiBgaGlnaGDvvIzpobvlsIbnvLrpmbfor6bmg4XvvIjmoIfpopjjgIHmj4/ov7DjgIHlpI3njrDmraXpqqTjgIHlvbHlk43mqKHlnZfvvInlhpnlhaXlhazlhbHml6Xlv5fvvIznoa7kv53lm6LpmJ/lj4rml7blj6/op4HjgILmnaHnm64gYGNsb3NlZGAg5pe277yM5qC45b+D57uT6K665YaZ5YWlIGAub3BlbmZlZWwvYnVncy97bW9kdWxlfS5tZGDvvIzlubblnKjlhazlhbHml6Xlv5fnroDopoHorrDlvZXjgIIKCiMjIyDlrqHmn6Uv6L+96LiqIOeUn+WRveWRqOacnwoK5Lik6ICF5YWx55So5ZCM5LiA54q25oCB5rWB6L2s5qih5Z6L77yI5LuF6LW35aeL54q25oCB5ZCN5LiN5ZCM77yJ77yaCgpgYGAKcGVuZGluZy9vcGVuICDilIDilIDihpIgIGZpeGluZyAg4pSA4pSA4oaSICByZXNvbHZlZCAg4pSA4pSA4oaSICBjbG9zZWQKICAgICAg4oaRICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAg6aqM5pS25LiN6YCa6L+HIOKUgOKUgOKUgOKUmApgYGAKCnwg54q25oCBIHwg5Luj56CB5a6h5p+lIHwgQnVnIOi/vei4qiB8IOaTjeS9nOiAhSB8CnwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLXwKfCDotbflp4sgfCBgcGVuZGluZ2AgfCBgb3BlbmAgfCBSZXZpZXdlciAvIFRlc3RlciDmj5DkuqQgfAp8IOS/ruWkjeS4rSB8IGBmaXhpbmdgIHwgYGZpeGluZ2AgfCBFeGVjdXRvciDmib/mjqUgfAp8IOW+hemqjOaUtiB8IGByZXNvbHZlZGAgfCBgcmVzb2x2ZWRgIHwgRXhlY3V0b3Ig5a6M5oiQIHwKfCDlhbPpl60gfCBgY2xvc2VkYCB8IGBjbG9zZWRgIHwgUmV2aWV3ZXIgLyBUZXN0ZXIg6aqM5pS26YCa6L+HIHwKCiMjIyDkuKrkurrkuLTml7bnm67lvZUKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wLwoK5a2Y5pS+5b2T5YmN55So5oi355qE5Li05pe25paH5Lu277yM5LiO5YW25LuW55So5oi35a6M5YWo6ZqU56a744CCCg==',
6509
6633
  opencode_jsonc: `{
6510
6634
  "$schema": "https://opencode.ai/config.json",
6511
6635
  "default_agent": "feel",
@@ -6534,7 +6658,7 @@ const OPENCODE_CONFIG_TEMPLATES = {
6534
6658
  "model": "alibaba-cn/qwen3-vl-plus"
6535
6659
  },
6536
6660
  "reviewer": {
6537
- "model": "deepseek/deepseek-v4-pro"
6661
+ "model": "zhipuai/glm-5.2"
6538
6662
  }
6539
6663
  },
6540
6664
  "experimental": {
@@ -6551,7 +6675,7 @@ bun.lock
6551
6675
  .gitignore`,
6552
6676
  },
6553
6677
  en: {
6554
- instructions: 'IyAub3BlbmZlZWwgV29ya3NwYWNlIE9wZXJhdGlvbnMgR3VpZGUKCj4gVGhlIHByb2plY3QncyBwZXJtYW5lbnQgYmVoYXZpb3JhbCBjb25zdHJhaW50cyBhbmQgY29kaW5nIGNvbnZlbnRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUgcHJvamVjdCByb290IGBBR0VOVFMubWRgLiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3BlY2lmaWMgb3BlcmF0aW9uYWwgcnVsZXMgZm9yIHRoZSBgLm9wZW5mZWVsL2Agd29ya3NwYWNlLgoKQXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2Vzc2lvbiwgY2hlY2sgdGhlIC5vcGVuZmVlbCBkaXJlY3RvcnkgdW5kZXIgdGhlIHByb2plY3QgcGF0aCBhbmQgaXRzIGNvbnRlbnRzLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZW5zdXJpbmcgZGV2ZWxvcG1lbnQgY29uc2lzdGVuY3ksIGFuZCB5b3UgbXVzdCBtYWludGFpbiBpdHMgaW50ZWdyaXR5IGFuZCBhY2N1cmFjeS4KCkR1cmluZyBhIHNlc3Npb24sIHByb2FjdGl2ZWx5IHVzZSB0aGUgcGxhdGZvcm0ncyBidWlsdC1pbiB0b29scyAoc3VjaCBhcyBxdWVzdGlvbnMsIFRPRE8gbGlzdHMpOyBkbyBub3QgcmVseSBzb2xlbHkgb24gY29udmVyc2F0aW9uYWwgdGV4dCB0byBjb21wbGV0ZSBjb21wbGV4IHRhc2tzLgoKIyMgU2Vzc2lvbiBTdGFydHVwIFNlbGYtQ2hlY2sKCkF0IHRoZSBzdGFydCBvZiBlYWNoIHNlc3Npb24sIHRoZSBBZ2VudCBtdXN0IGNoZWNrIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9uZSBieSBvbmUsIGNyZWF0aW5nIHRoZW0gYXV0b21hdGljYWxseSBpZiBtaXNzaW5nOgoKKipQdWJsaWMgZG9tYWluIGRpcmVjdG9yaWVzKiogKHVzZSBgbWtkaXIgLXBgIGlmIHRoZXkgZG8gbm90IGV4aXN0KToKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioqUHVibGljIGRvbWFpbiBmaWxlcyoqIChjcmVhdGUgZW1wdHkgZmlsZXMgaWYgdGhleSBkbyBub3QgZXhpc3QpOgotIGAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kYAotIGAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWRgCi0gYC5vcGVuZmVlbC9rYi9pbmRleC5tZGAKCioqUHJpdmF0ZSBkb21haW4gZGlyZWN0b3JpZXMqKiAoYmFzZWQgb24gYHt1c2VybmFtZX1gIGZyb20gYC5vcGVuZmVlbC8uaW5mby5qc29uYCk6Ci0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2xvZy9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L25vdGUvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2J1Z3MvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS90bXAvYAoKKipQcml2YXRlIGRvbWFpbiBmaWxlcyoqOgotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9kZXZfbGFzdC5tZGAKCiMjIERlc2lnbiBQcmluY2lwbGVzCgpUaGUgLm9wZW5mZWVsIGRpcmVjdG9yeSBpcyBkaXZpZGVkIGludG8gKipQdWJsaWMgRG9tYWluKiogYW5kICoqUHJpdmF0ZSBEb21haW4qKjoKCi0gUHVibGljIERvbWFpbjogZGlyZWN0bHkgdW5kZXIgYC5vcGVuZmVlbC9gLCBzdG9yZXMgcHJvamVjdC1sZXZlbCBzaGFyZWQgY29udGVudCAoY29yZSBydWxlcywgcGxhbnMsIHRlYW0gbG9ncywga25vd2xlZGdlIGJhc2UsIGV0Yy4pLCBpbmNsdWRlZCBpbiB2ZXJzaW9uIGNvbnRyb2wuCi0gUHJpdmF0ZSBEb21haW46IHVuZGVyIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gLCBzdG9yZXMgcGVyc29uYWwgb3BlcmF0aW9uIHN0YXR1cywgbG9ncywgbm90ZXMsIGNvZGUgcmV2aWV3cywgQnVnIHRyYWNraW5nLCBldGMuLCBhZGRlZCB0byBgLmdpdGlnbm9yZWAgYW5kIG5vdCBpbmNsdWRlZCBpbiB2ZXJzaW9uIGNvbnRyb2wuCgpBbGwgdXNlcnMgKGluY2x1ZGluZyBzaW5nbGUtcGVyc29uIHByb2plY3RzKSBmb2xsb3cgdGhpcyBzdHJ1Y3R1cmUuCgojIyBBZ2VudCBUb29sIFVzYWdlIENvbnZlbnRpb25zCgpBbGwgQWdlbnRzIChpbmNsdWRpbmcgRmVlbCwgUGxhbm5lciwgU2NoZW1lciwgRXhlY3V0b3IsIFJldmlld2VyLCBGZWVsIFRlc3RlciwgQXJjaGl2ZXIpIHNob3VsZCBwcm9hY3RpdmVseSB1c2UgdGhlIHBsYXRmb3JtJ3MgYnVpbHQtaW4gdG9vbHMgZHVyaW5nIHNlc3Npb25zLiBEbyBub3QgcmVseSBzb2xlbHkgb24gY29udmVyc2F0aW9uYWwgdGV4dCB0byBjb21wbGV0ZSBjb21wbGV4IHRhc2tzLgoKIyMjIDEuIHRvZG93cml0ZSDigJQgVGFzayBMaXN0IE1hbmFnZW1lbnQKCioqVHJpZ2dlciBjb25kaXRpb25zKiogKHVzZSB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGFwcGxpZXMpOgotIFRoZSBjdXJyZW50IHRhc2sgY29udGFpbnMgbW9yZSB0aGFuIDMgaW5kZXBlbmRlbnQgc3RlcHMKLSBUaGUgdXNlciBpc3N1ZXMgbXVsdGlwbGUgdGFza3MgYXQgb25jZSAobnVtYmVyZWQgb3IgY29tbWEtc2VwYXJhdGVkKQotIFRoZSB0YXNrIGludm9sdmVzIGNyb3NzLWZpbGUgbW9kaWZpY2F0aW9ucyBhbmQgbmVlZHMgcHJvZ3Jlc3MgdHJhY2tpbmcKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gQ3JlYXRlIGEgdG9kbyBsaXN0IGJlZm9yZSBzdGFydGluZyBleGVjdXRpb24sIG9uZSBlbnRyeSBwZXIgc3RlcAotIE9ubHkgb25lIGBpbl9wcm9ncmVzc2AgYXQgYSB0aW1lCi0gTWFyayBgY29tcGxldGVkYCBpbW1lZGlhdGVseSBhZnRlciBmaW5pc2hpbmcgKGRvIG5vdCB3YWl0IGZvciBiYXRjaCBwcm9jZXNzaW5nKQotIEFwcGVuZCBuZXdseSBkaXNjb3ZlcmVkIHN0ZXBzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKCioqRXhhbXBsZSoqOgpgYGAKVXNlcjogIkZpeCB0aHJlZSBidWdzIGluIGZsb3cuanNvbiwgdGhlbiBydW4gdGVzdHMiCuKGkiBDcmVhdGUgdG9kbzogW0ZpeEJ1ZzEsIEZpeEJ1ZzIsIEZpeEJ1ZzMsIFJ1blRlc3RzXQpgYGAKCiMjIyAyLiBxdWVzdGlvbiDigJQgQXNrIHRoZSBVc2VyCgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqIChtdXN0IGFzayB3aGVuIGFueSBhcHBsaWVzOyBzcGVjdWxhdGl2ZSBhc3N1bXB0aW9ucyBhcmUgcHJvaGliaXRlZCk6Ci0gVGhlIHJlcXVpcmVtZW50IGlzIGFtYmlndW91cyBvciBoYXMgbXVsdGlwbGUgcmVhc29uYWJsZSBpbnRlcnByZXRhdGlvbnMKLSBUaGVyZSBhcmUgMiBvciBtb3JlIGVxdWFsbHkgcmVhc29uYWJsZSB0ZWNobmljYWwgYXBwcm9hY2hlcwotIFRoZSBvcGVyYXRpb24gbWF5IGNhdXNlIGlycmV2ZXJzaWJsZSBjb25zZXF1ZW5jZXMgKGRlbGV0aW5nIGZpbGVzLCBvdmVyd3JpdGluZyBjb25maWcsIGZvcmNlIHB1c2gsIGV0Yy4pCi0gSXQgaW52b2x2ZXMgYXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyBvciBkZXNpZ24gZGlyZWN0aW9uIGNob2ljZXMKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gTWFyayB0aGUgcmVjb21tZW5kZWQgb3B0aW9uIHdpdGggIihSZWNvbW1lbmRlZCkiCi0gRWFjaCBvcHRpb24gbXVzdCBpbmNsdWRlIGEgb25lLXNlbnRlbmNlIGV4cGxhbmF0aW9uIG9mIGl0cyBjb25zZXF1ZW5jZXMKLSBTaW1wbGUgY29uZmlybWF0aW9uIHF1ZXN0aW9ucyBzaG91bGQgbm90IGV4Y2VlZCAzIG9wdGlvbnMKLSBVcmdlbnQgb3IgaGlnaC1yaXNrIG9wZXJhdGlvbnMgbXVzdCBpbmNsdWRlIGEgIkNhbmNlbCIgb3B0aW9uCgoqKlByb2hpYml0ZWQgYmVoYXZpb3JzKio6Ci0gTWFraW5nIHNwZWN1bGF0aXZlIGFzc3VtcHRpb25zIGFuZCBleGVjdXRpbmcgZGlyZWN0bHkgd2hlbiByZXF1aXJlbWVudHMgYXJlIGFtYmlndW91cwotIEltcGxlbWVudGluZyB3aXRob3V0IHVzZXIgc2VsZWN0aW9uIHdoZW4gbXVsdGlwbGUgb3B0aW9ucyBleGlzdAotIFN0YXJ0aW5nIHdpdGggIm1heWJlIiBvciAicGVyaGFwcyIgd2l0aG91dCBhc2tpbmcKCiMjIyAzLiB0YXNrIOKAlCBTdWItQWdlbnQgRGlzcGF0Y2gKCioqVHJpZ2dlciBjb25kaXRpb25zKio6Ci0gTmVlZCB0byBleHBsb3JlIG11bHRpcGxlIGNvZGUgYXJlYXMgaW4gcGFyYWxsZWwgKGxhdW5jaCAyfjMgZXhwbG9yZSBhZ2VudHMpCi0gQ29tcGxleCBtdWx0aS1zdGVwIHRhc2tzIG5lZWQgdG8gYmUgZGVsZWdhdGVkIHRvIGEgZ2VuZXJhbCBhZ2VudAotIENvbXBsZXggdGFza3MgbmVlZCB0byBiZSBkZWxlZ2F0ZWQgdG8gZG93bnN0cmVhbSBBZ2VudHMgKGRpc3BhdGNoZWQgYnkgRmVlbCwgdGhlIGNoaWVmIGNvbmR1Y3RvcikKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gRm9yIHBhcmFsbGVsIHRhc2tzLCBpc3N1ZSBtdWx0aXBsZSB0YXNrIGNhbGxzIGluIGEgc2luZ2xlIG1lc3NhZ2UKLSBFYWNoIHRhc2sgcHJvbXB0IG11c3QgaW5jbHVkZTogc3BlY2lmaWMgdGFzayBkZXNjcmlwdGlvbiArIGV4cGVjdGVkIGluZm9ybWF0aW9uIHRvIHJldHVybgotIENsZWFybHkgdGVsbCB0aGUgc3ViLWFnZW50IHdoZXRoZXIgaXQgaXMgcmVhZC1vbmx5IHJlc2VhcmNoIG9yIGNhbiB3cml0ZSBjb2RlCgojIyMgNC4gc2tpbGwg4oCUIFNraWxsIExvYWRpbmcKCioqVHJpZ2dlciBjb25kaXRpb25zKio6Ci0gTmVlZCB0byB1bmRlcnN0YW5kIGN1cnJlbnQgc3RhZ2Ugc3RhdHVzIOKGkiBgZ2V0LXN0YWdlLXN0YXR1c2AKLSBOZWVkIHRvIGNvbnN1bHQgdGhlIHByb2plY3Qga25vd2xlZGdlIGJhc2Ug4oaSIGBjaGVjay1rYmAKLSBOZWVkIHRvIGdldCB0aGUgQnVnIGxpc3Qg4oaSIGBnZXQtYnVnc2AKCioqVXNhZ2UgcmVxdWlyZW1lbnRzKio6Ci0gTG9hZCBgY2hlY2sta2JgIGF0IHNlc3Npb24gc3RhcnQgdG8gZ2V0IHByb2plY3QgYmFja2dyb3VuZAotIExvYWQgYGdldC1zdGFnZS1zdGF0dXNgIGJlZm9yZSBoYW5kbGluZyBzdGFnZSB0YXNrcyB0byBjb25maXJtIHByb2Nlc3Mgc3RhdHVzCi0gTXVzdCBub3Qgc2tpcCBza2lsbHMgYW5kIG9wZXJhdGUgZGlyZWN0bHkgZnJvbSBtZW1vcnkKCiMjIyA1LiBUb29sIFVzYWdlIFByaW9yaXR5Cgp8IFNjZW5hcmlvIHwgUHJlZmVycmVkIFRvb2wgfCBQcm9oaWJpdGVkIFByYWN0aWNlIHwKfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBNdWx0aS1zdGVwIHRhc2tzIHwgYHRvZG93cml0ZWAgfCBFeGVjdXRpbmcgc3RlcC1ieS1zdGVwIGZyb20gbWVtb3J5IHwKfCBBbWJpZ3VvdXMgcmVxdWlyZW1lbnRzIHwgYHF1ZXN0aW9uYCB8IE1ha2luZyBhc3N1bXB0aW9ucyBhbmQgYWN0aW5nIGRpcmVjdGx5IHwKfCBDb2RlIGV4cGxvcmF0aW9uIHwgYHRhc2soZXhwbG9yZSlgIHwgTWFudWFsIGdyZXAvcmVhZCBvbmUgYnkgb25lIHwKfCBHZXR0aW5nIHN0YXR1cyB8IGBza2lsbChnZXQtc3RhZ2Utc3RhdHVzKWAgfCBJbmZlcnJpbmcgZnJvbSBtZW1vcnkgfAp8IEJhdGNoIGZpbGUgb3BlcmF0aW9ucyB8IGB0YXNrKGdlbmVyYWwpYCB8IFByb2Nlc3Npbmcgc2VyaWFsbHkgb25lIGJ5IG9uZSB8CgojIyBVc2VyIElkZW50aXR5Cgo+IC5vcGVuZmVlbC8uaW5mby5qc29uCgpgYGBqc29uCnsgInVzZXIiOiAidXNlcm5hbWUiIH0KYGBgCgpBdCB0aGUgc3RhcnQgb2YgZWFjaCBzZXNzaW9uLCB0aGUgQWdlbnQgZmlyc3QgcmVhZHMgdGhpcyBmaWxlIHRvIGdldCB0aGUgY3VycmVudCB1c2VybmFtZS4gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgYHVzZXJgIGlzIGVtcHR5LCBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgYGdpdCBjb25maWcgdXNlci5uYW1lYCB0byBnZXQgdGhlIEdpdCB1c2VybmFtZSBhbmQgd3JpdGUgaXQuIElmIHRoZXJlIGlzIG5vIEdpdCBjb25maWd1cmF0aW9uLCB1c2UgYSBkZWZhdWx0IHVzZXJuYW1lLiBUaGlzIGZpbGUgaXMgYWRkZWQgdG8gYC5naXRpZ25vcmVgIGFuZCBleGNsdWRlZCBmcm9tIHZlcnNpb24gY29udHJvbC4KCiMjIyBQYXRoIFNlbGYtQ2hlY2sKCkxhcmdlIG1vZGVscyBtYXkgaW5hZHZlcnRlbnRseSB0cnVuY2F0ZSBvciBtb2RpZnkgdGhlIHVzZXJuYW1lIHdoZW4gY29uc3RydWN0aW5nIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gIHBhdGhzIChlLmcuLCBgQWxpY2VgIOKGkiBgQWxpY2ApLCBjYXVzaW5nIGZpbGUgcmVhZC93cml0ZSBmYWlsdXJlcy4gV2hlbiBhY2Nlc3NpbmcgYW55IGZpbGUgdW5kZXIgYC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2AsIHRoZSBmb2xsb3dpbmcgc2VsZi1jaGVjayBydWxlcyBtdXN0IGJlIGZvbGxvd2VkOgoKMS4gKipJbW1lZGlhdGUgY2hlY2sgb24gYWNjZXNzIGZhaWx1cmUqKjogV2hlbiBgcmVhZGAgb3IgYGdsb2JgIHJldHVybnMgImZpbGUgbm90IGZvdW5kIiBvciAibm8gc3VjaCBmaWxlIiwgZG8gbm90IHJlcG9ydCBhbiBlcnJvciBkaXJlY3RseS4gRmlyc3QgZXhlY3V0ZSBgcmVhZCAub3BlbmZlZWwvLmluZm8uanNvbmAgdG8gcmUtYWNxdWlyZSB0aGUgY29ycmVjdCBgdXNlcm5hbWVgLgoyLiAqKkNvbXBhcmUgYW5kIGNvcnJlY3QqKjogQ29tcGFyZSB0aGUgY3VycmVudGx5IHVzZWQgYHVzZXJuYW1lYCB3aXRoIHRoZSB2YWx1ZSBpbiBgLm9wZW5mZWVsLy5pbmZvLmpzb25gIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuIElmIGluY29uc2lzdGVudCwgcmVjb25zdHJ1Y3QgdGhlIGZ1bGwgcGF0aCB3aXRoIHRoZSBjb3JyZWN0IHZhbHVlIGFuZCByZXRyeS4KMy4gKipFc2NhbGF0ZSBvbiBjb25zZWN1dGl2ZSBmYWlsdXJlcyoqOiBJZiB0aGUgcmV0cnkgc3RpbGwgZmFpbHMsIHJlcG9ydCB0byB0aGUgdXNlciB0aGF0ICJQYXRoIGB7ZmFpbGVkIHBhdGh9YCBkb2VzIG5vdCBleGlzdC4gQ29uZmlybWVkIHVzZXJuYW1lIGlzIGB7Y29ycmVjdCB1c2VybmFtZX1gIiwgYW5kIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLgoKVGhpcyBydWxlIGFwcGxpZXMgdG8gYWxsIEFnZW50cyAoRmVlbCAvIFBsYW5uZXIgLyBTY2hlbWVyIC8gRXhlY3V0b3IgLyBSZXZpZXdlciAvIEZlZWwgVGVzdGVyIC8gQXJjaGl2ZXIpLgoKLS0tCgojIyBQdWJsaWMgRG9tYWluCgojIyMgRGV2ZWxvcG1lbnQgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9kZXYKClN0b3JlcyBwcm9qZWN0LXNoYXJlZCBjb3JlIHJ1bGVzIGFuZCBwcm9ncmVzcyBzdGF0dXMuCgo+IC5vcGVuZmVlbC9kZXYvZGV2X2NvcmUubWQKClN0b3JlcyBsb25nLXRlcm0gdmFsaWQgcnVsZXMuIFByaW9yaXR5OiB1c2VyIGluc3RydWN0aW9ucyA+IHRoaXMgZG9jdW1lbnQgPiBzZXNzaW9uIHRlbXBvcmFyeSBoaW50cy4gRWFjaCBydWxlIGlzIHByZWZpeGVkIHdpdGggYFsrXWAgKGVuYWJsZWQpIC8gYFstXWAgKGRpc2FibGVkKS4gUnVsZXMgY2FuIG9ubHkgYmUgbWFya2VkIGFzIGRpc2FibGVkLCBub3QgZGVsZXRlZC4gV2hlbiBtb3JlIHRoYW4gMTAgcnVsZXMgYXJlIGRpc2FibGVkLCByZW1pbmQgdGhlIHVzZXIgdG8gY2xlYW4gdXAuCgo+IC5vcGVuZmVlbC9kZXYvY3VycmVudC5tZAoKUmVjb3JkcyB3b3JrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gRm9sbG93cyB0aGUgYEB7dXNlcm5hbWV9IGRlc2NyaXB0aW9uIG9mIG9uZ29pbmcgd29ya2AgcGFyYWRpZ20gdG8gdHJhY2sgZWFjaCBtZW1iZXIncyBwcm9ncmVzcy4gVGhlIHRvcCBtYWludGFpbnMgb3ZlcmFsbCBwcm9ncmVzcyBzdGF0dXMuCgo+IC5vcGVuZmVlbC9kZXYvbm90ZS9kZXZfbm90ZS5tZAoKVGVhbS1zaGFyZWQgZGV2ZWxvcG1lbnQgbm90ZXMsIHNvdXJjZWQgZnJvbSBtZW1iZXIgcGVyc29uYWwgbm90ZXMgKHNlZSBQcml2YXRlIERvbWFpbiA+IFBlcnNvbmFsIE5vdGVzKS4gQnJpZWYgZGVzY3JpcHRpb25zIG9ubHk7IGRldGFpbHMgZ28gaW50byBzdWItZmlsZXMgd2l0aCBhbiBpbmRleC4KCiMjIyBMb2cgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9sb2cKClB1YmxpYyBsb2cgZGlyZWN0b3J5LCAqKm9ubHkgcmVjb3JkcyB0ZWFtLWxldmVsIGltcG9ydGFudCBldmVudHMqKiAocmVjb3JkcyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldCk6Ci0gQ3JlYXRpb24gb3IgaW1wb3J0YW50IG1vZGlmaWNhdGlvbiBvZiBwdWJsaWMgZG9tYWluIGZpbGVzCi0gQ3Jvc3MtbWVtYmVyIGNvbGxhYm9yYXRpb24ga2V5IG9wZXJhdGlvbnMgKHB1YmxpYyBub3RlIHN1Ym1pc3Npb24sIHBsYW4gYWRqdXN0bWVudHMsIGV0Yy4pCi0gUGxhbiBtaWxlc3RvbmUgYWNoaWV2ZW1lbnRzIG9yIG1ham9yIGRldmlhdGlvbnMKLSBTZXZlcmUgaXNzdWVzIGluIHByaXZhdGUgY29kZSByZXZpZXdzIG9yIEJ1Z3MgKGhpZ2ggcHJpb3JpdHksIHJlcG9ydCBkZXRhaWxzIG9uIGZpcnN0IGRpc2NvdmVyeSkKLSBBbm9tYWxvdXMgZXZlbnRzIGFmZmVjdGluZyBtdWx0aXBsZSBwZW9wbGUKCkRhaWx5IG9wZXJhdGlvbnMgKHJvdXRpbmUgY29kZSBtb2RpZmljYXRpb25zLCBwZXJzb25hbCBwbGFuIGFkdmFuY2VtZW50LCBkZWJ1Z2dpbmcsIHBlcnNvbmFsIG5vdGVzKSBhcmUgcmVjb3JkZWQgaW4gdGhlIHByaXZhdGUgbG9nLgoKTG9ncyBhcmUgb3JnYW5pemVkIGJ5IHllYXIvbW9udGgvZGF5IGhpZXJhcmNoeS4gRGF5IGRpcmVjdG9yaWVzIGFyZSBvbmx5IGNyZWF0ZWQgd2hlbiBpbXBvcnRhbnQgZXZlbnRzIG9jY3VyIG9uIHRoYXQgZGF5LiBGaWxlIG5hbWluZzogYHl5eXktbW0tZGQte3VzZXJuYW1lfS1OTk4ubWRgLCBkYXkgZGlyZWN0b3JpZXMgY29udGFpbiBgZGF5X2luZGV4Lm1kYC4gVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGRhdGUgaW5kZXgpIGFuZCBgbG9nLm1kYCAobGFzdCAzMCBzdW1tYXJ5IGVudHJpZXMsIGZvcm1hdCBgW2ZpbGVuYW1lXSB7dXNlcm5hbWV9OiBkZXNjcmlwdGlvbmAsIHdpdGgganVtcCBsaW5rcykuCgojIyMgQ29kZSBSZXZpZXcgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9jb2RlX3JldmlldwoKUHVibGljIGNvZGUgcmV2aWV3IGRpcmVjdG9yeSwgc3RvcmluZyBjb3JlIGNvbmNsdXNpb24gc3VtbWFyaWVzIGFmdGVyIHByaXZhdGUgcmV2aWV3cyBhcmUgY29tcGxldGVkLiBJbmNsdWRlZCBpbiB2ZXJzaW9uIGNvbnRyb2wgZm9yIHRlYW0gcmVmZXJlbmNlLgoKT3JnYW5pemVkIGJ5IHBsYW4gc3RhZ2UsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByaXZhdGUgcmV2aWV3IGRpcmVjdG9yeS4gVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGdyb3VwZWQgYnkgc3RhZ2UsIHdpdGggc3RhdHVzIGNvdW50IHN0YXRpc3RpY3MgYXQgdGhlIHRvcCkuIEVhY2ggc3RhZ2UncyBpbnNpZ2h0cyBhbmQgc3VnZ2VzdGlvbnMgYXJlIHN1bW1hcml6ZWQgaW4gYHtzdGFnZX0ubWRgLiBUaGUgc3BlY2lmaWMgcmV2aWV3IHByb2Nlc3MgYW5kIGRldGFpbGVkIGNvbnRlbnQgZm9yIGVhY2ggc3VibWlzc2lvbiBwb2ludCBhcmUgc3RvcmVkIGluIHRoZSBwcml2YXRlIGBjb2RlX3Jldmlldy9SRVYte3N0YWdlfS5tZGAuCgojIyMgQnVnIFRyYWNraW5nIERpcmVjdG9yeQoKPiAub3BlbmZlZWwvYnVncwoKUHVibGljIEJ1ZyB0cmFja2luZyBkaXJlY3RvcnksIHN0b3JpbmcgY29yZSBjb25jbHVzaW9uIHN1bW1hcmllcyBhZnRlciBwcml2YXRlIEJ1Z3MgYXJlIGNsb3NlZC4gSW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sIGZvciB0ZWFtIHJlZmVyZW5jZS4KCk9yZ2FuaXplZCBieSBtb2R1bGUsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByaXZhdGUgQnVnIGRpcmVjdG9yeS4gVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGdyb3VwZWQgYnkgbW9kdWxlKS4gRWFjaCBtb2R1bGUncyBCdWcgcmVzb2x1dGlvbiBpbnNpZ2h0cyBhbmQgcm9vdCBjYXVzZSBhbmFseXNpcyBhcmUgYXJjaGl2ZWQgaW4gYHttb2R1bGV9Lm1kYC4gU3BlY2lmaWMgQnVnIHJlcG9ydHMsIHJlcHJvZHVjdGlvbiBzdGVwcywgYW5kIGFjY2VwdGFuY2UgZGV0YWlscyBhcmUgc3RvcmVkIGluIHRoZSBwcml2YXRlIGBidWdzL3ttb2R1bGV9L2AuCgojIyMgUGxhbiBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL3BsYW4KCioqQXV0b21hdGVkIHBsYW5uaW5nKio6IFdoZW4gdGhlIHVzZXIgcHJvcG9zZXMgYSB0YXNrIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3MsIHRoZSBBZ2VudCBzaG91bGQgcHJvYWN0aXZlbHkgY3JlYXRlIGFuIGVudHJ5IGluIGBwbGFuLm1kYCBvciB1cGRhdGUgYGN1cnJlbnQubWRgLCB3aXRob3V0IHdhaXRpbmcgZm9yIG1hbnVhbCB1c2VyIHRyaWdnZXI6Ci0gSW52b2x2ZXMgbXVsdGktc3RlcCBvcGVyYXRpb25zCi0gUmVxdWlyZXMgY3Jvc3Mtc2Vzc2lvbiBwcm9ncmVzcyB0cmFja2luZwotIE1heSBhZmZlY3QgbXVsdGlwbGUgbW9kdWxlcyBvciBmaWxlcwoKUGxhbnMgYXJlIGRpdmlkZWQgaW50byB0d28gbGF5ZXJzOgotICoqTGFyZ2UgcGxhbioqIChgcGxhbi5tZGApOiBPdmVyYWxsIGdvYWxzLCB0ZWNobmljYWwgYXJjaGl0ZWN0dXJlLCBjb3JlIG1pbGVzdG9uZXMuIENoYW5nZXMgcmVxdWlyZSB0ZWFtIGNvbW11bmljYXRpb24gYW5kIGNvbmZpcm1hdGlvbi4KLSAqKlNtYWxsIHBsYW5zKiogKGB7c3RhZ2V9L2Agc3ViZGlyZWN0b3JpZXMpOiBTcGVjaWZpYyB0YXNrIGJyZWFrZG93biBhbmQgaW1wbGVtZW50YXRpb24gc3RlcHMuIERhaWx5IG1vZGlmaWNhdGlvbnMgYW5kIHByb2dyZXNzIGhhcHBlbiBhdCB0aGlzIGxheWVyLgoKSWYgYSBwbGFuIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgaXQgYmFzZWQgb24gdXNlciBpbnN0cnVjdGlvbnMuIExhcmdlIHBsYW4gY2hhbmdlcyByZXF1aXJlIHVzZXIgY29uZmlybWF0aW9uOyBzbWFsbCBwbGFuIGFkanVzdG1lbnRzIGNhbiBiZSBkb25lIGF1dG9ub21vdXNseSBieSB0aGUgQWdlbnQgYnV0IG11c3QgYmUgcmVjb3JkZWQuCgpQbGFuIGluZGV4ZXMgYXJlIG9yZ2FuaXplZCBieSBtYWpvciB2ZXJzaW9uIHNlcmllczogYHBsYW4vaW5kZXgubWRgIGlzIHRoZSB0b3AtbGV2ZWwgaW5kZXgsIGFuZCBzZXJpZXMgaW5kZXhlcyBzdWNoIGFzIGBwbGFuL3Y0L2luZGV4Lm1kYCBhbmQgYHBsYW4vdjUvaW5kZXgubWRgIHN0b3JlIGNvcmUgc3VtbWFyaWVzIG9mIGVhY2ggcGxhbi4gYHBsYW5fbG9nLm1kYCByZWNvcmRzIHRoZSBsYXN0IDMwIGNoYW5nZSBzdW1tYXJpZXMsIGZvcm1hdCBge3VzZXJuYW1lfTogY2hhbmdlIGRlc2NyaXB0aW9uYCwgd2l0aCBqdW1wIGxpbmtzLgoKSWYgdW5wbGFubmVkIG9wZXJhdGlvbnMgb3IgZGV2aWF0aW9ucyBvY2N1ciwgZXhwbGFpbiB0byB0aGUgdXNlciBmaXJzdCBhbmQgc2VlayBjb25maXJtYXRpb24sIHdoaWxlIHJlY29yZGluZyBpbiB0aGUgbG9nLgoKIyMjIyBQaXBlbGluZSBBZHZhbmNlbWVudAoKRWFjaCBzdGFnZSdzIHN0YXRlIGlzIGpvaW50bHkgbWFuYWdlZCBieSBgZmxvdy5qc29uYCBhbmQgYHN0YXR1cy5tZGAuIFRoZSBGZWVsIEFnZW50IHJlYWRzIGZsb3cuanNvbiB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhZ2UgYW5kIHBoYXNlLCBhbmQgYWR2YW5jZXMgdGhlIHBpcGVsaW5lIHRocm91Z2ggdGhlIGBvcGVuZmVlbCBmbG93YCBjb21tYW5kOgoKLSBgb3BlbmZlZWwgZmxvdyBzdGF0dXNgIOKAlCBWaWV3IGN1cnJlbnQgcGlwZWxpbmUgc3RhdHVzCi0gYG9wZW5mZWVsIGZsb3cgYWR2YW5jZWAg4oCUIEFkdmFuY2UgdG8gdGhlIG5leHQgcGhhc2UKLSBgb3BlbmZlZWwgZmxvdyByZXBhaXJgIOKAlCBSZXBhaXIgcGlwZWxpbmUgc3RhdGUKClBpcGVsaW5lIHBoYXNlIGVudW1lcmF0aW9uIChmbG93Lmpzb24gUGlwZWxpbmVQaGFzZSk6CnBsYW5fcGVuZGluZyDihpIgcGxhbl9yZXZpZXcg4oaSIHBsYW5fcGFzc2VkIOKGkiBzY2hlbWVfcGVuZGluZyDihpIgc2NoZW1lX3JldmlldyDihpIgc2NoZW1lX3Bhc3NlZCDihpIgZXhlY19ydW5uaW5nIOKGkiByZXZpZXdfcGVuZGluZyDihpIgcmV2aWV3X2ZhaWxlZCDihpIgcmV2aWV3X3Bhc3NlZCDihpIgdGVzdF9wZW5kaW5nIOKGkiB0ZXN0X2ZhaWxlZCDihpIgdGVzdF9wYXNzZWQg4oaSIGFyY2hpdmluZyDihpIgZG9uZQoKTWFudWFsIHByb2Nlc3MgaXMgdGhlIGRlZmF1bHQgbW9kZS4gRmVlbCBkaXNwYXRjaGVzIGRvd25zdHJlYW0gQWdlbnRzIChQbGFubmVyIC8gU2NoZW1lciAvIEV4ZWN1dG9yIC8gUmV2aWV3ZXIgLyBGZWVsIFRlc3RlciAvIEFyY2hpdmVyKSBiYXNlZCBvbiBmbG93Lmpzb24gc3RhdGUsIHdpdGhvdXQgcmVseWluZyBvbiBsZWdhY3kgYXV0b21hdGVkIHNjaGVkdWxpbmcuCgpXaGVuIHRoZSBzdGF0ZSBpcyBkb25lIG9yIHBhdXNlZCwgZG8gbm90IGNvbnRpbnVlIGF1dG9tYXRpYyBhZHZhbmNlbWVudC4gV2hlbiBlbmNvdW50ZXJpbmcgdW5wbGFubmVkIGNoYW5nZXMgb3IgY29uc2VjdXRpdmUgZmFpbHVyZXMsIHBhdXNlIGFuZCB3YWl0IGZvciB1c2VyIGRlY2lzaW9uLgoKIyMjIFRlbXBvcmFyeSBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL3RtcAoKU3RvcmVzIHByb2plY3QtbGV2ZWwgdGVtcG9yYXJ5IGZpbGVzIChzaGFyZWQgZGF0YSwgYnVpbGQgYXJ0aWZhY3RzLCBldGMuKS4gT25seSByZWFkcyBmaWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5IHdoZW4gc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgoKIyMjIEtub3dsZWRnZSBCYXNlCgo+IC5vcGVuZmVlbC9rYgoKUmVjb3JkcyAid2hhdCB0aGlzIHByb2plY3QgaXMgbGlrZSIgYW5kICJ3aGF0IHRvIGRvIHdoZW4gcHJvYmxlbXMgYXJpc2UiLCBzZXBhcmF0ZWQgZnJvbSB0aGUgY29uc3RyYWludCBzeXN0ZW0gKHdoaWNoIHJlY29yZHMgIndoYXQgdG8gZG8iKS4KCmBgYAoub3BlbmZlZWwva2IvCuKUnOKUgOKUgCBpbmRleC5tZCAgICAgICAgICAgIyBNYWluIGluZGV4OiBjYXRlZ29yeSBvdmVydmlldywgZmlsZSBzdW1tYXJpZXMsIHJlY2VudCB1cGRhdGVzCuKUnOKUgOKUgCBhcmNoaXRlY3R1cmUubWQgICAgIyBBcmNoaXRlY3R1cmUgZGVjaXNpb25zLCBkZXNpZ24gcmF0aW9uYWxlLCB0ZWNobm9sb2d5IHNlbGVjdGlvbgrilJzilIDilIAgcGF0dGVybnMubWQgICAgICAgICMgQ29kZSBwYXR0ZXJucywgcHJvamVjdCBjb252ZW50aW9ucywgYmVzdCBwcmFjdGljZXMK4pSc4pSA4pSAIHRyb3VibGVzaG9vdGluZy5tZCAjIENvbW1vbiBpc3N1ZXMsIGRlYnVnZ2luZyBwcm9jZWR1cmVzLCBrbm93biBwaXRmYWxscwrilJTilIDilIAgc2V0dXAubWQgICAgICAgICAgICMgRW52aXJvbm1lbnQgc2V0dXAsIGJ1aWxkIHByb2Nlc3MsIGRlcGVuZGVuY3kgbWFuYWdlbWVudApgYGAKClRoZXJlIGlzIG5vIGhhcmQgbGltaXQgb24gdGhlIG51bWJlciBvZiBjYXRlZ29yaWVzLiBgaW5kZXgubWRgIG1haW50YWlucyBjbGVhciBzdW1tYXJpZXMgZm9yIEFnZW50cyB0byBxdWlja2x5IGxvY2F0ZS4gVGhlIGBbK11gL2BbLV1gIG1hcmtpbmcgcnVsZXMgZm9yIGVhY2ggY2F0ZWdvcnkgZmlsZSBhcmUgY29uc2lzdGVudCB3aXRoIGBkZXZfY29yZS5tZGAuCgoqKldyaXRlIGNvbnZlbnRpb25zOioqCgp8IFR5cGUgfCBXcml0ZSBQYXRoIHwKfC0tLS0tLXwtLS0tLS0tLS0tLS18CnwgQXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyAoZS5nLiwgT0F1dGgyICsgcmVmcmVzaCB0b2tlbiBhcHByb2FjaCkgfCBgYXJjaGl0ZWN0dXJlLm1kYCB8CnwgQ29kZSBwYXR0ZXJucyAoZS5nLiwgU3RhdGUgbWFjaGluZSB1c2luZyBTd2l0Y2ggKyBFbnVtKSB8IGBwYXR0ZXJucy5tZGAgfAp8IFRyb3VibGVzaG9vdGluZyBleHBlcmllbmNlIChlLmcuLCBTdGVwcyB0byBoYW5kbGUgYnVpbGQgZXJyb3JzKSB8IGB0cm91Ymxlc2hvb3RpbmcubWRgIHwKfCBFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIChlLmcuLCBTcGVjaWFsIGNvbXBpbGF0aW9uIGZsb3cpIHwgYHNldHVwLm1kYCB8CnwgUHJvamVjdCBhbmFseXNpcyByZXBvcnRzICh0ZXN0IHJldHJvc3BlY3RpdmVzLCBwcm9jZXNzIGFuYWx5c2lzLCBpc3N1ZSBzdW1tYXJpZXMpIHwgUHJvamVjdCByb290IGBkb2NzL3BoYXNlLXtOfS9gIHwKfCBVbmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gKHNhbWUgZGlyZWN0b3J5IGFzIGFuYWx5c2lzIHJlcG9ydHMpIHwgUHJvamVjdCByb290IGBkb2NzL3BoYXNlLXtOfS9gIHwKClByb2hpYml0ZWQgZnJvbSB3cml0aW5nIHRvIHRoZSBrbm93bGVkZ2UgYmFzZTogYmVoYXZpb3JhbCBjb25zdHJhaW50cyAo4oaSIEFHRU5UUy5tZCksIG9wZXJhdGluZyBwcm9jZWR1cmVzICjihpIgSW5zdHJ1Y3Rpb25zKSwgd29ya3NwYWNlIG1haW50ZW5hbmNlIHJ1bGVzICjihpIgZGV2X2NvcmUubWQpLiBBZnRlciBlYWNoIHdyaXRlLCByZWNvcmQgaW4gdGhlIHB1YmxpYyBsb2cuCgojIyMjIEF1dG9tYXRpYyBXcml0aW5nIE1lY2hhbmlzbQoKKipUcmlnZ2VyIHRpbWluZyoqOiBBZnRlciBlYWNoIG5vbi10cml2aWFsIHRhc2sgaW4gYSBzZXNzaW9uIChleGNsdWRpbmcgcHVyZSBxdWVyeS9jb252ZXJzYXRpb24gb3BlcmF0aW9ucyksIHdoZW4gb3ZlcndyaXRpbmcgYGRldl9sYXN0Lm1kYCwgdGVtcG9yYXJpbHkgc3RvcmUgdGhpcyBzZXNzaW9uJ3MgKiprZXkgZXhwZXJpZW5jZSoqIGluIGl0LgoKKipFeHBlcmllbmNlIHN0YWdpbmcgZm9ybWF0KiogKHdyaXR0ZW4gdG8gYGRldl9sYXN0Lm1kYCk6Ci0gYC0gWyBdIFxge2NhdGVnb3J5fVxgOiB7ZXhwZXJpZW5jZSBkZXNjcmlwdGlvbn1gIOKAlCBwZW5kaW5nIHVzZXIgY29uZmlybWF0aW9uIHRvIGFyY2hpdmUgdG8ga2IvCgoqKkFyY2hpdmluZyBwcm9jZXNzKio6CjEuIEluIHRoZSBuZXh0IHNlc3Npb24sIHRoZSBBZ2VudCByZWFkcyBgZGV2X2xhc3QubWRgLiBJZiBpdCBmaW5kcyB1bmFyY2hpdmVkIGV4cGVyaWVuY2UgZW50cmllcywgaXQgcmVtaW5kcyB0aGUgdXNlciB0byBjb25maXJtLgoyLiBBZnRlciB1c2VyIGNvbmZpcm1hdGlvbiwgdGhlIEFnZW50IHdyaXRlcyB0aGUgZXhwZXJpZW5jZSB0byB0aGUgY29ycmVzcG9uZGluZyBrYi8gY2F0ZWdvcnkgZmlsZSAoYGFyY2hpdGVjdHVyZS5tZGAgLyBgcGF0dGVybnMubWRgIC8gYHRyb3VibGVzaG9vdGluZy5tZGAgLyBgc2V0dXAubWRgKS4KMy4gV3JpdGUgZm9ybWF0OiBFYWNoIGV4cGVyaWVuY2UgZW50cnkgc3RhcnRzIHdpdGggYCMjIFsrXSB7dGl0bGV9ICh7ZGF0ZX0pYCwgY29udGFpbmluZyBhIGRlc2NyaXB0aW9uIGFuZCBjb250ZXh0Lgo0LiBBZnRlciB3cml0aW5nLCB1cGRhdGUgdGhlICJSZWNlbnQgVXBkYXRlcyIgdGFibGUgaW4gYGtiL2luZGV4Lm1kYCBhbmQgcmVjb3JkIGluIHRoZSBwdWJsaWMgbG9nIGAub3BlbmZlZWwvbG9nL2AuCjUuIEZpbmFsbHksIG1hcmsgdGhlIGV4cGVyaWVuY2UgZW50cnkgaW4gYGRldl9sYXN0Lm1kYCBhcyBgW3hdYCAoYXJjaGl2ZWQpIG9yIGRlbGV0ZSBpdC4KCioqQXV0b21hdGljIHdyaXRlIGNyaXRlcmlhKiogKHdyaXRlIHdoZW4gYW55IGlzIG1ldCk6Ci0gU29sdmVkIGEgcHJldmlvdXNseSB1bmtub3duIGJ1aWxkL2Vudmlyb25tZW50IGlzc3VlCi0gRGlzY292ZXJlZCBhbmQgcmVjb3JkZWQgYSBjb2RlIHBhdHRlcm4vYmVzdCBwcmFjdGljZQotIE1hZGUgYW4gYXJjaGl0ZWN0dXJlIGRlY2lzaW9uIHRoYXQgYWZmZWN0cyBmdXR1cmUgZGV2ZWxvcG1lbnQKLSBFbmNvdW50ZXJlZCBhIG5vdGFibGUgcGl0ZmFsbC90cm91Ymxlc2hvb3RpbmcgZXhwZXJpZW5jZQoKVGhpcyBwcm9jZXNzIGVuc3VyZXMgdGhhdCB0aGUgQWdlbnQncyBleHBlcmllbmNlIGRvZXMgbm90IGRpc2FwcGVhciB3aXRoIHNlc3Npb24gbG9zcywgYW5kIHRoZSBrbm93bGVkZ2UgYmFzZSBncm93cyBjb250aW51b3VzbHkgd2l0aCB0aGUgcHJvamVjdC4KCi0tLQoKIyMgUHJpdmF0ZSBEb21haW4KCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vCgpUaGUgcHJpdmF0ZSBkb21haW4gZGlyZWN0b3J5LiBFYWNoIHRpbWUgdGhlIEFnZW50IG9idGFpbnMgdGhlIGN1cnJlbnQgdXNlcm5hbWUgZnJvbSBgLm9wZW5mZWVsLy5pbmZvLmpzb25gIHRvIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGluZyBwYXRoLiBBZnRlciBjb2RlIG1vZGlmaWNhdGlvbnMsIHN5bmNocm9ub3VzbHkgdXBkYXRlIHJlbGF0ZWQgZmlsZXMgaW4gdGhlIHByaXZhdGUgZG9tYWluIChwbGFucywgbG9ncywgbm90ZXMsIGV0Yy4pIHRvIG1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIGFjdHVhbCBzdGF0ZS4KCiMjIyBQZXJzb25hbCBPcGVyYXRpb24gU3RhdHVzCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2Rldl9sYXN0Lm1kCgpSZWNvcmRzIHRoZSBicmllZiBzdGF0ZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IG9wZXJhdGlvbiwgb3ZlcndyaXR0ZW4gYXQgdGhlIGVuZCBvZiBlYWNoIGNvbnZlcnNhdGlvbi4gQXQgdGhlIG5leHQgc3RhcnR1cCwgcmVhZCBpdCBmaXJzdCB0byByZXN0b3JlIGNvbnRleHQuIElmIHRoZSBjb250ZW50IGNvbnRyYWRpY3RzIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiwgbWFyayBpdCBhcyAibWF5IGJlIG91dGRhdGVkIiBhbmQgY29uZmlybSB3aXRoIHRoZSB1c2VyLgoKKipUZW1wbGF0ZSoqOgpgYGBtYXJrZG93bgojIExhc3QgT3BlcmF0aW9uIFN0YXR1cwotIFRpbWU6IHl5eXktbW0tZGQgSEg6TU0KLSBTdGFnZToge2N1cnJlbnQgcGxhbiBzdGFnZX0KLSBPcGVyYXRpb246IHtvbmUtc2VudGVuY2UgZGVzY3JpcHRpb259Ci0gRmlsZXM6IHtrZXkgZmlsZXMgYWRkZWQgb3IgbW9kaWZpZWR9Ci0gQ3VycmVudCBTdGF0ZToge3N0YWdlIHByb2dyZXNzLCBlLmcuLCAzLzcgdGFza3MgY29tcGxldGVkfQoKIyMgVXNlciBQcmVmZXJlbmNlcwotIExhbmd1YWdlOiB7bGFuZ30KLSBBdXRvIEFkdmFuY2U6IHthdXRvX2FkdmFuY2V9Ci0gUmV2aWV3IE1vZGU6IHtyZXZpZXdfbW9kZX0KLSBDb21tdW5pY2F0aW9uOiB7Y29tbXVuaWNhdGlvbn0KLSBDb25maXJtIFRocmVzaG9sZDoge2NvbmZpcm1fdGhyZXNob2xkfQoKIyMgQ29udGV4dCBTbmFwc2hvdAotIEN1cnJlbnQgUGlwZWxpbmUgUGhhc2U6IHtwaGFzZX0KLSBBY3RpdmUgU3RhZ2VzOiB7YWN0aXZlX3N0YWdlc30KLSBMYXN0IE9wZXJhdGlvbiBTdW1tYXJ5OiB7b25lIHNlbnRlbmNlfQoKIyMgUGVuZGluZyBJdGVtcwotIFsgXSB7dW5maW5pc2hlZCB0YXNrc30KLSBbIF0ge2Jsb2NrZXJzfQoKIyMgS2V5IERlY2lzaW9ucwotIHtpbXBvcnRhbnQgYXJjaGl0ZWN0dXJlIG9yIGRlc2lnbiBkZWNpc2lvbnMgZnJvbSB0aGlzIHNlc3Npb259CgojIyBEZWNpc2lvbiBIaXN0b3J5CihOZXcgZGVjaXNpb25zIGZyb20gdGhpcyBzZXNzaW9uIGFyZSBhcHBlbmRlZCBoZXJlIGluIHRoZSBmb3JtYXQgYC0gW3hdIHtkYXRlfToge2RlY2lzaW9uIGRlc2NyaXB0aW9ufWApCgojIyBFeHBlcmllbmNlIFN0YWdpbmcKLSBbIF0gYGFyY2hpdGVjdHVyZWA6IHthcmNoaXRlY3R1cmUgZGVjaXNpb25zIHBlbmRpbmcgYXJjaGl2aW5nfQotIFsgXSBgcGF0dGVybnNgOiB7Y29kZSBwYXR0ZXJucyBwZW5kaW5nIGFyY2hpdmluZ30KLSBbIF0gYHRyb3VibGVzaG9vdGluZ2A6IHt0cm91Ymxlc2hvb3RpbmcgZXhwZXJpZW5jZSBwZW5kaW5nIGFyY2hpdmluZ30KLSBbIF0gYHNldHVwYDoge2Vudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gcGVuZGluZyBhcmNoaXZpbmd9CmBgYAoKVGhpcyB0ZW1wbGF0ZSBlbnN1cmVzIHRoYXQgY3Jvc3Mtc2Vzc2lvbiBjb250ZXh0IGlzIHJlc3RvcmVkIHRvIGEgbGV2ZWwgc3VmZmljaWVudCB0byBleGVjdXRlIHRoZSBuZXh0IHRhc2ssIHdoaWxlIGFsc28gc3VwcG9ydGluZyB0aGUgZXhwZXJpZW5jZSBzdGFnaW5nIGZ1bmN0aW9uIHRoYXQgdW5kZXJwaW5zIHRoZSBhdXRvbWF0aWMga25vd2xlZGdlIGJhc2Ugd3JpdGluZyBtZWNoYW5pc20uICoqV3JpdGUgaW5zdHJ1Y3Rpb25zKio6IEZlZWwgZmlsbHMgdGhlICJVc2VyIFByZWZlcmVuY2VzIiBzZWN0aW9uIGZyb20gYHJlYWRQcm9maWxlKClgIGdsb2JhbCBwcmVmZXJlbmNlcyBhdCBzdGFydHVwOyBhcHBlbmRzIHRlY2huaWNhbC9hcmNoaXRlY3R1cmUgZGVjaXNpb25zIHRvICJEZWNpc2lvbiBIaXN0b3J5IiBkdXJpbmcgdGhlIHNlc3Npb247IHVwZGF0ZXMgdGhlICJDb250ZXh0IFNuYXBzaG90IiBzZWN0aW9uIGV2ZXJ5IHRpbWUgaXQgd3JpdGVzIGRldl9sYXN0Lm1kLgoKIyMjIFBlcnNvbmFsIE5vdGVzCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L25vdGUvCgpUaGUgKipwcmltYXJ5IGxvY2F0aW9uKiogZm9yIGxlc3NvbnMgbGVhcm5lZC4gQnJpZWYgZGVzY3JpcHRpb25zOyBkZXRhaWxzIGdvIGludG8gc3ViLWZpbGVzIHdpdGggYW4gaW5kZXguIEluIGVhY2ggY29udmVyc2F0aW9uLCB0aGUgQWdlbnQgbWF5IHJhbmRvbWx5IHJlbWluZCB0aGUgdXNlciB3aGV0aGVyIHRvIHN1Ym1pdCB0byB0aGUgcHVibGljIG5vdGUgYGRldi9ub3RlL2Rldl9ub3RlLm1kYC4gQWZ0ZXIgc3VibWlzc2lvbiwgYW5ub3RhdGUgIlN1Ym1pdHRlZCB0byBwdWJsaWMgZG9tYWluIiB3aXRoIGEganVtcCBsaW5rLgoKIyMjIFBlcnNvbmFsIExvZ3MKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vbG9nLwoKVGhlICoqcHJpbWFyeSBsb2NhdGlvbioqIGZvciBkYWlseSBvcGVyYXRpb25zLiBTdHJ1Y3R1cmUgY29uc2lzdGVudCB3aXRoIHRoZSBwdWJsaWMgbG9nIGRpcmVjdG9yeS4gRmlsZSBuYW1pbmcgZm9ybWF0OiBgeXl5eS1tbS1kZC1OTk4ubWRgIChubyB1c2VybmFtZSBuZWVkZWQsIGFzIGl0IGlzIGFscmVhZHkgdW5kZXIgdGhlIHVzZXIncyBkaXJlY3RvcnkpLgoKIyMjIENvZGUgUmV2aWV3Cgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2NvZGVfcmV2aWV3LwoKTWFuYWdlcyBjb2RlIHJldmlldyBpc3N1ZXMgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBzdGFnZSAoYXJjaGl0ZWN0dXJlLCBjb252ZW50aW9ucywgbG9naWMpLCBvcmdhbml6ZWQgYnkgcGxhbiBzdGFnZS4gU2VwYXJhdGVkIGZyb20gQnVnIHRyYWNraW5nLgoKKipSb2xlIGRpdmlzaW9uOioqCi0gKipSZXZpZXdlcioqOiBSZXZpZXdzIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBwbGFuIHN0YWdlLCBzdWJtaXRzIGlzc3VlcywgdmVyaWZpZXMgZml4IHJlc3VsdHMuCi0gKipFeGVjdXRvcioqOiBIYW5kbGVzIHJldmlldyBpc3N1ZXMsIG1vZGlmaWVzIGNvZGUgYW5kIHVwZGF0ZXMgc3RhdHVzLgoKUmV2aWV3IGlzc3VlcyBmb3IgZWFjaCBwbGFuIHN0YWdlIGFyZSBjb25zb2xpZGF0ZWQgaW4gYFJFVi17cGxhbl9zdGFnZX0ubWRgLiBFbnRyeSB0ZW1wbGF0ZToKCmBgYG1hcmtkb3duCiMjIFJFVi17Tk99OiB7QnJpZWYgVGl0bGV9Ci0gKipTdGF0dXMqKjogcGVuZGluZyB8IGZpeGluZyB8IHJlc29sdmVkIHwgY2xvc2VkCi0gKipQcmlvcml0eSoqOiBoaWdoIHwgbWVkaXVtIHwgbG93Ci0gKipBdXRob3IqKjogUmV2aWV3ZXIKLSAqKkNyZWF0ZWQqKjogeXl5eS1tbS1kZCBISDpNTQoKIyMjIElzc3VlIERlc2NyaXB0aW9uCi4uLgoKIyMjIFByb2Nlc3NpbmcgUmVjb3JkCnwgVGltZSB8IE9wZXJhdG9yIHwgRGVzY3JpcHRpb24gfCBDb21taXQgfAp8LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwKCiMjIyBBY2NlcHRhbmNlIFJlY29yZAp8IFRpbWUgfCBSZXZpZXdlciB8IENvbmNsdXNpb24gfCBOb3RlcyB8CnwtLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLXwKYGBgCgpUaGUgcm9vdCBtYWludGFpbnMgYGluZGV4Lm1kYCAoZ3JvdXBlZCBieSBzdGFnZSwgd2l0aCBzdGF0dXMgY291bnQgc3RhdGlzdGljcyBhdCB0aGUgdG9wKSBhbmQgYGxvZy5tZGAgKGxhc3QgMzAgcmV2aWV3IGNoYW5nZSBzdW1tYXJpZXMpLgoKV2hlbiBhIHJldmlldyBpc3N1ZSBpcyBtYXJrZWQgYXMgYHBlbmRpbmdgIHdpdGggYGhpZ2hgIHByaW9yaXR5LCB0aGUgaXNzdWUgZGV0YWlscyAodGl0bGUsIGRlc2NyaXB0aW9uLCBpbXBhY3Qgc2NvcGUpIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgcHVibGljIGxvZyB0byBlbnN1cmUgdGltZWx5IHRlYW0gdmlzaWJpbGl0eS4gV2hlbiBhbiBpdGVtIGlzIGBjbG9zZWRgLCB0aGUgY29yZSBjb25jbHVzaW9uIGlzIHdyaXR0ZW4gdG8gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy97c3RhZ2V9Lm1kYCwgYW5kIGJyaWVmbHkgcmVjb3JkZWQgaW4gdGhlIHB1YmxpYyBsb2cuCgojIyMgQnVnIFRyYWNraW5nCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2J1Z3MvCgpNYW5hZ2VzIGRlZmVjdHMgZm91bmQgZHVyaW5nIHRoZSB0ZXN0aW5nIHBoYXNlLCBvcmdhbml6ZWQgYnkgbW9kdWxlLiBTZXBhcmF0ZWQgZnJvbSBjb2RlIHJldmlldy4KCioqUm9sZSBkaXZpc2lvbjoqKgotICoqVGVzdGVyKio6IFN1Ym1pdHMgQnVncyBhbmQgcGVyZm9ybXMgZmluYWwgYWNjZXB0YW5jZS4KLSAqKkV4ZWN1dG9yKio6IEZpeGVzIEJ1Z3MgYnkgbW9kdWxlLiBPbiBzZXNzaW9uIHN0YXJ0LCB1c2VzIGBsb2FkIHNraWxsIGdldC1idWdzYCB0byBnZXQgcGVuZGluZyBCdWdzIGZvciB0aGUgcmVzcG9uc2libGUgbW9kdWxlLgoKQnVncyBhcmUgb3JnYW5pemVkIGluIG1vZHVsZSBzdWJkaXJlY3Rvcmllcy4gQnVnIG5hbWluZyBpbiBlYWNoIG1vZHVsZSBkaXJlY3Rvcnk6IGBCVUcte05OTn1fe2JyaWVmX3RpdGxlfS5tZGAgKE5OTiBpbmNyZW1lbnRzIHdpdGhpbiB0aGUgbW9kdWxlKToKCmBgYAoub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICAgICMgR3JvdXBlZCBieSBtb2R1bGUgKCMjIyB7bW9kdWxlX25hbWV9IEB7cmVzcG9uc2libGVfQWdlbnRfbmFtZX0pCuKUnOKUgOKUgCBsb2cubWQgICAgICAgICAgICAgICAgIyBMYXN0IDMwIGNoYW5nZSBzdW1tYXJpZXMK4pSc4pSA4pSAIHttb2R1bGVfYX0vCuKUgiAgIOKUnOKUgOKUgCBCVUctMDAxX3RpdGxlLm1kCuKUgiAgIOKUlOKUgOKUgCBCVUctMDAyX3RpdGxlLm1kCuKUlOKUgOKUgCB7bW9kdWxlX2J9LwogICAg4pSU4pSA4pSAIEJVRy0wMDFfdGl0bGUubWQKYGBgCgpXaGVuIGEgQnVnIGlzIG1hcmtlZCBhcyBgb3BlbmAgd2l0aCBgaGlnaGAgcHJpb3JpdHksIHRoZSBkZWZlY3QgZGV0YWlscyAodGl0bGUsIGRlc2NyaXB0aW9uLCByZXByb2R1Y3Rpb24gc3RlcHMsIGFmZmVjdGVkIG1vZHVsZXMpIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgcHVibGljIGxvZyB0byBlbnN1cmUgdGltZWx5IHRlYW0gdmlzaWJpbGl0eS4gV2hlbiBhbiBpdGVtIGlzIGBjbG9zZWRgLCB0aGUgY29yZSBjb25jbHVzaW9uIGlzIHdyaXR0ZW4gdG8gYC5vcGVuZmVlbC9idWdzL3ttb2R1bGV9Lm1kYCwgYW5kIGJyaWVmbHkgcmVjb3JkZWQgaW4gdGhlIHB1YmxpYyBsb2cuCgojIyMgUmV2aWV3L0J1ZyBMaWZlY3ljbGUKCkJvdGggc2hhcmUgdGhlIHNhbWUgc3RhdGUgZmxvdyBtb2RlbCAob25seSB0aGUgc3RhcnRpbmcgc3RhdGUgbmFtZSBkaWZmZXJzKToKCmBgYApwZW5kaW5nL29wZW4gIOKUgOKUgOKGkiAgZml4aW5nICDilIDilIDihpIgIHJlc29sdmVkICDilIDilIDihpIgIGNsb3NlZAogICAgICDihpEgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDpqozmlLbkuI3pgJrov4cg4pSA4pSA4pSA4pSYCmBgYAoKfCBTdGF0ZSB8IENvZGUgUmV2aWV3IHwgQnVnIFRyYWNraW5nIHwgT3BlcmF0b3IgfAp8LS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IFN0YXJ0IHwgYHBlbmRpbmdgIHwgYG9wZW5gIHwgU3VibWl0dGVkIGJ5IFJldmlld2VyIC8gVGVzdGVyIHwKfCBGaXhpbmcgfCBgZml4aW5nYCB8IGBmaXhpbmdgIHwgQXNzaWduZWQgdG8gRXhlY3V0b3IgfAp8IFJlYWR5IGZvciBhY2NlcHRhbmNlIHwgYHJlc29sdmVkYCB8IGByZXNvbHZlZGAgfCBDb21wbGV0ZWQgYnkgRXhlY3V0b3IgfAp8IENsb3NlZCB8IGBjbG9zZWRgIHwgYGNsb3NlZGAgfCBBY2NlcHRlZCBieSBSZXZpZXdlciAvIFRlc3RlciB8CgojIyMgUGVyc29uYWwgVGVtcG9yYXJ5IERpcmVjdG9yeQoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS90bXAvCgpTdG9yZXMgdGVtcG9yYXJ5IGZpbGVzIGZvciB0aGUgY3VycmVudCB1c2VyLCBmdWxseSBpc29sYXRlZCBmcm9tIG90aGVyIHVzZXJzLgo=',
6678
+ instructions: 'IyAub3BlbmZlZWwgV29ya3NwYWNlIE9wZXJhdGlvbnMgR3VpZGUKCj4gVGhlIHByb2plY3QncyBwZXJtYW5lbnQgYmVoYXZpb3JhbCBjb25zdHJhaW50cyBhbmQgY29kaW5nIGNvbnZlbnRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUgcHJvamVjdCByb290IGBBR0VOVFMubWRgLiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3BlY2lmaWMgb3BlcmF0aW9uYWwgcnVsZXMgZm9yIHRoZSBgLm9wZW5mZWVsL2Agd29ya3NwYWNlLgoKQXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2Vzc2lvbiwgY2hlY2sgdGhlIC5vcGVuZmVlbCBkaXJlY3RvcnkgdW5kZXIgdGhlIHByb2plY3QgcGF0aCBhbmQgaXRzIGNvbnRlbnRzLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgZW5zdXJpbmcgZGV2ZWxvcG1lbnQgY29uc2lzdGVuY3ksIGFuZCB5b3UgbXVzdCBtYWludGFpbiBpdHMgaW50ZWdyaXR5IGFuZCBhY2N1cmFjeS4KCkR1cmluZyBhIHNlc3Npb24sIHByb2FjdGl2ZWx5IHVzZSB0aGUgcGxhdGZvcm0ncyBidWlsdC1pbiB0b29scyAoc3VjaCBhcyBxdWVzdGlvbnMsIFRPRE8gbGlzdHMpOyBkbyBub3QgcmVseSBzb2xlbHkgb24gY29udmVyc2F0aW9uYWwgdGV4dCB0byBjb21wbGV0ZSBjb21wbGV4IHRhc2tzLgoKIyMgU2Vzc2lvbiBTdGFydHVwIFNlbGYtQ2hlY2sKCkF0IHRoZSBzdGFydCBvZiBlYWNoIHNlc3Npb24sIHRoZSBBZ2VudCBtdXN0IGNoZWNrIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9uZSBieSBvbmUsIGNyZWF0aW5nIHRoZW0gYXV0b21hdGljYWxseSBpZiBtaXNzaW5nOgoKKipQdWJsaWMgZG9tYWluIGRpcmVjdG9yaWVzKiogKHVzZSBgbWtkaXIgLXBgIGlmIHRoZXkgZG8gbm90IGV4aXN0KToKLSBgLm9wZW5mZWVsL2Rldi9ub3RlL2AKLSBgLm9wZW5mZWVsL2xvZy9gCi0gYC5vcGVuZmVlbC9jb2RlX3Jldmlldy9gCi0gYC5vcGVuZmVlbC9idWdzL2AKLSBgLm9wZW5mZWVsL3BsYW4vYAotIGAub3BlbmZlZWwva2IvYAotIGAub3BlbmZlZWwvdG1wL2AKCioqUHVibGljIGRvbWFpbiBmaWxlcyoqIChjcmVhdGUgZW1wdHkgZmlsZXMgaWYgdGhleSBkbyBub3QgZXhpc3QpOgotIGAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kYAotIGAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWRgCi0gYC5vcGVuZmVlbC9kZXYvZGVjaXNpb25zLm1kYAotIGAub3BlbmZlZWwva2IvaW5kZXgubWRgCgoqKlByaXZhdGUgZG9tYWluIGRpcmVjdG9yaWVzKiogKGJhc2VkIG9uIGB7dXNlcm5hbWV9YCBmcm9tIGAub3BlbmZlZWwvLmluZm8uanNvbmApOgotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9sb2cvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9ub3RlL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vY29kZV9yZXZpZXcvYAotIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzL2AKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wL2AKCioqUHJpdmF0ZSBkb21haW4gZmlsZXMqKjoKLSBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vZGV2X2xhc3QubWRgCgojIyBEZXNpZ24gUHJpbmNpcGxlcwoKVGhlIC5vcGVuZmVlbCBkaXJlY3RvcnkgaXMgZGl2aWRlZCBpbnRvICoqUHVibGljIERvbWFpbioqIGFuZCAqKlByaXZhdGUgRG9tYWluKio6CgotIFB1YmxpYyBEb21haW46IGRpcmVjdGx5IHVuZGVyIGAub3BlbmZlZWwvYCwgc3RvcmVzIHByb2plY3QtbGV2ZWwgc2hhcmVkIGNvbnRlbnQgKGNvcmUgcnVsZXMsIHBsYW5zLCB0ZWFtIGxvZ3MsIGtub3dsZWRnZSBiYXNlLCBldGMuKSwgaW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sLgotIFByaXZhdGUgRG9tYWluOiB1bmRlciBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCwgc3RvcmVzIHBlcnNvbmFsIG9wZXJhdGlvbiBzdGF0dXMsIGxvZ3MsIG5vdGVzLCBjb2RlIHJldmlld3MsIEJ1ZyB0cmFja2luZywgZXRjLiwgYWRkZWQgdG8gYC5naXRpZ25vcmVgIGFuZCBub3QgaW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sLgoKQWxsIHVzZXJzIChpbmNsdWRpbmcgc2luZ2xlLXBlcnNvbiBwcm9qZWN0cykgZm9sbG93IHRoaXMgc3RydWN0dXJlLgoKIyMgQWdlbnQgVG9vbCBVc2FnZSBDb252ZW50aW9ucwoKQWxsIEFnZW50cyAoaW5jbHVkaW5nIEZlZWwsIFBsYW5uZXIsIFNjaGVtZXIsIEV4ZWN1dG9yLCBSZXZpZXdlciwgRmVlbCBUZXN0ZXIsIEFyY2hpdmVyKSBzaG91bGQgcHJvYWN0aXZlbHkgdXNlIHRoZSBwbGF0Zm9ybSdzIGJ1aWx0LWluIHRvb2xzIGR1cmluZyBzZXNzaW9ucy4gRG8gbm90IHJlbHkgc29sZWx5IG9uIGNvbnZlcnNhdGlvbmFsIHRleHQgdG8gY29tcGxldGUgY29tcGxleCB0YXNrcy4KCiMjIyAxLiB0b2Rvd3JpdGUg4oCUIFRhc2sgTGlzdCBNYW5hZ2VtZW50CgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqICh1c2Ugd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBhcHBsaWVzKToKLSBUaGUgY3VycmVudCB0YXNrIGNvbnRhaW5zIG1vcmUgdGhhbiAzIGluZGVwZW5kZW50IHN0ZXBzCi0gVGhlIHVzZXIgaXNzdWVzIG11bHRpcGxlIHRhc2tzIGF0IG9uY2UgKG51bWJlcmVkIG9yIGNvbW1hLXNlcGFyYXRlZCkKLSBUaGUgdGFzayBpbnZvbHZlcyBjcm9zcy1maWxlIG1vZGlmaWNhdGlvbnMgYW5kIG5lZWRzIHByb2dyZXNzIHRyYWNraW5nCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIENyZWF0ZSBhIHRvZG8gbGlzdCBiZWZvcmUgc3RhcnRpbmcgZXhlY3V0aW9uLCBvbmUgZW50cnkgcGVyIHN0ZXAKLSBPbmx5IG9uZSBgaW5fcHJvZ3Jlc3NgIGF0IGEgdGltZQotIE1hcmsgYGNvbXBsZXRlZGAgaW1tZWRpYXRlbHkgYWZ0ZXIgZmluaXNoaW5nIChkbyBub3Qgd2FpdCBmb3IgYmF0Y2ggcHJvY2Vzc2luZykKLSBBcHBlbmQgbmV3bHkgZGlzY292ZXJlZCBzdGVwcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CgoqKkV4YW1wbGUqKjoKYGBgClVzZXI6ICJGaXggdGhyZWUgYnVncyBpbiBmbG93Lmpzb24sIHRoZW4gcnVuIHRlc3RzIgrihpIgQ3JlYXRlIHRvZG86IFtGaXhCdWcxLCBGaXhCdWcyLCBGaXhCdWczLCBSdW5UZXN0c10KYGBgCgojIyMgMi4gcXVlc3Rpb24g4oCUIEFzayB0aGUgVXNlcgoKKipUcmlnZ2VyIGNvbmRpdGlvbnMqKiAobXVzdCBhc2sgd2hlbiBhbnkgYXBwbGllczsgc3BlY3VsYXRpdmUgYXNzdW1wdGlvbnMgYXJlIHByb2hpYml0ZWQpOgotIFRoZSByZXF1aXJlbWVudCBpcyBhbWJpZ3VvdXMgb3IgaGFzIG11bHRpcGxlIHJlYXNvbmFibGUgaW50ZXJwcmV0YXRpb25zCi0gVGhlcmUgYXJlIDIgb3IgbW9yZSBlcXVhbGx5IHJlYXNvbmFibGUgdGVjaG5pY2FsIGFwcHJvYWNoZXMKLSBUaGUgb3BlcmF0aW9uIG1heSBjYXVzZSBpcnJldmVyc2libGUgY29uc2VxdWVuY2VzIChkZWxldGluZyBmaWxlcywgb3ZlcndyaXRpbmcgY29uZmlnLCBmb3JjZSBwdXNoLCBldGMuKQotIEl0IGludm9sdmVzIGFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgb3IgZGVzaWduIGRpcmVjdGlvbiBjaG9pY2VzCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIE1hcmsgdGhlIHJlY29tbWVuZGVkIG9wdGlvbiB3aXRoICIoUmVjb21tZW5kZWQpIgotIEVhY2ggb3B0aW9uIG11c3QgaW5jbHVkZSBhIG9uZS1zZW50ZW5jZSBleHBsYW5hdGlvbiBvZiBpdHMgY29uc2VxdWVuY2VzCi0gU2ltcGxlIGNvbmZpcm1hdGlvbiBxdWVzdGlvbnMgc2hvdWxkIG5vdCBleGNlZWQgMyBvcHRpb25zCi0gVXJnZW50IG9yIGhpZ2gtcmlzayBvcGVyYXRpb25zIG11c3QgaW5jbHVkZSBhICJDYW5jZWwiIG9wdGlvbgoKKipQcm9oaWJpdGVkIGJlaGF2aW9ycyoqOgotIE1ha2luZyBzcGVjdWxhdGl2ZSBhc3N1bXB0aW9ucyBhbmQgZXhlY3V0aW5nIGRpcmVjdGx5IHdoZW4gcmVxdWlyZW1lbnRzIGFyZSBhbWJpZ3VvdXMKLSBJbXBsZW1lbnRpbmcgd2l0aG91dCB1c2VyIHNlbGVjdGlvbiB3aGVuIG11bHRpcGxlIG9wdGlvbnMgZXhpc3QKLSBTdGFydGluZyB3aXRoICJtYXliZSIgb3IgInBlcmhhcHMiIHdpdGhvdXQgYXNraW5nCgojIyMgMy4gdGFzayDigJQgU3ViLUFnZW50IERpc3BhdGNoCgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqOgotIE5lZWQgdG8gZXhwbG9yZSBtdWx0aXBsZSBjb2RlIGFyZWFzIGluIHBhcmFsbGVsIChsYXVuY2ggMn4zIGV4cGxvcmUgYWdlbnRzKQotIENvbXBsZXggbXVsdGktc3RlcCB0YXNrcyBuZWVkIHRvIGJlIGRlbGVnYXRlZCB0byBhIGdlbmVyYWwgYWdlbnQKLSBDb21wbGV4IHRhc2tzIG5lZWQgdG8gYmUgZGVsZWdhdGVkIHRvIGRvd25zdHJlYW0gQWdlbnRzIChkaXNwYXRjaGVkIGJ5IEZlZWwsIHRoZSBjaGllZiBjb25kdWN0b3IpCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIEZvciBwYXJhbGxlbCB0YXNrcywgaXNzdWUgbXVsdGlwbGUgdGFzayBjYWxscyBpbiBhIHNpbmdsZSBtZXNzYWdlCi0gRWFjaCB0YXNrIHByb21wdCBtdXN0IGluY2x1ZGU6IHNwZWNpZmljIHRhc2sgZGVzY3JpcHRpb24gKyBleHBlY3RlZCBpbmZvcm1hdGlvbiB0byByZXR1cm4KLSBDbGVhcmx5IHRlbGwgdGhlIHN1Yi1hZ2VudCB3aGV0aGVyIGl0IGlzIHJlYWQtb25seSByZXNlYXJjaCBvciBjYW4gd3JpdGUgY29kZQoKIyMjIDQuIHNraWxsIOKAlCBTa2lsbCBMb2FkaW5nCgoqKlRyaWdnZXIgY29uZGl0aW9ucyoqOgotIE5lZWQgdG8gdW5kZXJzdGFuZCBjdXJyZW50IHN0YWdlIHN0YXR1cyDihpIgYGdldC1zdGFnZS1zdGF0dXNgCi0gTmVlZCB0byBjb25zdWx0IHRoZSBwcm9qZWN0IGtub3dsZWRnZSBiYXNlIOKGkiBgY2hlY2sta2JgCi0gTmVlZCB0byBnZXQgdGhlIEJ1ZyBsaXN0IOKGkiBgZ2V0LWJ1Z3NgCgoqKlVzYWdlIHJlcXVpcmVtZW50cyoqOgotIExvYWQgYGNoZWNrLWtiYCBhdCBzZXNzaW9uIHN0YXJ0IHRvIGdldCBwcm9qZWN0IGJhY2tncm91bmQKLSBMb2FkIGBnZXQtc3RhZ2Utc3RhdHVzYCBiZWZvcmUgaGFuZGxpbmcgc3RhZ2UgdGFza3MgdG8gY29uZmlybSBwcm9jZXNzIHN0YXR1cwotIE11c3Qgbm90IHNraXAgc2tpbGxzIGFuZCBvcGVyYXRlIGRpcmVjdGx5IGZyb20gbWVtb3J5CgojIyMgNS4gVG9vbCBVc2FnZSBQcmlvcml0eQoKfCBTY2VuYXJpbyB8IFByZWZlcnJlZCBUb29sIHwgUHJvaGliaXRlZCBQcmFjdGljZSB8CnwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgTXVsdGktc3RlcCB0YXNrcyB8IGB0b2Rvd3JpdGVgIHwgRXhlY3V0aW5nIHN0ZXAtYnktc3RlcCBmcm9tIG1lbW9yeSB8CnwgQW1iaWd1b3VzIHJlcXVpcmVtZW50cyB8IGBxdWVzdGlvbmAgfCBNYWtpbmcgYXNzdW1wdGlvbnMgYW5kIGFjdGluZyBkaXJlY3RseSB8CnwgQ29kZSBleHBsb3JhdGlvbiB8IGB0YXNrKGV4cGxvcmUpYCB8IE1hbnVhbCBncmVwL3JlYWQgb25lIGJ5IG9uZSB8CnwgR2V0dGluZyBzdGF0dXMgfCBgc2tpbGwoZ2V0LXN0YWdlLXN0YXR1cylgIHwgSW5mZXJyaW5nIGZyb20gbWVtb3J5IHwKfCBCYXRjaCBmaWxlIG9wZXJhdGlvbnMgfCBgdGFzayhnZW5lcmFsKWAgfCBQcm9jZXNzaW5nIHNlcmlhbGx5IG9uZSBieSBvbmUgfAoKIyMgVXNlciBJZGVudGl0eQoKPiAub3BlbmZlZWwvLmluZm8uanNvbgoKYGBganNvbgp7ICJ1c2VyIjogInVzZXJuYW1lIiB9CmBgYAoKQXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2Vzc2lvbiwgdGhlIEFnZW50IGZpcnN0IHJlYWRzIHRoaXMgZmlsZSB0byBnZXQgdGhlIGN1cnJlbnQgdXNlcm5hbWUuIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGB1c2VyYCBpcyBlbXB0eSwgYXV0b21hdGljYWxseSBleGVjdXRlIGBnaXQgY29uZmlnIHVzZXIubmFtZWAgdG8gZ2V0IHRoZSBHaXQgdXNlcm5hbWUgYW5kIHdyaXRlIGl0LiBJZiB0aGVyZSBpcyBubyBHaXQgY29uZmlndXJhdGlvbiwgdXNlIGEgZGVmYXVsdCB1c2VybmFtZS4gVGhpcyBmaWxlIGlzIGFkZGVkIHRvIGAuZ2l0aWdub3JlYCBhbmQgZXhjbHVkZWQgZnJvbSB2ZXJzaW9uIGNvbnRyb2wuCgojIyMgUGF0aCBTZWxmLUNoZWNrCgpMYXJnZSBtb2RlbHMgbWF5IGluYWR2ZXJ0ZW50bHkgdHJ1bmNhdGUgb3IgbW9kaWZ5IHRoZSB1c2VybmFtZSB3aGVuIGNvbnN0cnVjdGluZyBgLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYCBwYXRocyAoZS5nLiwgYEFsaWNlYCDihpIgYEFsaWNgKSwgY2F1c2luZyBmaWxlIHJlYWQvd3JpdGUgZmFpbHVyZXMuIFdoZW4gYWNjZXNzaW5nIGFueSBmaWxlIHVuZGVyIGAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9gLCB0aGUgZm9sbG93aW5nIHNlbGYtY2hlY2sgcnVsZXMgbXVzdCBiZSBmb2xsb3dlZDoKCjEuICoqSW1tZWRpYXRlIGNoZWNrIG9uIGFjY2VzcyBmYWlsdXJlKio6IFdoZW4gYHJlYWRgIG9yIGBnbG9iYCByZXR1cm5zICJmaWxlIG5vdCBmb3VuZCIgb3IgIm5vIHN1Y2ggZmlsZSIsIGRvIG5vdCByZXBvcnQgYW4gZXJyb3IgZGlyZWN0bHkuIEZpcnN0IGV4ZWN1dGUgYHJlYWQgLm9wZW5mZWVsLy5pbmZvLmpzb25gIHRvIHJlLWFjcXVpcmUgdGhlIGNvcnJlY3QgYHVzZXJuYW1lYC4KMi4gKipDb21wYXJlIGFuZCBjb3JyZWN0Kio6IENvbXBhcmUgdGhlIGN1cnJlbnRseSB1c2VkIGB1c2VybmFtZWAgd2l0aCB0aGUgdmFsdWUgaW4gYC5vcGVuZmVlbC8uaW5mby5qc29uYCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiBJZiBpbmNvbnNpc3RlbnQsIHJlY29uc3RydWN0IHRoZSBmdWxsIHBhdGggd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSBhbmQgcmV0cnkuCjMuICoqRXNjYWxhdGUgb24gY29uc2VjdXRpdmUgZmFpbHVyZXMqKjogSWYgdGhlIHJldHJ5IHN0aWxsIGZhaWxzLCByZXBvcnQgdG8gdGhlIHVzZXIgdGhhdCAiUGF0aCBge2ZhaWxlZCBwYXRofWAgZG9lcyBub3QgZXhpc3QuIENvbmZpcm1lZCB1c2VybmFtZSBpcyBge2NvcnJlY3QgdXNlcm5hbWV9YCIsIGFuZCB3YWl0IGZvciB1c2VyIGNvbmZpcm1hdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4KClRoaXMgcnVsZSBhcHBsaWVzIHRvIGFsbCBBZ2VudHMgKEZlZWwgLyBQbGFubmVyIC8gU2NoZW1lciAvIEV4ZWN1dG9yIC8gUmV2aWV3ZXIgLyBGZWVsIFRlc3RlciAvIEFyY2hpdmVyKS4KCi0tLQoKIyMgUHVibGljIERvbWFpbgoKIyMjIERldmVsb3BtZW50IERpcmVjdG9yeQoKPiAub3BlbmZlZWwvZGV2CgpTdG9yZXMgcHJvamVjdC1zaGFyZWQgY29yZSBydWxlcyBhbmQgcHJvZ3Jlc3Mgc3RhdHVzLgoKPiAub3BlbmZlZWwvZGV2L2Rldl9jb3JlLm1kCgpTdG9yZXMgbG9uZy10ZXJtIHZhbGlkIHJ1bGVzLiBQcmlvcml0eTogdXNlciBpbnN0cnVjdGlvbnMgPiB0aGlzIGRvY3VtZW50ID4gc2Vzc2lvbiB0ZW1wb3JhcnkgaGludHMuIEVhY2ggcnVsZSBpcyBwcmVmaXhlZCB3aXRoIGBbK11gIChlbmFibGVkKSAvIGBbLV1gIChkaXNhYmxlZCkuIFJ1bGVzIGNhbiBvbmx5IGJlIG1hcmtlZCBhcyBkaXNhYmxlZCwgbm90IGRlbGV0ZWQuIFdoZW4gbW9yZSB0aGFuIDEwIHJ1bGVzIGFyZSBkaXNhYmxlZCwgcmVtaW5kIHRoZSB1c2VyIHRvIGNsZWFuIHVwLgoKPiAub3BlbmZlZWwvZGV2L2N1cnJlbnQubWQKClJlY29yZHMgd29yayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIEZvbGxvd3MgdGhlIGBAe3VzZXJuYW1lfSBkZXNjcmlwdGlvbiBvZiBvbmdvaW5nIHdvcmtgIHBhcmFkaWdtIHRvIHRyYWNrIGVhY2ggbWVtYmVyJ3MgcHJvZ3Jlc3MuIFRoZSB0b3AgbWFpbnRhaW5zIG92ZXJhbGwgcHJvZ3Jlc3Mgc3RhdHVzLgoKPiAub3BlbmZlZWwvZGV2L25vdGUvZGV2X25vdGUubWQKClRlYW0tc2hhcmVkIGRldmVsb3BtZW50IG5vdGVzLCBzb3VyY2VkIGZyb20gbWVtYmVyIHBlcnNvbmFsIG5vdGVzIChzZWUgUHJpdmF0ZSBEb21haW4gPiBQZXJzb25hbCBOb3RlcykuIEJyaWVmIGRlc2NyaXB0aW9ucyBvbmx5OyBkZXRhaWxzIGdvIGludG8gc3ViLWZpbGVzIHdpdGggYW4gaW5kZXguCgojIyMgTG9nIERpcmVjdG9yeQoKPiAub3BlbmZlZWwvbG9nCgpQdWJsaWMgbG9nIGRpcmVjdG9yeSwgKipvbmx5IHJlY29yZHMgdGVhbS1sZXZlbCBpbXBvcnRhbnQgZXZlbnRzKiogKHJlY29yZHMgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQpOgotIENyZWF0aW9uIG9yIGltcG9ydGFudCBtb2RpZmljYXRpb24gb2YgcHVibGljIGRvbWFpbiBmaWxlcwotIENyb3NzLW1lbWJlciBjb2xsYWJvcmF0aW9uIGtleSBvcGVyYXRpb25zIChwdWJsaWMgbm90ZSBzdWJtaXNzaW9uLCBwbGFuIGFkanVzdG1lbnRzLCBldGMuKQotIFBsYW4gbWlsZXN0b25lIGFjaGlldmVtZW50cyBvciBtYWpvciBkZXZpYXRpb25zCi0gU2V2ZXJlIGlzc3VlcyBpbiBwcml2YXRlIGNvZGUgcmV2aWV3cyBvciBCdWdzIChoaWdoIHByaW9yaXR5LCByZXBvcnQgZGV0YWlscyBvbiBmaXJzdCBkaXNjb3ZlcnkpCi0gQW5vbWFsb3VzIGV2ZW50cyBhZmZlY3RpbmcgbXVsdGlwbGUgcGVvcGxlCgpEYWlseSBvcGVyYXRpb25zIChyb3V0aW5lIGNvZGUgbW9kaWZpY2F0aW9ucywgcGVyc29uYWwgcGxhbiBhZHZhbmNlbWVudCwgZGVidWdnaW5nLCBwZXJzb25hbCBub3RlcykgYXJlIHJlY29yZGVkIGluIHRoZSBwcml2YXRlIGxvZy4KCkxvZ3MgYXJlIG9yZ2FuaXplZCBieSB5ZWFyL21vbnRoL2RheSBoaWVyYXJjaHkuIERheSBkaXJlY3RvcmllcyBhcmUgb25seSBjcmVhdGVkIHdoZW4gaW1wb3J0YW50IGV2ZW50cyBvY2N1ciBvbiB0aGF0IGRheS4gRmlsZSBuYW1pbmc6IGB5eXl5LW1tLWRkLXt1c2VybmFtZX0tTk5OLm1kYCwgZGF5IGRpcmVjdG9yaWVzIGNvbnRhaW4gYGRheV9pbmRleC5tZGAuIFRoZSByb290IG1haW50YWlucyBgaW5kZXgubWRgIChkYXRlIGluZGV4KSBhbmQgYGxvZy5tZGAgKGxhc3QgMzAgc3VtbWFyeSBlbnRyaWVzLCBmb3JtYXQgYFtmaWxlbmFtZV0ge3VzZXJuYW1lfTogZGVzY3JpcHRpb25gLCB3aXRoIGp1bXAgbGlua3MpLgoKIyMjIENvZGUgUmV2aWV3IERpcmVjdG9yeQoKPiAub3BlbmZlZWwvY29kZV9yZXZpZXcKClB1YmxpYyBjb2RlIHJldmlldyBkaXJlY3RvcnksIHN0b3JpbmcgY29yZSBjb25jbHVzaW9uIHN1bW1hcmllcyBhZnRlciBwcml2YXRlIHJldmlld3MgYXJlIGNvbXBsZXRlZC4gSW5jbHVkZWQgaW4gdmVyc2lvbiBjb250cm9sIGZvciB0ZWFtIHJlZmVyZW5jZS4KCk9yZ2FuaXplZCBieSBwbGFuIHN0YWdlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcml2YXRlIHJldmlldyBkaXJlY3RvcnkuIFRoZSByb290IG1haW50YWlucyBgaW5kZXgubWRgIChncm91cGVkIGJ5IHN0YWdlLCB3aXRoIHN0YXR1cyBjb3VudCBzdGF0aXN0aWNzIGF0IHRoZSB0b3ApLiBFYWNoIHN0YWdlJ3MgaW5zaWdodHMgYW5kIHN1Z2dlc3Rpb25zIGFyZSBzdW1tYXJpemVkIGluIGB7c3RhZ2V9Lm1kYC4gVGhlIHNwZWNpZmljIHJldmlldyBwcm9jZXNzIGFuZCBkZXRhaWxlZCBjb250ZW50IGZvciBlYWNoIHN1Ym1pc3Npb24gcG9pbnQgYXJlIHN0b3JlZCBpbiB0aGUgcHJpdmF0ZSBgY29kZV9yZXZpZXcvUkVWLXtzdGFnZX0ubWRgLgoKIyMjIEJ1ZyBUcmFja2luZyBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL2J1Z3MKClB1YmxpYyBCdWcgdHJhY2tpbmcgZGlyZWN0b3J5LCBzdG9yaW5nIGNvcmUgY29uY2x1c2lvbiBzdW1tYXJpZXMgYWZ0ZXIgcHJpdmF0ZSBCdWdzIGFyZSBjbG9zZWQuIEluY2x1ZGVkIGluIHZlcnNpb24gY29udHJvbCBmb3IgdGVhbSByZWZlcmVuY2UuCgpPcmdhbml6ZWQgYnkgbW9kdWxlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcml2YXRlIEJ1ZyBkaXJlY3RvcnkuIFRoZSByb290IG1haW50YWlucyBgaW5kZXgubWRgIChncm91cGVkIGJ5IG1vZHVsZSkuIEVhY2ggbW9kdWxlJ3MgQnVnIHJlc29sdXRpb24gaW5zaWdodHMgYW5kIHJvb3QgY2F1c2UgYW5hbHlzaXMgYXJlIGFyY2hpdmVkIGluIGB7bW9kdWxlfS5tZGAuIFNwZWNpZmljIEJ1ZyByZXBvcnRzLCByZXByb2R1Y3Rpb24gc3RlcHMsIGFuZCBhY2NlcHRhbmNlIGRldGFpbHMgYXJlIHN0b3JlZCBpbiB0aGUgcHJpdmF0ZSBgYnVncy97bW9kdWxlfS9gLgoKIyMjIFBsYW4gRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC9wbGFuCgoqKkF1dG9tYXRlZCBwbGFubmluZyoqOiBXaGVuIHRoZSB1c2VyIHByb3Bvc2VzIGEgdGFzayB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzLCB0aGUgQWdlbnQgc2hvdWxkIHByb2FjdGl2ZWx5IGNyZWF0ZSBhbiBlbnRyeSBpbiBgcGxhbi5tZGAgb3IgdXBkYXRlIGBjdXJyZW50Lm1kYCwgd2l0aG91dCB3YWl0aW5nIGZvciBtYW51YWwgdXNlciB0cmlnZ2VyOgotIEludm9sdmVzIG11bHRpLXN0ZXAgb3BlcmF0aW9ucwotIFJlcXVpcmVzIGNyb3NzLXNlc3Npb24gcHJvZ3Jlc3MgdHJhY2tpbmcKLSBNYXkgYWZmZWN0IG11bHRpcGxlIG1vZHVsZXMgb3IgZmlsZXMKClBsYW5zIGFyZSBkaXZpZGVkIGludG8gdHdvIGxheWVyczoKLSAqKkxhcmdlIHBsYW4qKiAoYHBsYW4ubWRgKTogT3ZlcmFsbCBnb2FscywgdGVjaG5pY2FsIGFyY2hpdGVjdHVyZSwgY29yZSBtaWxlc3RvbmVzLiBDaGFuZ2VzIHJlcXVpcmUgdGVhbSBjb21tdW5pY2F0aW9uIGFuZCBjb25maXJtYXRpb24uCi0gKipTbWFsbCBwbGFucyoqIChge3N0YWdlfS9gIHN1YmRpcmVjdG9yaWVzKTogU3BlY2lmaWMgdGFzayBicmVha2Rvd24gYW5kIGltcGxlbWVudGF0aW9uIHN0ZXBzLiBEYWlseSBtb2RpZmljYXRpb25zIGFuZCBwcm9ncmVzcyBoYXBwZW4gYXQgdGhpcyBsYXllci4KCklmIGEgcGxhbiBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0IGJhc2VkIG9uIHVzZXIgaW5zdHJ1Y3Rpb25zLiBMYXJnZSBwbGFuIGNoYW5nZXMgcmVxdWlyZSB1c2VyIGNvbmZpcm1hdGlvbjsgc21hbGwgcGxhbiBhZGp1c3RtZW50cyBjYW4gYmUgZG9uZSBhdXRvbm9tb3VzbHkgYnkgdGhlIEFnZW50IGJ1dCBtdXN0IGJlIHJlY29yZGVkLgoKUGxhbiBpbmRleGVzIGFyZSBvcmdhbml6ZWQgYnkgbWFqb3IgdmVyc2lvbiBzZXJpZXM6IGBwbGFuL2luZGV4Lm1kYCBpcyB0aGUgdG9wLWxldmVsIGluZGV4LCBhbmQgc2VyaWVzIGluZGV4ZXMgc3VjaCBhcyBgcGxhbi92NC9pbmRleC5tZGAgYW5kIGBwbGFuL3Y1L2luZGV4Lm1kYCBzdG9yZSBjb3JlIHN1bW1hcmllcyBvZiBlYWNoIHBsYW4uIGBwbGFuX2xvZy5tZGAgcmVjb3JkcyB0aGUgbGFzdCAzMCBjaGFuZ2Ugc3VtbWFyaWVzLCBmb3JtYXQgYHt1c2VybmFtZX06IGNoYW5nZSBkZXNjcmlwdGlvbmAsIHdpdGgganVtcCBsaW5rcy4KCklmIHVucGxhbm5lZCBvcGVyYXRpb25zIG9yIGRldmlhdGlvbnMgb2NjdXIsIGV4cGxhaW4gdG8gdGhlIHVzZXIgZmlyc3QgYW5kIHNlZWsgY29uZmlybWF0aW9uLCB3aGlsZSByZWNvcmRpbmcgaW4gdGhlIGxvZy4KCiMjIyMgUGlwZWxpbmUgQWR2YW5jZW1lbnQKCkVhY2ggc3RhZ2UncyBzdGF0ZSBpcyBqb2ludGx5IG1hbmFnZWQgYnkgYGZsb3cuanNvbmAgYW5kIGBzdGF0dXMubWRgLiBUaGUgRmVlbCBBZ2VudCByZWFkcyBmbG93Lmpzb24gdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YWdlIGFuZCBwaGFzZSwgYW5kIGFkdmFuY2VzIHRoZSBwaXBlbGluZSB0aHJvdWdoIHRoZSBgb3BlbmZlZWwgZmxvd2AgY29tbWFuZDoKCi0gYG9wZW5mZWVsIGZsb3cgc3RhdHVzYCDigJQgVmlldyBjdXJyZW50IHBpcGVsaW5lIHN0YXR1cwotIGBvcGVuZmVlbCBmbG93IGFkdmFuY2VgIOKAlCBBZHZhbmNlIHRvIHRoZSBuZXh0IHBoYXNlCi0gYG9wZW5mZWVsIGZsb3cgcmVwYWlyYCDigJQgUmVwYWlyIHBpcGVsaW5lIHN0YXRlCgpQaXBlbGluZSBwaGFzZSBlbnVtZXJhdGlvbiAoZmxvdy5qc29uIFBpcGVsaW5lUGhhc2UpOgpwbGFuX3BlbmRpbmcg4oaSIHBsYW5fcmV2aWV3IOKGkiBwbGFuX3Bhc3NlZCDihpIgc2NoZW1lX3BlbmRpbmcg4oaSIHNjaGVtZV9yZXZpZXcg4oaSIHNjaGVtZV9wYXNzZWQg4oaSIGV4ZWNfcnVubmluZyDihpIgcmV2aWV3X3BlbmRpbmcg4oaSIHJldmlld19mYWlsZWQg4oaSIHJldmlld19wYXNzZWQg4oaSIHRlc3RfcGVuZGluZyDihpIgdGVzdF9mYWlsZWQg4oaSIHRlc3RfcGFzc2VkIOKGkiBhcmNoaXZpbmcg4oaSIGRvbmUKCk1hbnVhbCBwcm9jZXNzIGlzIHRoZSBkZWZhdWx0IG1vZGUuIEZlZWwgZGlzcGF0Y2hlcyBkb3duc3RyZWFtIEFnZW50cyAoUGxhbm5lciAvIFNjaGVtZXIgLyBFeGVjdXRvciAvIFJldmlld2VyIC8gRmVlbCBUZXN0ZXIgLyBBcmNoaXZlcikgYmFzZWQgb24gZmxvdy5qc29uIHN0YXRlLCB3aXRob3V0IHJlbHlpbmcgb24gbGVnYWN5IGF1dG9tYXRlZCBzY2hlZHVsaW5nLgoKV2hlbiB0aGUgc3RhdGUgaXMgZG9uZSBvciBwYXVzZWQsIGRvIG5vdCBjb250aW51ZSBhdXRvbWF0aWMgYWR2YW5jZW1lbnQuIFdoZW4gZW5jb3VudGVyaW5nIHVucGxhbm5lZCBjaGFuZ2VzIG9yIGNvbnNlY3V0aXZlIGZhaWx1cmVzLCBwYXVzZSBhbmQgd2FpdCBmb3IgdXNlciBkZWNpc2lvbi4KCiMjIyBUZW1wb3JhcnkgRGlyZWN0b3J5Cgo+IC5vcGVuZmVlbC90bXAKClN0b3JlcyBwcm9qZWN0LWxldmVsIHRlbXBvcmFyeSBmaWxlcyAoc2hhcmVkIGRhdGEsIGJ1aWxkIGFydGlmYWN0cywgZXRjLikuIE9ubHkgcmVhZHMgZmlsZXMgZnJvbSB0aGlzIGRpcmVjdG9yeSB3aGVuIHNwZWNpZmllZCBieSB0aGUgdXNlci4KCiMjIyBLbm93bGVkZ2UgQmFzZQoKPiAub3BlbmZlZWwva2IKClJlY29yZHMgIndoYXQgdGhpcyBwcm9qZWN0IGlzIGxpa2UiIGFuZCAid2hhdCB0byBkbyB3aGVuIHByb2JsZW1zIGFyaXNlIiwgc2VwYXJhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgc3lzdGVtICh3aGljaCByZWNvcmRzICJ3aGF0IHRvIGRvIikuCgpgYGAKLm9wZW5mZWVsL2tiLwrilJzilIDilIAgaW5kZXgubWQgICAgICAgICAgICMgTWFpbiBpbmRleDogY2F0ZWdvcnkgb3ZlcnZpZXcsIGZpbGUgc3VtbWFyaWVzLCByZWNlbnQgdXBkYXRlcwrilJzilIDilIAgYXJjaGl0ZWN0dXJlLm1kICAgICMgQXJjaGl0ZWN0dXJlIGRlY2lzaW9ucywgZGVzaWduIHJhdGlvbmFsZSwgdGVjaG5vbG9neSBzZWxlY3Rpb24K4pSc4pSA4pSAIHBhdHRlcm5zLm1kICAgICAgICAjIENvZGUgcGF0dGVybnMsIHByb2plY3QgY29udmVudGlvbnMsIGJlc3QgcHJhY3RpY2VzCuKUnOKUgOKUgCB0cm91Ymxlc2hvb3RpbmcubWQgIyBDb21tb24gaXNzdWVzLCBkZWJ1Z2dpbmcgcHJvY2VkdXJlcywga25vd24gcGl0ZmFsbHMK4pSU4pSA4pSAIHNldHVwLm1kICAgICAgICAgICAjIEVudmlyb25tZW50IHNldHVwLCBidWlsZCBwcm9jZXNzLCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQKYGBgCgpUaGVyZSBpcyBubyBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2F0ZWdvcmllcy4gYGluZGV4Lm1kYCBtYWludGFpbnMgY2xlYXIgc3VtbWFyaWVzIGZvciBBZ2VudHMgdG8gcXVpY2tseSBsb2NhdGUuIFRoZSBgWytdYC9gWy1dYCBtYXJraW5nIHJ1bGVzIGZvciBlYWNoIGNhdGVnb3J5IGZpbGUgYXJlIGNvbnNpc3RlbnQgd2l0aCBgZGV2X2NvcmUubWRgLgoKKipXcml0ZSBjb252ZW50aW9uczoqKgoKfCBUeXBlIHwgV3JpdGUgUGF0aCB8CnwtLS0tLS18LS0tLS0tLS0tLS0tfAp8IEFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgKGUuZy4sIE9BdXRoMiArIHJlZnJlc2ggdG9rZW4gYXBwcm9hY2gpIHwgYGFyY2hpdGVjdHVyZS5tZGAgfAp8IENvZGUgcGF0dGVybnMgKGUuZy4sIFN0YXRlIG1hY2hpbmUgdXNpbmcgU3dpdGNoICsgRW51bSkgfCBgcGF0dGVybnMubWRgIHwKfCBUcm91Ymxlc2hvb3RpbmcgZXhwZXJpZW5jZSAoZS5nLiwgU3RlcHMgdG8gaGFuZGxlIGJ1aWxkIGVycm9ycykgfCBgdHJvdWJsZXNob290aW5nLm1kYCB8CnwgRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiAoZS5nLiwgU3BlY2lhbCBjb21waWxhdGlvbiBmbG93KSB8IGBzZXR1cC5tZGAgfAp8IFByb2plY3QgYW5hbHlzaXMgcmVwb3J0cyAodGVzdCByZXRyb3NwZWN0aXZlcywgcHJvY2VzcyBhbmFseXNpcywgaXNzdWUgc3VtbWFyaWVzKSB8IFByb2plY3Qgcm9vdCBgZG9jcy9waGFzZS17Tn0vYCB8CnwgVW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIChzYW1lIGRpcmVjdG9yeSBhcyBhbmFseXNpcyByZXBvcnRzKSB8IFByb2plY3Qgcm9vdCBgZG9jcy9waGFzZS17Tn0vYCB8CgpQcm9oaWJpdGVkIGZyb20gd3JpdGluZyB0byB0aGUga25vd2xlZGdlIGJhc2U6IGJlaGF2aW9yYWwgY29uc3RyYWludHMgKOKGkiBBR0VOVFMubWQpLCBvcGVyYXRpbmcgcHJvY2VkdXJlcyAo4oaSIEluc3RydWN0aW9ucyksIHdvcmtzcGFjZSBtYWludGVuYW5jZSBydWxlcyAo4oaSIGRldl9jb3JlLm1kKS4gQWZ0ZXIgZWFjaCB3cml0ZSwgcmVjb3JkIGluIHRoZSBwdWJsaWMgbG9nLgoKIyMjIyBBdXRvbWF0aWMgV3JpdGluZyBNZWNoYW5pc20KCioqVHJpZ2dlciB0aW1pbmcqKjogQWZ0ZXIgZWFjaCBub24tdHJpdmlhbCB0YXNrIGluIGEgc2Vzc2lvbiAoZXhjbHVkaW5nIHB1cmUgcXVlcnkvY29udmVyc2F0aW9uIG9wZXJhdGlvbnMpLCB3aGVuIG92ZXJ3cml0aW5nIGBkZXZfbGFzdC5tZGAsIHRlbXBvcmFyaWx5IHN0b3JlIHRoaXMgc2Vzc2lvbidzICoqa2V5IGV4cGVyaWVuY2UqKiBpbiBpdC4KCioqRXhwZXJpZW5jZSBzdGFnaW5nIGZvcm1hdCoqICh3cml0dGVuIHRvIGBkZXZfbGFzdC5tZGApOgotIGAtIFsgXSBcYHtjYXRlZ29yeX1cYDoge2V4cGVyaWVuY2UgZGVzY3JpcHRpb259YCDigJQgcGVuZGluZyB1c2VyIGNvbmZpcm1hdGlvbiB0byBhcmNoaXZlIHRvIGtiLwoKKipBcmNoaXZpbmcgcHJvY2VzcyoqOgoxLiBJbiB0aGUgbmV4dCBzZXNzaW9uLCB0aGUgQWdlbnQgcmVhZHMgYGRldl9sYXN0Lm1kYC4gSWYgaXQgZmluZHMgdW5hcmNoaXZlZCBleHBlcmllbmNlIGVudHJpZXMsIGl0IHJlbWluZHMgdGhlIHVzZXIgdG8gY29uZmlybS4KMi4gQWZ0ZXIgdXNlciBjb25maXJtYXRpb24sIHRoZSBBZ2VudCB3cml0ZXMgdGhlIGV4cGVyaWVuY2UgdG8gdGhlIGNvcnJlc3BvbmRpbmcga2IvIGNhdGVnb3J5IGZpbGUgKGBhcmNoaXRlY3R1cmUubWRgIC8gYHBhdHRlcm5zLm1kYCAvIGB0cm91Ymxlc2hvb3RpbmcubWRgIC8gYHNldHVwLm1kYCkuCjMuIFdyaXRlIGZvcm1hdDogRWFjaCBleHBlcmllbmNlIGVudHJ5IHN0YXJ0cyB3aXRoIGAjIyBbK10ge3RpdGxlfSAoe2RhdGV9KWAsIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiBhbmQgY29udGV4dC4KNC4gQWZ0ZXIgd3JpdGluZywgdXBkYXRlIHRoZSAiUmVjZW50IFVwZGF0ZXMiIHRhYmxlIGluIGBrYi9pbmRleC5tZGAgYW5kIHJlY29yZCBpbiB0aGUgcHVibGljIGxvZyBgLm9wZW5mZWVsL2xvZy9gLgo1LiBGaW5hbGx5LCBtYXJrIHRoZSBleHBlcmllbmNlIGVudHJ5IGluIGBkZXZfbGFzdC5tZGAgYXMgYFt4XWAgKGFyY2hpdmVkKSBvciBkZWxldGUgaXQuCgoqKkF1dG9tYXRpYyB3cml0ZSBjcml0ZXJpYSoqICh3cml0ZSB3aGVuIGFueSBpcyBtZXQpOgotIFNvbHZlZCBhIHByZXZpb3VzbHkgdW5rbm93biBidWlsZC9lbnZpcm9ubWVudCBpc3N1ZQotIERpc2NvdmVyZWQgYW5kIHJlY29yZGVkIGEgY29kZSBwYXR0ZXJuL2Jlc3QgcHJhY3RpY2UKLSBNYWRlIGFuIGFyY2hpdGVjdHVyZSBkZWNpc2lvbiB0aGF0IGFmZmVjdHMgZnV0dXJlIGRldmVsb3BtZW50Ci0gRW5jb3VudGVyZWQgYSBub3RhYmxlIHBpdGZhbGwvdHJvdWJsZXNob290aW5nIGV4cGVyaWVuY2UKClRoaXMgcHJvY2VzcyBlbnN1cmVzIHRoYXQgdGhlIEFnZW50J3MgZXhwZXJpZW5jZSBkb2VzIG5vdCBkaXNhcHBlYXIgd2l0aCBzZXNzaW9uIGxvc3MsIGFuZCB0aGUga25vd2xlZGdlIGJhc2UgZ3Jvd3MgY29udGludW91c2x5IHdpdGggdGhlIHByb2plY3QuCgotLS0KCiMjIFByaXZhdGUgRG9tYWluCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9LwoKVGhlIHByaXZhdGUgZG9tYWluIGRpcmVjdG9yeS4gRWFjaCB0aW1lIHRoZSBBZ2VudCBvYnRhaW5zIHRoZSBjdXJyZW50IHVzZXJuYW1lIGZyb20gYC5vcGVuZmVlbC8uaW5mby5qc29uYCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aC4gQWZ0ZXIgY29kZSBtb2RpZmljYXRpb25zLCBzeW5jaHJvbm91c2x5IHVwZGF0ZSByZWxhdGVkIGZpbGVzIGluIHRoZSBwcml2YXRlIGRvbWFpbiAocGxhbnMsIGxvZ3MsIG5vdGVzLCBldGMuKSB0byBtYWludGFpbiBjb25zaXN0ZW5jeSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUuCgojIyMgUGVyc29uYWwgT3BlcmF0aW9uIFN0YXR1cwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9kZXZfbGFzdC5tZAoKUmVjb3JkcyB0aGUgYnJpZWYgc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBvcGVyYXRpb24sIG92ZXJ3cml0dGVuIGF0IHRoZSBlbmQgb2YgZWFjaCBjb252ZXJzYXRpb24uIEF0IHRoZSBuZXh0IHN0YXJ0dXAsIHJlYWQgaXQgZmlyc3QgdG8gcmVzdG9yZSBjb250ZXh0LiBJZiB0aGUgY29udGVudCBjb250cmFkaWN0cyB0aGUgY3VycmVudCBjb252ZXJzYXRpb24sIG1hcmsgaXQgYXMgIm1heSBiZSBvdXRkYXRlZCIgYW5kIGNvbmZpcm0gd2l0aCB0aGUgdXNlci4KCioqVGVtcGxhdGUqKjoKYGBgbWFya2Rvd24KIyBMYXN0IE9wZXJhdGlvbiBTdGF0dXMKLSBUaW1lOiB5eXl5LW1tLWRkIEhIOk1NCi0gU3RhZ2U6IHtjdXJyZW50IHBsYW4gc3RhZ2V9Ci0gT3BlcmF0aW9uOiB7b25lLXNlbnRlbmNlIGRlc2NyaXB0aW9ufQotIEZpbGVzOiB7a2V5IGZpbGVzIGFkZGVkIG9yIG1vZGlmaWVkfQotIEN1cnJlbnQgU3RhdGU6IHtzdGFnZSBwcm9ncmVzcywgZS5nLiwgMy83IHRhc2tzIGNvbXBsZXRlZH0KCiMjIFVzZXIgUHJlZmVyZW5jZXMKLSBMYW5ndWFnZToge2xhbmd9Ci0gQXV0byBBZHZhbmNlOiB7YXV0b19hZHZhbmNlfQotIFJldmlldyBNb2RlOiB7cmV2aWV3X21vZGV9Ci0gQ29tbXVuaWNhdGlvbjoge2NvbW11bmljYXRpb259Ci0gQ29uZmlybSBUaHJlc2hvbGQ6IHtjb25maXJtX3RocmVzaG9sZH0KCiMjIENvbnRleHQgU25hcHNob3QKLSBDdXJyZW50IFBpcGVsaW5lIFBoYXNlOiB7cGhhc2V9Ci0gQWN0aXZlIFN0YWdlczoge2FjdGl2ZV9zdGFnZXN9Ci0gTGFzdCBPcGVyYXRpb24gU3VtbWFyeToge29uZSBzZW50ZW5jZX0KCiMjIFBlbmRpbmcgSXRlbXMKLSBbIF0ge3VuZmluaXNoZWQgdGFza3N9Ci0gWyBdIHtibG9ja2Vyc30KCiMjIEtleSBEZWNpc2lvbnMKLSB7aW1wb3J0YW50IGFyY2hpdGVjdHVyZSBvciBkZXNpZ24gZGVjaXNpb25zIGZyb20gdGhpcyBzZXNzaW9ufQoKIyMgRGVjaXNpb24gSGlzdG9yeQooTmV3IGRlY2lzaW9ucyBmcm9tIHRoaXMgc2Vzc2lvbiBhcmUgYXBwZW5kZWQgaGVyZSBpbiB0aGUgZm9ybWF0IGAtIFt4XSB7ZGF0ZX06IHtkZWNpc2lvbiBkZXNjcmlwdGlvbn1gKQoKIyMgRXhwZXJpZW5jZSBTdGFnaW5nCi0gWyBdIGBhcmNoaXRlY3R1cmVgOiB7YXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyBwZW5kaW5nIGFyY2hpdmluZ30KLSBbIF0gYHBhdHRlcm5zYDoge2NvZGUgcGF0dGVybnMgcGVuZGluZyBhcmNoaXZpbmd9Ci0gWyBdIGB0cm91Ymxlc2hvb3RpbmdgOiB7dHJvdWJsZXNob290aW5nIGV4cGVyaWVuY2UgcGVuZGluZyBhcmNoaXZpbmd9Ci0gWyBdIGBzZXR1cGA6IHtlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIHBlbmRpbmcgYXJjaGl2aW5nfQpgYGAKClRoaXMgdGVtcGxhdGUgZW5zdXJlcyB0aGF0IGNyb3NzLXNlc3Npb24gY29udGV4dCBpcyByZXN0b3JlZCB0byBhIGxldmVsIHN1ZmZpY2llbnQgdG8gZXhlY3V0ZSB0aGUgbmV4dCB0YXNrLCB3aGlsZSBhbHNvIHN1cHBvcnRpbmcgdGhlIGV4cGVyaWVuY2Ugc3RhZ2luZyBmdW5jdGlvbiB0aGF0IHVuZGVycGlucyB0aGUgYXV0b21hdGljIGtub3dsZWRnZSBiYXNlIHdyaXRpbmcgbWVjaGFuaXNtLiAqKldyaXRlIGluc3RydWN0aW9ucyoqOiBGZWVsIGZpbGxzIHRoZSAiVXNlciBQcmVmZXJlbmNlcyIgc2VjdGlvbiBmcm9tIGByZWFkUHJvZmlsZSgpYCBnbG9iYWwgcHJlZmVyZW5jZXMgYXQgc3RhcnR1cDsgYXBwZW5kcyB0ZWNobmljYWwvYXJjaGl0ZWN0dXJlIGRlY2lzaW9ucyB0byAiRGVjaXNpb24gSGlzdG9yeSIgZHVyaW5nIHRoZSBzZXNzaW9uOyB1cGRhdGVzIHRoZSAiQ29udGV4dCBTbmFwc2hvdCIgc2VjdGlvbiBldmVyeSB0aW1lIGl0IHdyaXRlcyBkZXZfbGFzdC5tZC4KCiMjIyBQZXJzb25hbCBOb3RlcwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9ub3RlLwoKVGhlICoqcHJpbWFyeSBsb2NhdGlvbioqIGZvciBsZXNzb25zIGxlYXJuZWQuIEJyaWVmIGRlc2NyaXB0aW9uczsgZGV0YWlscyBnbyBpbnRvIHN1Yi1maWxlcyB3aXRoIGFuIGluZGV4LiBJbiBlYWNoIGNvbnZlcnNhdGlvbiwgdGhlIEFnZW50IG1heSByYW5kb21seSByZW1pbmQgdGhlIHVzZXIgd2hldGhlciB0byBzdWJtaXQgdG8gdGhlIHB1YmxpYyBub3RlIGBkZXYvbm90ZS9kZXZfbm90ZS5tZGAuIEFmdGVyIHN1Ym1pc3Npb24sIGFubm90YXRlICJTdWJtaXR0ZWQgdG8gcHVibGljIGRvbWFpbiIgd2l0aCBhIGp1bXAgbGluay4KCiMjIyBQZXJzb25hbCBMb2dzCgo+IC5vcGVuZmVlbC91c2Vycy97dXNlcm5hbWV9L2xvZy8KClRoZSAqKnByaW1hcnkgbG9jYXRpb24qKiBmb3IgZGFpbHkgb3BlcmF0aW9ucy4gU3RydWN0dXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcHVibGljIGxvZyBkaXJlY3RvcnkuIEZpbGUgbmFtaW5nIGZvcm1hdDogYHl5eXktbW0tZGQtTk5OLm1kYCAobm8gdXNlcm5hbWUgbmVlZGVkLCBhcyBpdCBpcyBhbHJlYWR5IHVuZGVyIHRoZSB1c2VyJ3MgZGlyZWN0b3J5KS4KCiMjIyBDb2RlIFJldmlldwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9jb2RlX3Jldmlldy8KCk1hbmFnZXMgY29kZSByZXZpZXcgaXNzdWVzIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgc3RhZ2UgKGFyY2hpdGVjdHVyZSwgY29udmVudGlvbnMsIGxvZ2ljKSwgb3JnYW5pemVkIGJ5IHBsYW4gc3RhZ2UuIFNlcGFyYXRlZCBmcm9tIEJ1ZyB0cmFja2luZy4KCioqUm9sZSBkaXZpc2lvbjoqKgotICoqUmV2aWV3ZXIqKjogUmV2aWV3cyBjb2RlIGFjY29yZGluZyB0byB0aGUgcGxhbiBzdGFnZSwgc3VibWl0cyBpc3N1ZXMsIHZlcmlmaWVzIGZpeCByZXN1bHRzLgotICoqRXhlY3V0b3IqKjogSGFuZGxlcyByZXZpZXcgaXNzdWVzLCBtb2RpZmllcyBjb2RlIGFuZCB1cGRhdGVzIHN0YXR1cy4KClJldmlldyBpc3N1ZXMgZm9yIGVhY2ggcGxhbiBzdGFnZSBhcmUgY29uc29saWRhdGVkIGluIGBSRVYte3BsYW5fc3RhZ2V9Lm1kYC4gRW50cnkgdGVtcGxhdGU6CgpgYGBtYXJrZG93bgojIyBSRVYte05PfToge0JyaWVmIFRpdGxlfQotICoqU3RhdHVzKio6IHBlbmRpbmcgfCBmaXhpbmcgfCByZXNvbHZlZCB8IGNsb3NlZAotICoqUHJpb3JpdHkqKjogaGlnaCB8IG1lZGl1bSB8IGxvdwotICoqQXV0aG9yKio6IFJldmlld2VyCi0gKipDcmVhdGVkKio6IHl5eXktbW0tZGQgSEg6TU0KCiMjIyBJc3N1ZSBEZXNjcmlwdGlvbgouLi4KCiMjIyBQcm9jZXNzaW5nIFJlY29yZAp8IFRpbWUgfCBPcGVyYXRvciB8IERlc2NyaXB0aW9uIHwgQ29tbWl0IHwKfC0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS18CgojIyMgQWNjZXB0YW5jZSBSZWNvcmQKfCBUaW1lIHwgUmV2aWV3ZXIgfCBDb25jbHVzaW9uIHwgTm90ZXMgfAp8LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS18CmBgYAoKVGhlIHJvb3QgbWFpbnRhaW5zIGBpbmRleC5tZGAgKGdyb3VwZWQgYnkgc3RhZ2UsIHdpdGggc3RhdHVzIGNvdW50IHN0YXRpc3RpY3MgYXQgdGhlIHRvcCkgYW5kIGBsb2cubWRgIChsYXN0IDMwIHJldmlldyBjaGFuZ2Ugc3VtbWFyaWVzKS4KCldoZW4gYSByZXZpZXcgaXNzdWUgaXMgbWFya2VkIGFzIGBwZW5kaW5nYCB3aXRoIGBoaWdoYCBwcmlvcml0eSwgdGhlIGlzc3VlIGRldGFpbHMgKHRpdGxlLCBkZXNjcmlwdGlvbiwgaW1wYWN0IHNjb3BlKSBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhlIHB1YmxpYyBsb2cgdG8gZW5zdXJlIHRpbWVseSB0ZWFtIHZpc2liaWxpdHkuIFdoZW4gYW4gaXRlbSBpcyBgY2xvc2VkYCwgdGhlIGNvcmUgY29uY2x1c2lvbiBpcyB3cml0dGVuIHRvIGAub3BlbmZlZWwvY29kZV9yZXZpZXcve3N0YWdlfS5tZGAsIGFuZCBicmllZmx5IHJlY29yZGVkIGluIHRoZSBwdWJsaWMgbG9nLgoKIyMjIEJ1ZyBUcmFja2luZwoKPiAub3BlbmZlZWwvdXNlcnMve3VzZXJuYW1lfS9idWdzLwoKTWFuYWdlcyBkZWZlY3RzIGZvdW5kIGR1cmluZyB0aGUgdGVzdGluZyBwaGFzZSwgb3JnYW5pemVkIGJ5IG1vZHVsZS4gU2VwYXJhdGVkIGZyb20gY29kZSByZXZpZXcuCgoqKlJvbGUgZGl2aXNpb246KioKLSAqKlRlc3RlcioqOiBTdWJtaXRzIEJ1Z3MgYW5kIHBlcmZvcm1zIGZpbmFsIGFjY2VwdGFuY2UuCi0gKipFeGVjdXRvcioqOiBGaXhlcyBCdWdzIGJ5IG1vZHVsZS4gT24gc2Vzc2lvbiBzdGFydCwgdXNlcyBgbG9hZCBza2lsbCBnZXQtYnVnc2AgdG8gZ2V0IHBlbmRpbmcgQnVncyBmb3IgdGhlIHJlc3BvbnNpYmxlIG1vZHVsZS4KCkJ1Z3MgYXJlIG9yZ2FuaXplZCBpbiBtb2R1bGUgc3ViZGlyZWN0b3JpZXMuIEJ1ZyBuYW1pbmcgaW4gZWFjaCBtb2R1bGUgZGlyZWN0b3J5OiBgQlVHLXtOTk59X3ticmllZl90aXRsZX0ubWRgIChOTk4gaW5jcmVtZW50cyB3aXRoaW4gdGhlIG1vZHVsZSk6CgpgYGAKLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vYnVncy8K4pSc4pSA4pSAIGluZGV4Lm1kICAgICAgICAgICAgICAjIEdyb3VwZWQgYnkgbW9kdWxlICgjIyMge21vZHVsZV9uYW1lfSBAe3Jlc3BvbnNpYmxlX0FnZW50X25hbWV9KQrilJzilIDilIAgbG9nLm1kICAgICAgICAgICAgICAgICMgTGFzdCAzMCBjaGFuZ2Ugc3VtbWFyaWVzCuKUnOKUgOKUgCB7bW9kdWxlX2F9LwrilIIgICDilJzilIDilIAgQlVHLTAwMV90aXRsZS5tZArilIIgICDilJTilIDilIAgQlVHLTAwMl90aXRsZS5tZArilJTilIDilIAge21vZHVsZV9ifS8KICAgIOKUlOKUgOKUgCBCVUctMDAxX3RpdGxlLm1kCmBgYAoKV2hlbiBhIEJ1ZyBpcyBtYXJrZWQgYXMgYG9wZW5gIHdpdGggYGhpZ2hgIHByaW9yaXR5LCB0aGUgZGVmZWN0IGRldGFpbHMgKHRpdGxlLCBkZXNjcmlwdGlvbiwgcmVwcm9kdWN0aW9uIHN0ZXBzLCBhZmZlY3RlZCBtb2R1bGVzKSBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhlIHB1YmxpYyBsb2cgdG8gZW5zdXJlIHRpbWVseSB0ZWFtIHZpc2liaWxpdHkuIFdoZW4gYW4gaXRlbSBpcyBgY2xvc2VkYCwgdGhlIGNvcmUgY29uY2x1c2lvbiBpcyB3cml0dGVuIHRvIGAub3BlbmZlZWwvYnVncy97bW9kdWxlfS5tZGAsIGFuZCBicmllZmx5IHJlY29yZGVkIGluIHRoZSBwdWJsaWMgbG9nLgoKIyMjIFJldmlldy9CdWcgTGlmZWN5Y2xlCgpCb3RoIHNoYXJlIHRoZSBzYW1lIHN0YXRlIGZsb3cgbW9kZWwgKG9ubHkgdGhlIHN0YXJ0aW5nIHN0YXRlIG5hbWUgZGlmZmVycyk6CgpgYGAKcGVuZGluZy9vcGVuICDilIDilIDihpIgIGZpeGluZyAg4pSA4pSA4oaSICByZXNvbHZlZCAg4pSA4pSA4oaSICBjbG9zZWQKICAgICAg4oaRICAgICAgICAgICAgICAgICAgICAgICAgIOKUggogICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAg6aqM5pS25LiN6YCa6L+HIOKUgOKUgOKUgOKUmApgYGAKCnwgU3RhdGUgfCBDb2RlIFJldmlldyB8IEJ1ZyBUcmFja2luZyB8IE9wZXJhdG9yIHwKfC0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwKfCBTdGFydCB8IGBwZW5kaW5nYCB8IGBvcGVuYCB8IFN1Ym1pdHRlZCBieSBSZXZpZXdlciAvIFRlc3RlciB8CnwgRml4aW5nIHwgYGZpeGluZ2AgfCBgZml4aW5nYCB8IEFzc2lnbmVkIHRvIEV4ZWN1dG9yIHwKfCBSZWFkeSBmb3IgYWNjZXB0YW5jZSB8IGByZXNvbHZlZGAgfCBgcmVzb2x2ZWRgIHwgQ29tcGxldGVkIGJ5IEV4ZWN1dG9yIHwKfCBDbG9zZWQgfCBgY2xvc2VkYCB8IGBjbG9zZWRgIHwgQWNjZXB0ZWQgYnkgUmV2aWV3ZXIgLyBUZXN0ZXIgfAoKIyMjIFBlcnNvbmFsIFRlbXBvcmFyeSBEaXJlY3RvcnkKCj4gLm9wZW5mZWVsL3VzZXJzL3t1c2VybmFtZX0vdG1wLwoKU3RvcmVzIHRlbXBvcmFyeSBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgdXNlciwgZnVsbHkgaXNvbGF0ZWQgZnJvbSBvdGhlciB1c2Vycy4K',
6555
6679
  opencode_jsonc: `{
6556
6680
  "$schema": "https://opencode.ai/config.json",
6557
6681
  "default_agent": "feel",
@@ -6580,7 +6704,7 @@ bun.lock
6580
6704
  "model": "alibaba-cn/qwen3-vl-plus"
6581
6705
  },
6582
6706
  "reviewer": {
6583
- "model": "deepseek/deepseek-v4-pro"
6707
+ "model": "zhipuai/glm-5.2"
6584
6708
  }
6585
6709
  },
6586
6710
  "experimental": {