From 26a9d93d56767777a39d3d593177ba97093f7308 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Sat, 12 Oct 2024 15:51:37 +0800 Subject: [PATCH 01/52] refactor(ios): minor update of UIManager and ShadowView --- .../native/ios/renderer/HippyUIManager.mm | 35 ++++++++++--------- .../component/view/HippyShadowView.mm | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/renderer/native/ios/renderer/HippyUIManager.mm b/renderer/native/ios/renderer/HippyUIManager.mm index c24a2d3df9d..140acda23c9 100644 --- a/renderer/native/ios/renderer/HippyUIManager.mm +++ b/renderer/native/ios/renderer/HippyUIManager.mm @@ -201,16 +201,16 @@ @interface HippyUIManager() { NSHashTable> *_componentTransactionListeners; std::mutex _renderQueueLock; - NSMutableDictionary *_viewManagers; - NSArray *_extraComponents; - - NSMutableArray> *_imageProviders; } - +/// All managed ViewManagers +@property (atomic, strong) NSMutableDictionary *viewManagers; +/// All extra components +@property (atomic, strong) NSArray *extraComponents; @end + @implementation HippyUIManager @synthesize domManager = _domManager; @@ -675,36 +675,37 @@ - (void)updateView:(nonnull NSNumber *)componentTag - (__kindof HippyViewManager *)viewManagerForViewName:(NSString *)viewName { HippyBridge *strongBridge = self.bridge; - if (!_viewManagers) { - _viewManagers = [NSMutableDictionary dictionary]; - if (_extraComponents) { - for (Class cls in _extraComponents) { + if (!self.viewManagers) { + NSMutableDictionary *viewManagers = [NSMutableDictionary dictionary]; + if (self.extraComponents) { + for (Class cls in self.extraComponents) { NSString *viewName = viewNameFromViewManagerClass(cls); - HippyAssert(![_viewManagers objectForKey:viewName], + HippyAssert(![viewManagers objectForKey:viewName], @"duplicated component %@ for class %@ and %@", viewName, NSStringFromClass(cls), - NSStringFromClass([_viewManagers objectForKey:viewName])); - [_viewManagers setObject:cls forKey:viewName]; + NSStringFromClass([viewManagers objectForKey:viewName])); + [viewManagers setObject:cls forKey:viewName]; } } NSArray *classes = HippyGetViewManagerClasses(strongBridge); NSMutableDictionary *defaultViewManagerClasses = [NSMutableDictionary dictionaryWithCapacity:[classes count]]; for (Class cls in classes) { NSString *viewName = viewNameFromViewManagerClass(cls); - if ([_viewManagers objectForKey:viewName]) { + if ([viewManagers objectForKey:viewName]) { continue; } [defaultViewManagerClasses setObject:cls forKey:viewName]; } - [_viewManagers addEntriesFromDictionary:defaultViewManagerClasses]; + [viewManagers addEntriesFromDictionary:defaultViewManagerClasses]; + self.viewManagers = viewManagers; } // Get and instantiate the class - id object = [_viewManagers objectForKey:viewName]; + id object = [self.viewManagers objectForKey:viewName]; if (object_isClass(object)) { HippyViewManager *viewManager = [object new]; viewManager.bridge = strongBridge; NSAssert([viewManager isKindOfClass:[HippyViewManager class]], @"Must be a HippyViewManager instance"); - [_viewManagers setObject:viewManager forKey:viewName]; + [self.viewManagers setObject:viewManager forKey:viewName]; object = viewManager; } return object; @@ -1125,7 +1126,7 @@ - (void)dispatchFunction:(const std::string &)functionName } - (void)registerExtraComponent:(NSArray *)extraComponents { - _extraComponents = extraComponents; + self.extraComponents = extraComponents; } diff --git a/renderer/native/ios/renderer/component/view/HippyShadowView.mm b/renderer/native/ios/renderer/component/view/HippyShadowView.mm index 17875abdf35..8f59aacd67b 100644 --- a/renderer/native/ios/renderer/component/view/HippyShadowView.mm +++ b/renderer/native/ios/renderer/component/view/HippyShadowView.mm @@ -97,7 +97,7 @@ - (instancetype)init { if ((self = [super init])) { _propagationLifecycle = NativeRenderUpdateLifecycleUninitialized; _frame = CGRectMake(0, 0, NAN, NAN); - _objectSubviews = [NSMutableArray arrayWithCapacity:8]; + _objectSubviews = [NSMutableArray array]; _confirmedLayoutDirection = hippy::Direction::Inherit; _layoutDirection = hippy::Direction::Inherit; } From 9a62008c145acc702897472553b911687229587b Mon Sep 17 00:00:00 2001 From: zealotchen Date: Mon, 14 Oct 2024 20:51:51 +0800 Subject: [PATCH 02/52] fix vue2 css match error --- .../hippy-vue-css-loader/src/css-loader.ts | 33 +++++++++++-------- .../src/style-match/css-map.ts | 22 ++----------- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/driver/js/packages/hippy-vue-css-loader/src/css-loader.ts b/driver/js/packages/hippy-vue-css-loader/src/css-loader.ts index 7bb3b17ee38..9544b8bd140 100644 --- a/driver/js/packages/hippy-vue-css-loader/src/css-loader.ts +++ b/driver/js/packages/hippy-vue-css-loader/src/css-loader.ts @@ -32,14 +32,17 @@ let sourceId = 0; function hippyVueCSSLoader(this: any, source: any) { const options = getOptions(this); const parsed = parseCSS(source, { source: sourceId }); - const hash = crypto.createHash('shake256', { outputLength: 3 }); + + const majorNodeVersion = parseInt(process.versions.node.split('.')[0], 10); + const hashType = majorNodeVersion >= 17 ? 'md5' : 'md4'; + const hash = crypto.createHash(hashType); const contentHash = hash.update(source).digest('hex'); sourceId += 1; - const rulesAst = parsed.stylesheet.rules.filter((n: any) => n.type === 'rule').map((n: any) => ([ - contentHash, - n.selectors, - // filter comment declaration and empty declaration - n.declarations.filter(dec => dec.type !== 'comment').map((dec: any) => { + const rulesAst = parsed.stylesheet.rules.filter((n: any) => n.type === 'rule').map((n: any) => ({ + hash: contentHash, + selectors: n.selectors, + + declarations: n.declarations.map((dec: any) => { let { value } = dec; const isVariableColor = dec.property?.startsWith('-') && typeof value === 'string' && ( @@ -52,14 +55,18 @@ function hippyVueCSSLoader(this: any, source: any) { if (dec.property && (dec.property.toLowerCase().indexOf('color') > -1 || isVariableColor)) { value = translateColor(value); } - return [dec.property, value]; + return { + type: dec.type, + property: dec.property, + value, + }; }), - ])).filter(rule => rule[2].length > 0); - const code = `(function(n) { - if (!global[n]) { - global[n] = []; + })); + const code = `(function() { + if (!global['${GLOBAL_STYLE_NAME}']) { + global['${GLOBAL_STYLE_NAME}'] = []; } - global[n] = global[n].concat(${JSON.stringify(rulesAst)}); + global['${GLOBAL_STYLE_NAME}'] = global['${GLOBAL_STYLE_NAME}'].concat(${JSON.stringify(rulesAst)}); if(module.hot) { module.hot.dispose(() => { @@ -70,7 +77,7 @@ function hippyVueCSSLoader(this: any, source: any) { global['${GLOBAL_DISPOSE_STYLE_NAME}'] = global['${GLOBAL_DISPOSE_STYLE_NAME}'].concat('${contentHash}'); }) } - })('${GLOBAL_STYLE_NAME}')`; + })()`; return `module.exports=${code}`; } diff --git a/driver/js/packages/hippy-vue-next-style-parser/src/style-match/css-map.ts b/driver/js/packages/hippy-vue-next-style-parser/src/style-match/css-map.ts index 2eb77cef3ac..29e021fa60a 100644 --- a/driver/js/packages/hippy-vue-next-style-parser/src/style-match/css-map.ts +++ b/driver/js/packages/hippy-vue-next-style-parser/src/style-match/css-map.ts @@ -34,9 +34,6 @@ import { SelectorsMap } from './css-selectors-match'; import { parseSelector } from './parser'; import { HIPPY_GLOBAL_STYLE_NAME, HIPPY_GLOBAL_DISPOSE_STYLE_NAME } from './'; -type Declaration = [property: string, value: string | number]; -export type ASTRule = [hash: string, selectors: string[], declarations: Declaration[]]; - // style load hook const beforeLoadStyleHook: Function = (declaration: Function): Function => declaration; @@ -73,7 +70,7 @@ function createSimpleSelectorFromAst(ast) { ? new AttributeSelector(ast.property, ast.test, ast.value) : new AttributeSelector(ast.property); default: - return new InvalidSelector(new Error('Unknown selector.'));; + return null; } } @@ -128,23 +125,10 @@ function createSelector(sel) { * @param beforeLoadStyle */ export function fromAstNodes( - astRules: Array = [], + astRules: CssAttribute[] = [], beforeLoadStyle?: Function, ): RuleSet[] { - const rules = astRules.map(rule => { - if (!Array.isArray(rule)) return rule; - const [hash, selectors, declarations] = rule as ASTRule; - return { - hash, - selectors, - declarations: declarations.map(([property, value]) => ({ - type: 'declaration', - property, - value, - })), - }; - }); - return rules.map((rule) => { + return astRules.map((rule) => { const declarations = rule.declarations .filter(isDeclaration) // use default hook when there is no hook passed in From 9f34b100ac29afc61058032e665546d116636439 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Sat, 12 Oct 2024 17:58:25 +0800 Subject: [PATCH 03/52] fix(ios): thread race of bundle load op in very small scenarios --- framework/ios/base/bridge/HippyBridge.mm | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/framework/ios/base/bridge/HippyBridge.mm b/framework/ios/base/bridge/HippyBridge.mm index 1de3a8eecb1..4f644c7c684 100644 --- a/framework/ios/base/bridge/HippyBridge.mm +++ b/framework/ios/base/bridge/HippyBridge.mm @@ -183,7 +183,7 @@ @interface HippyBridge() { /// Bundle fetch operation queue (concurrent) @property (nonatomic, strong) NSOperationQueue *bundleQueue; /// Record the last execute operation for adding execution dependency. -@property (atomic, strong, nullable) NSOperation *lastExecuteOperation; +@property (nonatomic, strong, nullable) NSOperation *lastExecuteOperation; /// Cached Dimensions info,will be passed to JS Side. @property (atomic, strong) NSDictionary *cachedDimensionsInfo; @@ -591,13 +591,17 @@ - (void)beginLoadingBundle:(NSURL *)bundleURL strongSelf.valid, script]; HippyLogError(@"%@", errMsg); completion(bundleURL, HippyErrorWithMessage(errMsg)); - strongSelf.lastExecuteOperation = nil; + @synchronized (self) { + strongSelf.lastExecuteOperation = nil; + } return; } [strongSelf executeJSCode:script sourceURL:bundleURL onCompletion:^(id result, NSError *error) { HippyLogInfo(@"End executing bundle(%s)", HP_CSTR_NOT_NULL(bundleURL.absoluteString.lastPathComponent.UTF8String)); - strongSelf.lastExecuteOperation = nil; + @synchronized (self) { + strongSelf.lastExecuteOperation = nil; + } if (completion) { completion(bundleURL, error); } @@ -624,13 +628,18 @@ - (void)beginLoadingBundle:(NSURL *)bundleURL // Add dependency, make sure that doing fetch before execute, // and all execution operations must be queued. [executeOperation addDependency:fetchOperation]; - if (self.lastExecuteOperation) { - [executeOperation addDependency:self.lastExecuteOperation]; + @synchronized (self) { + NSOperation *lastOp = self.lastExecuteOperation; + if (lastOp) { + [executeOperation addDependency:lastOp]; + } } // Enqueue operation [_bundleQueue addOperations:@[fetchOperation, executeOperation] waitUntilFinished:NO]; - self.lastExecuteOperation = executeOperation; + @synchronized (self) { + self.lastExecuteOperation = executeOperation; + } } - (void)unloadInstanceForRootView:(NSNumber *)rootTag { From 0409983175ef0bfebf06a03a89db882a8516db95 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Mon, 14 Oct 2024 20:46:18 +0800 Subject: [PATCH 04/52] chore(core): make perf debugging logs disabled by default --- modules/footstone/include/footstone/logging.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/footstone/include/footstone/logging.h b/modules/footstone/include/footstone/logging.h index 71f5dbd2ee9..3cfa7329c76 100644 --- a/modules/footstone/include/footstone/logging.h +++ b/modules/footstone/include/footstone/logging.h @@ -225,9 +225,9 @@ bool ShouldCreateLogMessage(LogSeverity severity); #define HP_CSTR_NOT_NULL( p ) (p ? p : "") -#ifdef DEBUG +#ifdef ENABLE_HIPPY_PERFLOG +// enable perf log output when `ENABLE_HIPPY_PERFLOG` is set -// enable perf log output in debug mode only #define TDF_PERF_LOG(format, ...) \ footstone::LogMessage::LogWithFormat(__FILE_NAME__, __LINE__, "[HP PERF] " format, \ ##__VA_ARGS__) @@ -241,4 +241,4 @@ footstone::LogMessage::LogWithFormat(__FILE_NAME__, __LINE__, "[HP PERF] " forma #define TDF_PERF_LOG(format, ...) #define TDF_PERF_DO_STMT_AND_LOG(STMT , format, ...) -#endif +#endif /* ENABLE_HIPPY_PERFLOG */ From a803246cda2212f4500fedaa882456db26f49620 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Mon, 14 Oct 2024 20:25:18 +0800 Subject: [PATCH 05/52] chore(demo): update list demo in both react and vue --- .../src/components/ListView/index.jsx | 53 +++++++++---------- .../src/components/demos/demo-list.vue | 1 - .../src/components/demo/demo-list.vue | 4 +- 3 files changed, 26 insertions(+), 32 deletions(-) diff --git a/driver/js/examples/hippy-react-demo/src/components/ListView/index.jsx b/driver/js/examples/hippy-react-demo/src/components/ListView/index.jsx index eb57411f47b..6c50de00f2e 100644 --- a/driver/js/examples/hippy-react-demo/src/components/ListView/index.jsx +++ b/driver/js/examples/hippy-react-demo/src/components/ListView/index.jsx @@ -4,7 +4,6 @@ import { View, StyleSheet, Text, - Platform, } from '@hippy/react'; const STYLE_LOADING = 100; @@ -271,8 +270,7 @@ export default class ListExample extends React.Component { return true; }} bounces={true} - // horizontal ListView flag(only Android support) - horizontal={horizontal} + horizontal={horizontal} // horizontal ListView flag style={[{ backgroundColor: '#ffffff' }, horizontal ? { height: 50 } : { flex: 1 }]} numberOfRows={dataSource.length} renderRow={this.getRenderRow} @@ -297,33 +295,32 @@ export default class ListExample extends React.Component { onScroll={this.onScroll} scrollEventThrottle={1000} // 1s /> - {Platform.OS === 'android' - ? this.changeDirection()} - style={{ - position: 'absolute', - right: 20, - bottom: 20, - width: 67, - height: 67, - borderRadius: 30, - boxShadowOpacity: 0.6, - boxShadowRadius: 5, - boxShadowOffsetX: 3, - boxShadowOffsetY: 3, - boxShadowColor: '#4c9afa' }}> - + this.changeDirection()} + style={{ + position: 'absolute', + right: 20, + bottom: 20, + width: 67, + height: 67, + borderRadius: 30, + boxShadowOpacity: 0.6, + boxShadowRadius: 5, + boxShadowOffsetX: 3, + boxShadowOffsetY: 3, + boxShadowColor: '#4c9afa' }}> + 切换方向 - : null} + ); } diff --git a/driver/js/examples/hippy-vue-demo/src/components/demos/demo-list.vue b/driver/js/examples/hippy-vue-demo/src/components/demos/demo-list.vue index 853bda36ee8..24d2a913cb2 100644 --- a/driver/js/examples/hippy-vue-demo/src/components/demos/demo-list.vue +++ b/driver/js/examples/hippy-vue-demo/src/components/demos/demo-list.vue @@ -78,7 +78,6 @@
-import { type ListViewEvent, Native } from '@hippy/vue-next'; +import { type ListViewEvent } from '@hippy/vue-next'; import { defineComponent, ref, onMounted, type Ref } from '@vue/runtime-core'; const STYLE_LOADING = 100; @@ -269,7 +268,6 @@ export default defineComponent({ list, STYLE_LOADING, horizontal, - Platform: Native.Platform, onAppear, onDelete, onDisappear, From 9a197697ff71c2ec03355b8c931cd3c79a53bd8b Mon Sep 17 00:00:00 2001 From: siguangli Date: Mon, 14 Oct 2024 11:11:00 +0800 Subject: [PATCH 06/52] fix(android): relayout waterfall when scroll idle and back top --- .../views/hippylist/HippyRecyclerView.java | 17 +++++++++++++--- .../hippylist/RecyclerViewEventHelper.java | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerView.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerView.java index a2be91b24bb..60e66bf913c 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerView.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerView.java @@ -20,6 +20,7 @@ import android.content.Context; import android.graphics.Rect; +import android.util.Log; import android.view.ViewConfiguration; import android.widget.FrameLayout; import androidx.annotation.NonNull; @@ -49,6 +50,7 @@ public class HippyRecyclerView extends HippyRecyclerViewBase implements IHeaderAttachListener, HippyViewHolderAbandonListener, HippyNestedScrollTarget2 { + private static final String TAG = "HippyRecyclerView"; private static int DEFAULT_ITEM_VIEW_CACHE_SIZE = 4; private static final int INVALID_POINTER = -1; protected ADP listAdapter; @@ -253,10 +255,19 @@ private void scrollToInitContentOffset() { * 刷新数据 */ public void setListData() { - LogUtils.d("HippyRecyclerView", "itemCount =" + listAdapter.getItemCount()); LayoutManager layoutManager = getLayoutManager(); + int currentNodeCount = listAdapter.getRenderNodeCount(); if (layoutManager instanceof StaggeredGridLayoutManager) { - listAdapter.notifyItemRangeChanged(renderNodeCount, listAdapter.getRenderNodeCount() - renderNodeCount); + LogUtils.d(TAG, "setListData: lastNodeCount " + renderNodeCount + ", currentNodeCount " + currentNodeCount); + int[] firstVisibleItem = null; + firstVisibleItem = ((HippyStaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(firstVisibleItem); + if (renderNodeCount >= currentNodeCount && firstVisibleItem != null + && (firstVisibleItem[0] == 0 || firstVisibleItem[0] == 1)) { + LogUtils.d(TAG, "setListData: firstVisibleItem[0] " + firstVisibleItem[0]); + listAdapter.notifyDataSetChanged(); + } else if (renderNodeCount < currentNodeCount) { + listAdapter.notifyItemRangeInserted(renderNodeCount, listAdapter.getRenderNodeCount() - renderNodeCount); + } } else { listAdapter.notifyDataSetChanged(); } @@ -264,7 +275,7 @@ public void setListData() { overPullHelper.enableOverPullUp(!listAdapter.hasFooter()); overPullHelper.enableOverPullDown(!listAdapter.hasHeader()); } - renderNodeCount = listAdapter.getRenderNodeCount(); + renderNodeCount = currentNodeCount; if (renderNodeCount > 0 && mInitialContentOffset > 0) { scrollToInitContentOffset(); } diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/RecyclerViewEventHelper.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/RecyclerViewEventHelper.java index fc01c5787a5..a5169be0f36 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/RecyclerViewEventHelper.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/RecyclerViewEventHelper.java @@ -28,6 +28,7 @@ import androidx.recyclerview.widget.HippyStaggeredGridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.LayoutManager; import androidx.recyclerview.widget.RecyclerView.OnScrollListener; @@ -56,6 +57,7 @@ public class RecyclerViewEventHelper extends OnScrollListener implements OnLayoutChangeListener, OnAttachStateChangeListener, HippyOverPullListener { + private static final int WATERFALL_SCROLL_RELAYOUT_THRESHOLD = 4; protected final HippyRecyclerView hippyRecyclerView; private boolean scrollBeginDragEventEnable; private boolean scrollEndDragEventEnable; @@ -179,6 +181,21 @@ protected HippyViewEvent getOnScrollDragEndedEvent() { return onScrollDragEndedEvent; } + private void relayoutWaterfallIfNeeded() { + LayoutManager layoutManager = hippyRecyclerView.getLayoutManager(); + if (layoutManager instanceof HippyStaggeredGridLayoutManager) { + int[] firstVisibleItem = null; + firstVisibleItem = ((HippyStaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(firstVisibleItem); + if (firstVisibleItem != null && (firstVisibleItem[0] <= WATERFALL_SCROLL_RELAYOUT_THRESHOLD)) { + Adapter adapter = hippyRecyclerView.getAdapter(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + hippyRecyclerView.dispatchLayout(); + } + } + } + } + @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { int oldState = currentState; @@ -190,6 +207,9 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) { sendDragEndEvent(oldState, currentState); sendFlingEvent(newState); sendFlingEndEvent(oldState, currentState); + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + relayoutWaterfallIfNeeded(); + } } @Override From 53c8a0985a01b24547d0a913c800b0bb73cdf55e Mon Sep 17 00:00:00 2001 From: siguangli Date: Mon, 14 Oct 2024 11:25:46 +0800 Subject: [PATCH 07/52] fix(android): modal host view crash --- .../hippy/uimanager/HippyViewController.java | 9 +++++-- .../views/modal/HippyModalHostManager.java | 10 +++++++ .../hippy/views/modal/HippyModalHostView.java | 27 ++++++++++--------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/uimanager/HippyViewController.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/uimanager/HippyViewController.java index d6bcb0fa233..be449deac6e 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/uimanager/HippyViewController.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/uimanager/HippyViewController.java @@ -37,6 +37,7 @@ import com.tencent.mtt.hippy.views.common.HippyNestedScrollComponent.Priority; import com.tencent.mtt.hippy.views.common.HippyNestedScrollHelper; import com.tencent.mtt.hippy.views.custom.HippyCustomPropsController; +import com.tencent.mtt.hippy.views.modal.HippyModalHostView; import com.tencent.mtt.hippy.views.view.HippyViewGroup; import com.tencent.renderer.NativeRenderContext; import com.tencent.renderer.Renderer; @@ -543,8 +544,12 @@ private boolean checkOverflowVisible(@NonNull View view) { protected void addView(ViewGroup parentView, View view, int index) { int realIndex = index; - if (realIndex > parentView.getChildCount()) { - realIndex = parentView.getChildCount(); + int childCount = parentView.getChildCount(); + if (parentView instanceof HippyModalHostView) { + childCount = ((HippyModalHostView) parentView).getModalChildCount(); + } + if (realIndex > childCount) { + realIndex = childCount; } try { parentView.addView(view, realIndex); diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostManager.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostManager.java index f819745f19f..a62f732a061 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostManager.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostManager.java @@ -20,6 +20,7 @@ import android.content.DialogInterface; import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; import com.tencent.mtt.hippy.annotation.HippyController; import com.tencent.mtt.hippy.annotation.HippyControllerProps; @@ -101,4 +102,13 @@ public void onAfterUpdateProps(@NonNull HippyModalHostView v) { v.showOrUpdate(); } + @Override + public int getChildCount(HippyModalHostView modalHostView) { + return modalHostView.getModalChildCount(); + } + + @Override + public View getChildAt(HippyModalHostView modalHostView, int i) { + return modalHostView.getModalChildAt(i); + } } diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostView.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostView.java index de6e82e72f9..0469ea744d9 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostView.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/modal/HippyModalHostView.java @@ -126,16 +126,6 @@ public void addView(View child, int index) { mDialogRootView.addView(child, index); } - @Override - public int getChildCount() { - return mDialogRootView.getChildCount(); - } - - @Override - public View getChildAt(int index) { - return mDialogRootView.getChildAt(index); - } - @Override public void removeView(View child) { mDialogRootView.removeView(child); @@ -143,10 +133,23 @@ public void removeView(View child) { @Override public void removeViewAt(int index) { - View child = getChildAt(index); + View child = getModalChildAt(index); mDialogRootView.removeView(child); } + // Do not directly override the getChildCount method of ModalHostView, as it may cause the crash: + // java.lang.IllegalArgumentException: parameter must be a descendant + // Because under Modal, there are actually no child views. When the system traverses internally, it returns the + // number of child views of mDialogRootView, which leads to inconsistent parent values in the internal + // verification process of the system. + public int getModalChildCount() { + return mDialogRootView.getChildCount(); + } + + public View getModalChildAt(int index) { + return mDialogRootView.getChildAt(index); + } + @Override public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { return false; @@ -243,7 +246,7 @@ protected void setDialogBar(boolean isDarkIcon) { lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; window.setAttributes(lp); sysUI = sysUI | View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } else if (mEnterImmersionStatusBar) { sysUI = sysUI & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; sysUI = sysUI & ~View.SYSTEM_UI_FLAG_LAYOUT_STABLE; From 338e32a5d10ea28ac79c87cdff1e15327bac71e8 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Tue, 15 Oct 2024 14:27:36 +0800 Subject: [PATCH 08/52] feat(ios): add keep-alive setting prop to list item (experimental) --- .../listview/HippyNextBaseListItemView.h | 4 -- .../HippyNextBaseListItemViewManager.m | 7 +++- .../listview/HippyNextBaseListView.mm | 15 ++++++- .../HippyNextBaseListViewDataSource.m | 8 ++-- .../listview/HippyNextShadowListItem.h | 39 +++++++++++++++++++ .../listview/HippyNextShadowListItem.m | 27 +++++++++++++ 6 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.h create mode 100644 renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.m diff --git a/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemView.h b/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemView.h index 8a97cecbdf9..9a36f449309 100644 --- a/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemView.h +++ b/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemView.h @@ -26,8 +26,4 @@ @interface HippyNextBaseListItemView : HippyView -@property (nonatomic, strong) id type; -@property (nonatomic, assign) BOOL isSticky; - - @end diff --git a/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemViewManager.m b/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemViewManager.m index 02dd55cb986..929ae385e46 100644 --- a/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemViewManager.m +++ b/renderer/native/ios/renderer/component/listview/HippyNextBaseListItemViewManager.m @@ -23,24 +23,27 @@ #import "HippyNextBaseListItemViewManager.h" #import "HippyNextBaseListItemView.h" #import "HippyShadowWaterfallItem.h" +#import "HippyNextShadowListItem.h" + @implementation HippyNextBaseListItemViewManager HIPPY_EXPORT_MODULE(ListViewItem) HIPPY_EXPORT_VIEW_PROPERTY(type, id) -HIPPY_EXPORT_VIEW_PROPERTY(isSticky, BOOL) HIPPY_EXPORT_VIEW_PROPERTY(onAppear, HippyDirectEventBlock) HIPPY_EXPORT_VIEW_PROPERTY(onDisappear, HippyDirectEventBlock) HIPPY_EXPORT_VIEW_PROPERTY(onWillAppear, HippyDirectEventBlock) HIPPY_EXPORT_VIEW_PROPERTY(onWillDisappear, HippyDirectEventBlock) +HIPPY_EXPORT_SHADOW_PROPERTY(sticky, BOOL) +HIPPY_EXPORT_SHADOW_PROPERTY(keepAlive, BOOL) - (UIView *)view { return [[HippyNextBaseListItemView alloc] init]; } - (HippyShadowView *)shadowView { - return [[HippyShadowWaterfallItem alloc] init]; + return [[HippyNextShadowListItem alloc] init]; } @end diff --git a/renderer/native/ios/renderer/component/listview/HippyNextBaseListView.mm b/renderer/native/ios/renderer/component/listview/HippyNextBaseListView.mm index d4934955238..13b0fe21380 100644 --- a/renderer/native/ios/renderer/component/listview/HippyNextBaseListView.mm +++ b/renderer/native/ios/renderer/component/listview/HippyNextBaseListView.mm @@ -33,6 +33,7 @@ #import "UIView+Hippy.h" #import "UIView+Render.h" #import "HippyShadowListView.h" +#import "HippyNextShadowListItem.h" static NSString *const kCellIdentifier = @"HippyListCellIdentifier"; static NSString *const kSupplementaryIdentifier = @"HippySupplementaryIdentifier"; @@ -41,6 +42,7 @@ @interface HippyNextBaseListView () { BOOL _isInitialListReady; NSArray *_previousVisibleCells; + NSMutableArray *_keepAliveCellViews; // cellViews that marked keep-Alive } @end @@ -265,17 +267,28 @@ - (void)collectionView:(UICollectionView *)collectionView - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { HippyNextBaseListViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCellIdentifier forIndexPath:indexPath]; - HippyShadowView *shadowView = [self.dataSource cellForIndexPath:indexPath]; + HippyNextShadowListItem *shadowView = (HippyNextShadowListItem *)[self.dataSource cellForIndexPath:indexPath]; UIView *cellView = nil; UIView *cachedVisibleCellView = [_cachedWeakCellViews objectForKey:shadowView.hippyTag]; if (cachedVisibleCellView) { cellView = cachedVisibleCellView; + // Remove keep-Alive cellView if needed + if ([_keepAliveCellViews containsObject:cachedVisibleCellView] && shadowView.keepAlive == NO) { + [_keepAliveCellViews removeObject:cachedVisibleCellView]; + } HippyLogTrace(@"%@ 🟢 use cached visible cellView at {%ld - %ld} for %@", self.hippyTag, indexPath.section, indexPath.row, shadowView.hippyTag); } else { cellView = [self.uiManager createViewForShadowListItem:shadowView]; [_cachedWeakCellViews setObject:cellView forKey:shadowView.hippyTag]; + // Add keep-Alive cellView to cache if needed + if (shadowView.keepAlive) { + if (!_keepAliveCellViews) { + _keepAliveCellViews = [NSMutableArray array]; + } + [_keepAliveCellViews addObject:cellView]; + } HippyLogTrace(@"%@ 🟡 create cellView at {%ld - %ld} for %@", self.hippyTag, indexPath.section, indexPath.row, shadowView.hippyTag); } diff --git a/renderer/native/ios/renderer/component/listview/HippyNextBaseListViewDataSource.m b/renderer/native/ios/renderer/component/listview/HippyNextBaseListViewDataSource.m index 8bb04d095e4..700377a677d 100644 --- a/renderer/native/ios/renderer/component/listview/HippyNextBaseListViewDataSource.m +++ b/renderer/native/ios/renderer/component/listview/HippyNextBaseListViewDataSource.m @@ -24,10 +24,9 @@ #import "HippyNextBaseListViewDataSource.h" #import "HippyShadowView.h" #import "HippyShadowListView.h" +#import "HippyNextShadowListItem.h" -static NSString * const kStickyCellPropKey = @"sticky"; - @interface HippyNextBaseListViewDataSource () { NSMutableArray *_shadowHeaderViews; } @@ -42,9 +41,8 @@ - (void)setDataSource:(NSArray *)dataSource containBannerView NSMutableArray *shadowSectionCell = nil; BOOL isFirstIndex = YES; for (HippyShadowView *shadowView in dataSource) { - if ([self.itemViewName isEqualToString:shadowView.viewName]) { - NSNumber *sticky = shadowView.props[kStickyCellPropKey]; - if ([sticky boolValue]) { + if ([shadowView isKindOfClass:HippyNextShadowListItem.class]) { + if (((HippyNextShadowListItem *)shadowView).isSticky) { [shadowHeaders addObject:shadowView]; if (shadowSectionCell) { [shadowCells addObject:shadowSectionCell]; diff --git a/renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.h b/renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.h new file mode 100644 index 00000000000..93a54d9473d --- /dev/null +++ b/renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.h @@ -0,0 +1,39 @@ +/*! + * iOS SDK + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#import "HippyShadowWaterfallItem.h" + +NS_ASSUME_NONNULL_BEGIN + +/// ListView item's shadow view +@interface HippyNextShadowListItem : HippyShadowWaterfallItem + +/// Whether item is stick to the top +@property (nonatomic, assign, getter=isSticky) BOOL sticky; + +/// Memory management property that sets item to exist for the lifetime of listView +@property (nonatomic, assign) BOOL keepAlive; + +@end + +NS_ASSUME_NONNULL_END diff --git a/renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.m b/renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.m new file mode 100644 index 00000000000..0fc642864d7 --- /dev/null +++ b/renderer/native/ios/renderer/component/listview/HippyNextShadowListItem.m @@ -0,0 +1,27 @@ +/*! + * iOS SDK + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "HippyNextShadowListItem.h" + +@implementation HippyNextShadowListItem + +@end From 92ce837adbb1545d3355c81ae2736f97d4bf9b7c Mon Sep 17 00:00:00 2001 From: zealotchen <92966734+zealotchen0@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:12:53 +0800 Subject: [PATCH 09/52] feat(doc): update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bbd6ae55a27..02c62366e1b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Hippy is now applied in [Tencent](http://www.tencent.com/) major apps such as Mo * Excellent performance with JS engine binding communication. * Build-in recyclable component with better performance. * Smoothly and gracefully migrate to Web browser. -* Fully supported Flex [Layout engine](./layout). +* Fully supported Flex [Layout engine](https://github.com/Tencent/taitank). ## 🔨 Getting started From 64db899ae007cfa6a275ce0912af32f38734fda9 Mon Sep 17 00:00:00 2001 From: zealotchen Date: Mon, 14 Oct 2024 19:45:15 +0800 Subject: [PATCH 10/52] feat(react): remove unregisted event --- .../hippy-react/src/components/list-view.tsx | 29 ++++++++++--------- .../src/components/waterfall-view.tsx | 24 +++++++-------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/driver/js/packages/hippy-react/src/components/list-view.tsx b/driver/js/packages/hippy-react/src/components/list-view.tsx index db096880c59..b8e78583afd 100644 --- a/driver/js/packages/hippy-react/src/components/list-view.tsx +++ b/driver/js/packages/hippy-react/src/components/list-view.tsx @@ -494,20 +494,21 @@ class ListView extends React.Component { style = getFooterStyle(); } if (typeof renderPullFooter === 'function') { - pullFooter = ( - { - this.pullFooter = ref; - }} - onFooterPulling={onFooterPulling} - onFooterReleased={onFooterReleased} - > - { renderPullFooter() } - - ); + const footerProps: any = { + style, + key: 'pull-footer', + ref: (ref) => { + this.pullFooter = ref; + }, + }; + + if (typeof onFooterPulling === 'function') { + footerProps.onFooterPulling = onFooterPulling; + } + if (typeof onFooterPulling === 'function') { + footerProps.onFooterReleased = onFooterReleased; + } + pullFooter = {renderPullFooter()}; } return pullFooter; } diff --git a/driver/js/packages/hippy-react/src/components/waterfall-view.tsx b/driver/js/packages/hippy-react/src/components/waterfall-view.tsx index 77ea38be498..af2107f8677 100644 --- a/driver/js/packages/hippy-react/src/components/waterfall-view.tsx +++ b/driver/js/packages/hippy-react/src/components/waterfall-view.tsx @@ -458,18 +458,18 @@ class WaterfallView extends React.Component { ) { let pullFooter: JSX.Element | null = null; if (typeof renderPullFooter === 'function') { - pullFooter = ( - { - this.pullFooter = ref; - }} - onFooterPulling={onFooterPulling} - onFooterReleased={onFooterReleased} - > - { renderPullFooter() } - - ); + const footerProps: any = { + key: 'PullFooter', + ref: (ref) => { + this.pullFooter = ref; + }, + onFooterReleased, + }; + + if (typeof onFooterPulling === 'function') { + footerProps.onFooterPulling = onFooterPulling; + } + pullFooter = {renderPullFooter()}; } return pullFooter; } From 55b762216de9afd53a7c255c684c59cabe4dc4fa Mon Sep 17 00:00:00 2001 From: zealotchen Date: Fri, 13 Sep 2024 16:28:33 +0800 Subject: [PATCH 11/52] feat(vue): support ul refresh scroll --- .../hippy-vue-native-components/src/ul-refresh.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/driver/js/packages/hippy-vue-native-components/src/ul-refresh.ts b/driver/js/packages/hippy-vue-native-components/src/ul-refresh.ts index f999ad686ca..39d37a954c4 100644 --- a/driver/js/packages/hippy-vue-native-components/src/ul-refresh.ts +++ b/driver/js/packages/hippy-vue-native-components/src/ul-refresh.ts @@ -24,6 +24,17 @@ function registerUlRefresh(Vue: any) { Vue.registerElement('hi-ul-refresh-wrapper', { component: { name: 'RefreshWrapper', + processEventData(event, nativeEventName, nativeEventParams) { + switch (nativeEventName) { + case 'onScroll': { + event.offsetX = nativeEventParams.contentOffset.x; + event.offsetY = nativeEventParams.contentOffset.y; + break; + } + default: + } + return event; + }, }, }); @@ -53,6 +64,7 @@ function registerUlRefresh(Vue: any) { render(h: any) { const on = getEventRedirector.call(this, [ 'refresh', + 'scroll', ]); return h('hi-ul-refresh-wrapper', { on, From 1f1eb929ab4a2ff9bac2f8818c1829a4f74f0cdd Mon Sep 17 00:00:00 2001 From: siguangli Date: Tue, 15 Oct 2024 16:43:13 +0800 Subject: [PATCH 12/52] fix(android): image module get size support return bitmap --- .../image/ImageLoaderModule.java | 53 ++++++++++++++----- .../component/drawable/ContentDrawable.java | 2 +- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java b/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java index 74022f7eb10..0f7282ec50c 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java @@ -16,6 +16,7 @@ package com.tencent.mtt.hippy.modules.nativemodules.image; +import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -25,6 +26,7 @@ import com.tencent.mtt.hippy.modules.Promise; import com.tencent.mtt.hippy.modules.nativemodules.HippyNativeModuleBase; import com.tencent.mtt.hippy.runtime.builtins.JSObject; +import com.tencent.mtt.hippy.utils.LogUtils; import com.tencent.vfs.ResourceDataHolder; import com.tencent.vfs.VfsManager; import com.tencent.vfs.VfsManager.FetchResourceCallback; @@ -33,6 +35,7 @@ @HippyNativeModule(name = "ImageLoaderModule") public class ImageLoaderModule extends HippyNativeModuleBase { + private final String TAG = "ImageLoaderModule"; private final VfsManager mVfsManager; private static final String ERROR_KEY_MESSAGE = "message"; @@ -64,6 +67,41 @@ private HashMap generateRequestParams() { return requestParams; } + private void onFetchFailed(final String url, final Promise promise, @NonNull final ResourceDataHolder dataHolder) { + String message = + dataHolder.errorMessage != null ? dataHolder.errorMessage : ""; + String errorMsg = "Fetch image failed, url=" + url + ", msg=" + message; + JSObject jsObject = new JSObject(); + jsObject.set(ERROR_KEY_MESSAGE, errorMsg); + promise.reject(jsObject); + } + + private void handleFetchResult(final String url, final Promise promise, @NonNull final ResourceDataHolder dataHolder) { + byte[] bytes = dataHolder.getBytes(); + Bitmap bitmap = dataHolder.bitmap; + LogUtils.d(TAG, "handleFetchResult: url " + url + ", result " + dataHolder.resultCode); + if (dataHolder.resultCode == ResourceDataHolder.RESOURCE_LOAD_SUCCESS_CODE) { + if (bitmap != null && !bitmap.isRecycled()) { + LogUtils.d(TAG, "handleFetchResult: url " + url + + ", bitmap width " + bitmap.getWidth() + ", bitmap height " + bitmap.getHeight()); + JSObject jsObject = new JSObject(); + jsObject.set("width", bitmap.getWidth()); + jsObject.set("height", bitmap.getHeight()); + promise.resolve(jsObject); + } else if (bytes != null && bytes.length > 0) { + decodeImageData(url, bytes, promise); + } else { + if (TextUtils.isEmpty(dataHolder.errorMessage)) { + dataHolder.errorMessage = "Invalid image data or bitmap!"; + } + onFetchFailed(url, promise, dataHolder); + } + } else { + onFetchFailed(url, promise, dataHolder); + } + dataHolder.recycle(); + } + @HippyMethod(name = "getSize") public void getSize(final String url, final Promise promise) { if (TextUtils.isEmpty(url)) { @@ -76,20 +114,7 @@ public void getSize(final String url, final Promise promise) { new FetchResourceCallback() { @Override public void onFetchCompleted(@NonNull final ResourceDataHolder dataHolder) { - byte[] bytes = dataHolder.getBytes(); - if (dataHolder.resultCode - != ResourceDataHolder.RESOURCE_LOAD_SUCCESS_CODE || bytes == null - || bytes.length <= 0) { - String message = - dataHolder.errorMessage != null ? dataHolder.errorMessage : ""; - String errorMsg = "Fetch image failed, url=" + url + ", msg=" + message; - JSObject jsObject = new JSObject(); - jsObject.set(ERROR_KEY_MESSAGE, errorMsg); - promise.reject(jsObject); - } else { - decodeImageData(url, bytes, promise); - } - dataHolder.recycle(); + handleFetchResult(url, promise, dataHolder); } @Override diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java index ca25a7857ab..90614a82ba0 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/component/drawable/ContentDrawable.java @@ -162,7 +162,7 @@ public void draw(@NonNull Canvas canvas) { drawGif(canvas, mImageHolder.getGifMovie()); } else { Bitmap bitmap = mImageHolder.getBitmap(); - if (bitmap != null) { + if (bitmap != null && !bitmap.isRecycled()) { drawBitmap(canvas, bitmap); } } From f7da94c54d390ed037587911c8652c151b787602 Mon Sep 17 00:00:00 2001 From: siguangli Date: Wed, 16 Oct 2024 11:35:30 +0800 Subject: [PATCH 13/52] fix(android): waterfall scroll offset after dispatch layout --- .../src/components/WaterfallView/index.jsx | 1 - .../widget/HippyGridSpacesItemDecoration.java | 13 ------------ .../HippyStaggeredGridLayoutManager.java | 21 +++++++------------ .../hippylist/HippyRecyclerListAdapter.java | 11 +++++++++- .../views/waterfall/HippyWaterfallView.java | 9 ++++++++ 5 files changed, 27 insertions(+), 28 deletions(-) diff --git a/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx b/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx index 70ab0cbb087..4fd51526e5b 100644 --- a/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx +++ b/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx @@ -372,7 +372,6 @@ export default class ListExample extends React.Component { getItemKey={this.getItemKey} getItemStyle={this.getItemStyle} getHeaderStyle={this.getHeaderStyle} - contentInset={contentInset} /> ); } diff --git a/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyGridSpacesItemDecoration.java b/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyGridSpacesItemDecoration.java index 11eb0048dc3..e065db8fd0b 100644 --- a/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyGridSpacesItemDecoration.java +++ b/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyGridSpacesItemDecoration.java @@ -65,23 +65,10 @@ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, lp.leftMargin = 0; return; } - ViewHolder vh = lp.mViewHolder; - int margin = mItemSpacing; - HippyRecyclerListAdapter adapter = (HippyRecyclerListAdapter) parent.getAdapter(); - if (lp.isFullSpan()) { - margin = 0; - } else if (vh != null) { - int headerCount = adapter.hasHeader() ? 1 : 0; - if (!adapter.hasBannerView() && vh.getLayoutPosition() < (mNumberOfColumns + headerCount)) { - margin = 0; - } - } if (HippyListUtils.isVerticalLayout(parent)) { lp.bottomMargin = mItemSpacing; - lp.topMargin = margin; } else { lp.rightMargin = mItemSpacing; - lp.leftMargin = margin; } } } diff --git a/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyStaggeredGridLayoutManager.java b/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyStaggeredGridLayoutManager.java index 5532819fed2..b0a3c01a6c1 100644 --- a/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyStaggeredGridLayoutManager.java +++ b/renderer/native/android/src/main/java/androidx/recyclerview/widget/HippyStaggeredGridLayoutManager.java @@ -30,8 +30,6 @@ import com.tencent.mtt.hippy.views.hippylist.HippyRecyclerListAdapter; import com.tencent.mtt.hippy.views.hippylist.PullRefreshContainer; import com.tencent.renderer.node.ListItemRenderNode; -import com.tencent.renderer.node.PullFooterRenderNode; -import com.tencent.renderer.node.PullHeaderRenderNode; import com.tencent.renderer.node.RenderNode; import com.tencent.renderer.node.WaterfallItemRenderNode; @@ -63,22 +61,22 @@ public void layoutDecoratedWithMargins(@NonNull View child, int left, int top, i (StaggeredGridLayoutManager.LayoutParams) child.getLayoutParams(); final int spanIndex = lp.getSpanIndex(); final boolean isFullSpan = lp.isFullSpan(); + int lf = left; + int rt = right; if (isFullSpan) { child.layout(left, top, right, bottom); } else { - int lf = mRecyclerView.getPaddingLeft() + spanIndex * (lp.width + lf = mRecyclerView.getPaddingLeft() + spanIndex * (lp.width + mItemDecoration.getColumnSpacing()); - int rt = mRecyclerView.getPaddingLeft() + (spanIndex + 1) * lp.width + rt = mRecyclerView.getPaddingLeft() + (spanIndex + 1) * lp.width + spanIndex * mItemDecoration.getColumnSpacing(); - child.layout(lf, top, rt, bottom); } + super.layoutDecoratedWithMargins(child, lf, top, rt, bottom); int size; if (child instanceof PullRefreshContainer) { size = getOrientation() == RecyclerView.VERTICAL ? bottom - top : right - left; } else { - size = getOrientation() == RecyclerView.VERTICAL ? lp.height - + mItemDecoration.getItemSpacing() - : lp.width + mItemDecoration.getItemSpacing(); + size = getOrientation() == RecyclerView.VERTICAL ? lp.height : lp.width; } RenderNode childNode = RenderManager.getRenderNode(child); if (childNode instanceof WaterfallItemRenderNode) { @@ -162,11 +160,7 @@ private int computeScrollOffset() { private int getChildSize(@NonNull ListItemRenderNode child) { Integer size = itemSizeMaps.get(child.getId()); if (size == null) { - if (child.isPullFooter() || child.isPullHeader()) { - size = getItemSizeFromAdapter(child); - } else { - size = getItemSizeFromAdapter(child) + mItemDecoration.getItemSpacing(); - } + size = getItemSizeFromAdapter(child); } return Math.max(size, 0); } @@ -280,6 +274,7 @@ int getItemSizeFromAdapter(ListItemRenderNode node) { ItemLayoutParams layoutInfo = (ItemLayoutParams) adapter; resetLayoutParams(); layoutInfo.getItemLayoutParams(node, ITEM_LAYOUT_PARAMS); + LogUtils.d(TAG, "getItemSizeFromAdapter id " + node.getId() + ", height " + ITEM_LAYOUT_PARAMS.height); if (getOrientation() == RecyclerView.VERTICAL) { if (ITEM_LAYOUT_PARAMS.height >= 0) { int size = ITEM_LAYOUT_PARAMS.height + ITEM_LAYOUT_PARAMS.bottomMargin diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerListAdapter.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerListAdapter.java index c9ccdf084c3..f603bf1f23b 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerListAdapter.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/hippylist/HippyRecyclerListAdapter.java @@ -31,6 +31,8 @@ import com.tencent.mtt.hippy.views.list.IRecycleItemTypeChange; import com.tencent.mtt.hippy.views.refresh.HippyPullFooterView; import com.tencent.mtt.hippy.views.refresh.HippyPullHeaderView; +import com.tencent.mtt.hippy.views.waterfall.HippyWaterfallItemView; +import com.tencent.mtt.hippy.views.waterfall.HippyWaterfallView; import com.tencent.renderer.node.ListItemRenderNode; import com.tencent.renderer.node.PullFooterRenderNode; import com.tencent.renderer.node.PullHeaderRenderNode; @@ -223,7 +225,11 @@ protected void setLayoutParams(View itemView, int position) { childLp.height = isVertical ? childNode.getHeight() : MATCH_PARENT; childLp.width = isVertical ? MATCH_PARENT : childNode.getWidth(); } else { - childLp.height = childNode.getHeight(); + if ((itemView instanceof HippyWaterfallItemView) && (hippyRecyclerView instanceof HippyWaterfallView)) { + childLp.height = childNode.getHeight() + ((HippyWaterfallView) hippyRecyclerView).getItemSpacing(); + } else { + childLp.height = childNode.getHeight(); + } childLp.width = childNode.getWidth(); } itemView.setLayoutParams(childLp); @@ -342,6 +348,9 @@ private int getRenderNodeHeight(@NonNull ListItemRenderNode childNode) { } return 0; } + if ((childNode instanceof WaterfallItemRenderNode) && (hippyRecyclerView instanceof HippyWaterfallView)) { + return childNode.getHeight() + ((HippyWaterfallView) hippyRecyclerView).getItemSpacing(); + } return childNode.getHeight(); } diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/waterfall/HippyWaterfallView.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/waterfall/HippyWaterfallView.java index df98b0db936..d2badde6f8d 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/waterfall/HippyWaterfallView.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/waterfall/HippyWaterfallView.java @@ -37,6 +37,7 @@ public boolean onFling(int velocityX, int velocityY) { return isOverPulling(); } }); + setOverScrollMode(OVER_SCROLL_NEVER); } public void setColumnSpacing(int columnSpacing) { @@ -46,6 +47,14 @@ public void setColumnSpacing(int columnSpacing) { } } + public int getItemSpacing() { + RecyclerView.ItemDecoration decoration = getItemDecorationAt(0); + if (decoration instanceof HippyGridSpacesItemDecoration) { + return ((HippyGridSpacesItemDecoration) decoration).getItemSpacing(); + } + return 0; + } + public void setItemSpacing(int itemSpacing) { RecyclerView.ItemDecoration decoration = getItemDecorationAt(0); if (decoration instanceof HippyGridSpacesItemDecoration) { From 72053fef0fa2da081c0718cf7a09d24caf32c765 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Thu, 17 Oct 2024 11:11:29 +0800 Subject: [PATCH 14/52] fix(ios): add nil protection when bridge released during loading bundle --- framework/ios/base/bridge/HippyBridge.mm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/framework/ios/base/bridge/HippyBridge.mm b/framework/ios/base/bridge/HippyBridge.mm index 4f644c7c684..22e30951d91 100644 --- a/framework/ios/base/bridge/HippyBridge.mm +++ b/framework/ios/base/bridge/HippyBridge.mm @@ -558,6 +558,9 @@ - (void)beginLoadingBundle:(NSURL *)bundleURL dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [strongSelf fetchBundleWithURL:bundleURL completion:^(NSData *source, NSError *error) { __strong __typeof(weakSelf)strongSelf = weakSelf; + if (!strongSelf || !bundleURL) { + return; + } NSDictionary *userInfo; if (error) { HippyBridgeFatal(error, strongSelf); From 75c6f34f1fbf740652ad586f2247ee651deba9a6 Mon Sep 17 00:00:00 2001 From: etkmao Date: Thu, 17 Oct 2024 19:00:02 +0800 Subject: [PATCH 15/52] fix(core): LoadUntrustedContent crash protect --- driver/js/src/modules/contextify_module.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/driver/js/src/modules/contextify_module.cc b/driver/js/src/modules/contextify_module.cc index a0767dfdc7c..b45b830883b 100644 --- a/driver/js/src/modules/contextify_module.cc +++ b/driver/js/src/modules/contextify_module.cc @@ -100,8 +100,14 @@ void ContextifyModule::LoadUntrustedContent(CallbackInfo& info, void* data) { auto scope_wrapper = reinterpret_cast(std::any_cast(info.GetSlot())); auto scope = scope_wrapper->scope.lock(); FOOTSTONE_CHECK(scope); + if (!scope) { + return; + } auto context = scope->GetContext(); FOOTSTONE_CHECK(context); + if (!context) { + return; + } string_view uri; if (!context->GetValueString(info[0], &uri)) { info.GetExceptionValue()->Set(context, "The first argument must be non-empty string."); @@ -207,6 +213,9 @@ void ContextifyModule::LoadUntrustedContent(CallbackInfo& info, void* data) { auto loader = scope->GetUriLoader().lock(); FOOTSTONE_CHECK(loader); + if (!loader) { + return; + } loader->RequestUntrustedContent(uri, {}, cb); info.GetReturnValue()->SetUndefined(); From 5c918fee72006acb724db831f6e0a9e17ff55761 Mon Sep 17 00:00:00 2001 From: zealotchen Date: Fri, 18 Oct 2024 17:25:01 +0800 Subject: [PATCH 16/52] feat(devtools): fix devtools element not show --- driver/js/packages/hippy-vue/src/native/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/driver/js/packages/hippy-vue/src/native/index.ts b/driver/js/packages/hippy-vue/src/native/index.ts index 3f9a44943b1..921359b84ad 100644 --- a/driver/js/packages/hippy-vue/src/native/index.ts +++ b/driver/js/packages/hippy-vue/src/native/index.ts @@ -379,6 +379,13 @@ function getTargetNodeAttributes(targetNode: NeedToTyped) { }; delete attributes.text; delete attributes.value; + + Object.keys(attributes).forEach((key) => { + if (key !== 'id' && key !== 'hippyNodeId' && key !== 'class') { + // value may big int that iOS do not support, should delete + delete attributes[key]; + } + }); return attributes; } catch (e) { warn('getTargetNodeAttributes error:', e); From 16d095435d51fc25b2ef15ec194dee7362839485 Mon Sep 17 00:00:00 2001 From: zealotchen Date: Mon, 21 Oct 2024 15:14:10 +0800 Subject: [PATCH 17/52] feat(web): fix webrender image not show --- .../scripts/hippy-webpack.web-renderer.dev.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/driver/js/examples/hippy-react-demo/scripts/hippy-webpack.web-renderer.dev.js b/driver/js/examples/hippy-react-demo/scripts/hippy-webpack.web-renderer.dev.js index eddabd07d96..793d00bb4ba 100644 --- a/driver/js/examples/hippy-react-demo/scripts/hippy-webpack.web-renderer.dev.js +++ b/driver/js/examples/hippy-react-demo/scripts/hippy-webpack.web-renderer.dev.js @@ -35,7 +35,11 @@ module.exports = { template: path.resolve('./public/index.html'), }), new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify('development'), + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 3000), + }, __PLATFORM__: JSON.stringify(platform), }), new CaseSensitivePathsPlugin(), From 29f2ba1a1edb57053ab3fe1f3c72be0e3fa46f90 Mon Sep 17 00:00:00 2001 From: zealotchen Date: Mon, 21 Oct 2024 17:39:47 +0800 Subject: [PATCH 18/52] feat(web): fix webrender scawX scawY animation --- .../examples/hippy-react-demo/src/modules/Animation/index.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/driver/js/examples/hippy-react-demo/src/modules/Animation/index.jsx b/driver/js/examples/hippy-react-demo/src/modules/Animation/index.jsx index 6f48554bea4..866eed69e7b 100644 --- a/driver/js/examples/hippy-react-demo/src/modules/Animation/index.jsx +++ b/driver/js/examples/hippy-react-demo/src/modules/Animation/index.jsx @@ -154,6 +154,7 @@ export default class AnimationExample extends React.Component { duration: 2000, delay: 0, mode: 'timing', + valueType: 'deg', timingFunction: 'linear', }), follow: false, // 配置子动画的执行是否跟随执行 @@ -165,6 +166,7 @@ export default class AnimationExample extends React.Component { duration: 2000, delay: 0, mode: 'timing', + valueType: 'deg', timingFunction: 'linear', }), follow: true, @@ -182,6 +184,7 @@ export default class AnimationExample extends React.Component { duration: 2000, delay: 0, mode: 'timing', + valueType: 'deg', timingFunction: 'linear', }), follow: false, // 配置子动画的执行是否跟随执行 @@ -193,6 +196,7 @@ export default class AnimationExample extends React.Component { duration: 2000, delay: 0, mode: 'timing', + valueType: 'deg', timingFunction: 'linear', }), follow: true, From f16c6cb8b042270af7d15b06fd0b17216785a29b Mon Sep 17 00:00:00 2001 From: zealotchen Date: Mon, 21 Oct 2024 19:22:31 +0800 Subject: [PATCH 19/52] fix(web): fix webrender listview item relayout --- .../js/packages/hippy-web-renderer/src/component/list-view.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/driver/js/packages/hippy-web-renderer/src/component/list-view.ts b/driver/js/packages/hippy-web-renderer/src/component/list-view.ts index 68297a7716a..22b87413956 100644 --- a/driver/js/packages/hippy-web-renderer/src/component/list-view.ts +++ b/driver/js/packages/hippy-web-renderer/src/component/list-view.ts @@ -570,7 +570,8 @@ export class ListViewItem extends HippyWebView { public handleReLayout(entries: ResizeObserverEntry[]) { const [entry] = entries; const { height } = entry.contentRect; - if ((height === 0 && Math.round(height) !== this.height) || Math.round(height) !== this.dom?.clientHeight) { + if ((Math.round(height) === this.height) && Math.round(height) === this.dom?.clientHeight) { + // no need to relayout ListViewItem when height is not changed return; } this.height = Math.round(height); From 78fa2858a2e7f36d0a697f7b1f87321c6d1d201a Mon Sep 17 00:00:00 2001 From: wwwcg Date: Mon, 21 Oct 2024 19:47:47 +0800 Subject: [PATCH 20/52] fix(ios): websocket module support extra headers (#4069) (#4081) --- .../ios/debug/websocket/HippySRWebSocket.h | 3 +++ .../ios/debug/websocket/HippySRWebSocket.m | 18 +++++++++++++++--- .../debug/websocket/HippyWebSocketManager.m | 16 ++++++++++++---- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/framework/ios/debug/websocket/HippySRWebSocket.h b/framework/ios/debug/websocket/HippySRWebSocket.h index 9bd52a33ff0..003fa449fff 100644 --- a/framework/ios/debug/websocket/HippySRWebSocket.h +++ b/framework/ios/debug/websocket/HippySRWebSocket.h @@ -66,6 +66,9 @@ extern NSString *const HippySRHTTPResponseErrorKey; // Some helper constructors. - (instancetype)initWithURL:(NSURL *)url protocols:(NSArray *)protocols; +- (instancetype)initWithURL:(NSURL *)url + extraHeaders:(NSDictionary *)extraHeaders + protocols:(NSArray *)protocols; - (instancetype)initWithURL:(NSURL *)url; // Delegate queue will be dispatch_main_queue by default. diff --git a/framework/ios/debug/websocket/HippySRWebSocket.m b/framework/ios/debug/websocket/HippySRWebSocket.m index bbe7374dbd1..16382e304c3 100644 --- a/framework/ios/debug/websocket/HippySRWebSocket.m +++ b/framework/ios/debug/websocket/HippySRWebSocket.m @@ -276,8 +276,9 @@ - (instancetype)initWithURLRequest:(NSURLRequest *)request - (instancetype)initWithURL:(NSURL *)URL { return [self initWithURL:URL protocols:nil]; } -- (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray *)protocols -{ +- (instancetype)initWithURL:(NSURL *)URL + extraHeaders:(NSDictionary *)extraHeaders + protocols:(NSArray *)protocols { NSMutableURLRequest *request; if (URL) { // Build a mutable request so we can fill the cookie header. @@ -293,11 +294,22 @@ - (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray *)protoc // Load and set the cookie header. NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:components.URL]; - [request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:cookies]]; + NSDictionary *cookieHeaders = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; + + // Set extraHeaders passed from the js + NSMutableDictionary *allHeaders = cookieHeaders.mutableCopy ?: [NSMutableDictionary dictionary]; + if (extraHeaders) { + [allHeaders addEntriesFromDictionary:extraHeaders]; + } + [request setAllHTTPHeaderFields:allHeaders]; } return [self initWithURLRequest:request protocols:protocols]; } +- (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray *)protocols { + return [self initWithURL:URL extraHeaders:nil protocols:protocols]; +} + - (void)_HippySR_commonInit { NSString *scheme = _url.scheme.lowercaseString; diff --git a/framework/ios/debug/websocket/HippyWebSocketManager.m b/framework/ios/debug/websocket/HippyWebSocketManager.m index 44b0be3db63..42b05cfe404 100644 --- a/framework/ios/debug/websocket/HippyWebSocketManager.m +++ b/framework/ios/debug/websocket/HippyWebSocketManager.m @@ -28,6 +28,9 @@ #import "HippyDefines.h" static NSUInteger socketIndex = 0; +static NSString *const kHippyWebSocketUrlParamKey = @"url"; +static NSString *const kHippyWebSocketHeaderParamKey = @"headers"; +static NSString *const kHippySecWebSocketProtocolKey = @"Sec-WebSocket-Protocol"; #pragma mark - HippyWebSocketManager @@ -62,11 +65,16 @@ - (void)invalidate { } HIPPY_EXPORT_METHOD(connect:(NSDictionary *)params resolver:(HippyPromiseResolveBlock)resolve rejecter:(HippyPromiseRejectBlock)reject) { - NSDictionary *headers = params[@"headers"]; - NSString *url = params[@"url"]; - NSString *protocols = headers[@"Sec-WebSocket-Protocol"]; + NSDictionary *headers = params[kHippyWebSocketHeaderParamKey]; + NSString *url = params[kHippyWebSocketUrlParamKey]; + NSString *protocols = headers[kHippySecWebSocketProtocolKey]; + // prepare extra headers + NSMutableDictionary *extraHeaders = headers.mutableCopy; + [extraHeaders removeObjectForKey:kHippySecWebSocketProtocolKey]; NSArray *protocolArray = [protocols componentsSeparatedByString:@","]; - HippySRWebSocket *socket = [[HippySRWebSocket alloc] initWithURL:[NSURL URLWithString:url] protocols:protocolArray]; + HippySRWebSocket *socket = [[HippySRWebSocket alloc] initWithURL:[NSURL URLWithString:url] + extraHeaders:extraHeaders + protocols:protocolArray]; socket.delegate = self; socket.socketID = socketIndex++; NSNumber *socketId = @(socket.socketID); From 09c33aefd821dcce93451629a9225d0abc025337 Mon Sep 17 00:00:00 2001 From: zealotchen Date: Mon, 21 Oct 2024 20:18:44 +0800 Subject: [PATCH 21/52] feat(devtools): add v8 js profile --- .../devtools-integration/native/src/v8/trace_control.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/devtools/devtools-integration/native/src/v8/trace_control.cc b/devtools/devtools-integration/native/src/v8/trace_control.cc index 1b1b3972758..6e0d49104b1 100644 --- a/devtools/devtools-integration/native/src/v8/trace_control.cc +++ b/devtools/devtools-integration/native/src/v8/trace_control.cc @@ -67,6 +67,15 @@ void TraceControl::StartTracing() { auto trace_config = v8::platform::tracing::TraceConfig::CreateDefaultTraceConfig(); trace_config->SetTraceRecordMode(v8::platform::tracing::TraceRecordMode::RECORD_CONTINUOUSLY); trace_config->AddIncludedCategory(kTraceIncludedCategoryV8); + trace_config->EnableSystrace(); + trace_config->AddIncludedCategory("devtools.timeline"); + trace_config->AddIncludedCategory("v8.execute"); + trace_config->AddIncludedCategory("disabled-by-default-devtools.timeline"); + trace_config->AddIncludedCategory("disabled-by-default-devtools.timeline.frame"); + trace_config->AddIncludedCategory("disabled-by-default-devtools.timeline.stack"); + trace_config->AddIncludedCategory("disabled-by-default-v8.cpu_profiler"); + trace_config->AddIncludedCategory("disabled-by-default-v8.cpu_profiler.hires"); + trace_config->AddIncludedCategory("latencyInfo"); v8_trace_control_->StartTracing(trace_config); tracing_has_start_ = true; } From 5418b66b68ffedc3a08578b7278938a1aa40ba8c Mon Sep 17 00:00:00 2001 From: etkmao Date: Tue, 22 Oct 2024 20:36:38 +0800 Subject: [PATCH 22/52] fix(core): static destruct crash in main thread for ios (#4085) When app exits, child thread may access the destructed global static object, which causing a crash --- dom/src/dom/taitank_layout_node.cc | 4 ++-- driver/js/src/napi/jsc/jsc_ctx.cc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dom/src/dom/taitank_layout_node.cc b/dom/src/dom/taitank_layout_node.cc index cd9f1766fcd..05726b7aed6 100644 --- a/dom/src/dom/taitank_layout_node.cc +++ b/dom/src/dom/taitank_layout_node.cc @@ -98,7 +98,7 @@ class TaitankLayoutConsts { {"inherit", DIRECTION_INHERIT}, {"ltr", DIRECTION_LTR}, {"rtl", DIRECTION_RTL}}; }; -static std::shared_ptr global_layout_consts = nullptr; +static TaitankLayoutConsts* global_layout_consts = nullptr; #define TAITANK_GET_STYLE_DECL(NAME, TYPE, DEFAULT) \ static TYPE GetStyle##NAME(const std::string& key) { \ @@ -823,7 +823,7 @@ void TaitankLayoutNode::Deallocate() { void InitLayoutConsts() { if (global_layout_consts == nullptr) { - global_layout_consts = std::make_shared(); + global_layout_consts = new TaitankLayoutConsts(); } } diff --git a/driver/js/src/napi/jsc/jsc_ctx.cc b/driver/js/src/napi/jsc/jsc_ctx.cc index 51152479073..cff6d1626df 100644 --- a/driver/js/src/napi/jsc/jsc_ctx.cc +++ b/driver/js/src/napi/jsc/jsc_ctx.cc @@ -49,13 +49,13 @@ constexpr char16_t kSetStr[] = u"set"; static std::once_flag global_class_flag; static JSClassRef global_class; -static std::shared_ptr global_constructor_data_mgr = nullptr; +static ConstructorDataManager* global_constructor_data_mgr = nullptr; JSCCtx::JSCCtx(JSContextGroupRef group, std::weak_ptr vm): vm_(vm) { std::call_once(global_class_flag, []() { JSClassDefinition global = kJSClassDefinitionEmpty; global_class = JSClassCreate(&global); - global_constructor_data_mgr = std::make_shared(); + global_constructor_data_mgr = new ConstructorDataManager(); }); context_ = JSGlobalContextCreateInGroup(group, global_class); From 1308af2ba2aaa57e982f6bc3fb77cbad69ba737b Mon Sep 17 00:00:00 2001 From: zealotchen Date: Wed, 23 Oct 2024 11:07:03 +0800 Subject: [PATCH 23/52] fix(web): fix webrender not show when length is 1 --- .../src/third-lib/size-position-manager.js | 61 ++++++++----------- .../src/third-lib/virtual-list.js | 2 +- 2 files changed, 26 insertions(+), 37 deletions(-) diff --git a/driver/js/packages/hippy-web-renderer/src/third-lib/size-position-manager.js b/driver/js/packages/hippy-web-renderer/src/third-lib/size-position-manager.js index 12f2b08f31b..ddc01e6c990 100644 --- a/driver/js/packages/hippy-web-renderer/src/third-lib/size-position-manager.js +++ b/driver/js/packages/hippy-web-renderer/src/third-lib/size-position-manager.js @@ -24,7 +24,7 @@ export const ALIGN_START = 'start'; export const ALIGN_CENTER = 'center'; export const ALIGN_END = 'end'; -export default class SizePositionManager { +export default class SizeAndPositionManager { constructor({ itemCount, itemSizeGetter, @@ -50,24 +50,17 @@ export default class SizePositionManager { * It just-in-time calculates (or used cached values) for items leading up to the index. */ getSizeAndPositionForIndex(index) { - if (index < 0) { + if (index < 0 || index >= this._itemCount) { throw Error(`Requested index ${index} is outside of range 0..${this._itemCount}`); } - if(index === 0 && this._itemCount===0){ - return 0; - } - if (index >= this._itemCount && this._itemCount!==0) { - index = this._itemCount - 1; - } - if (index > this._lastMeasuredIndex) { - let lastMeasuredSizeAndPosition = this.getSizeAndPositionOfLastMeasuredItem(); - let offset = lastMeasuredSizeAndPosition.offset + - lastMeasuredSizeAndPosition.size; + const lastMeasuredSizeAndPosition = this.getSizeAndPositionOfLastMeasuredItem(); + let offset = lastMeasuredSizeAndPosition.offset + + lastMeasuredSizeAndPosition.size; for (let i = this._lastMeasuredIndex + 1; i <= index; i++) { - let size = this._itemSizeGetter({index: i}); + const size = this._itemSizeGetter({ index: i }); if (size == null || isNaN(size)) { throw Error(`Invalid size returned for index ${i} of value ${size}`); @@ -90,7 +83,7 @@ export default class SizePositionManager { getSizeAndPositionOfLastMeasuredItem() { return this._lastMeasuredIndex >= 0 ? this._itemSizeAndPositionData[this._lastMeasuredIndex] - : {offset: 0, size: 0}; + : { offset: 0, size: 0 }; } /** @@ -100,9 +93,7 @@ export default class SizePositionManager { */ getTotalSize() { const lastMeasuredSizeAndPosition = this.getSizeAndPositionOfLastMeasuredItem(); - if(this._lastMeasuredIndex === this._itemCount){ - return lastMeasuredSizeAndPosition.offset + lastMeasuredSizeAndPosition.size; - } + return lastMeasuredSizeAndPosition.offset + lastMeasuredSizeAndPosition.size + (this._itemCount - this._lastMeasuredIndex - 1) * this._estimatedItemSize; } @@ -111,7 +102,6 @@ export default class SizePositionManager { * * @param align Desired alignment within container; one of "start" (default), "center", or "end" * @param containerSize Size (width or height) of the container viewport - * @param targetIndex index target item * @return Offset to use to ensure the specified item is visible */ getUpdatedOffsetForIndex({ @@ -146,11 +136,11 @@ export default class SizePositionManager { return Math.max(0, Math.min(totalSize - containerSize, idealOffset)); } - getVisibleRange({containerSize, offset, overScanCount}) { + getVisibleRange({ containerSize, offset, overscanCount }) { const totalSize = this.getTotalSize(); if (totalSize === 0) { - return {start:0,stop:0}; + return {}; } const maxOffset = offset + containerSize; @@ -165,9 +155,9 @@ export default class SizePositionManager { offset += this.getSizeAndPositionForIndex(stop).size; } - if (overScanCount) { - start = Math.max(0, start - overScanCount); - stop = Math.min(stop + overScanCount, this._itemCount-1); + if (overscanCount) { + start = Math.max(0, start - overscanCount); + stop = Math.min(stop + overscanCount, this._itemCount); } return { @@ -185,7 +175,7 @@ export default class SizePositionManager { this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, index - 1); } - _binarySearch({low, high, offset}) { + _binarySearch({ low, high, offset }) { let middle; let currentOffset; @@ -195,7 +185,7 @@ export default class SizePositionManager { if (currentOffset === offset) { return middle; - } else if (currentOffset < offset) { + } if (currentOffset < offset) { low = middle + 1; } else if (currentOffset > offset) { high = middle - 1; @@ -207,12 +197,12 @@ export default class SizePositionManager { } } - _exponentialSearch({index, offset}) { + _exponentialSearch({ index, offset }) { let interval = 1; while ( - index < this._itemCount && - this.getSizeAndPositionForIndex(index).offset < offset + index < this._itemCount + && this.getSizeAndPositionForIndex(index).offset < offset ) { index += interval; interval *= 2; @@ -250,14 +240,13 @@ export default class SizePositionManager { low: 0, offset, }); - } else { - // If we haven't yet measured this high, fallback to an exponential search with an inner binary search. - // The exponential search avoids pre-computing sizes for the full set of items as a binary search would. - // The overall complexity for this approach is O(log n). - return this._exponentialSearch({ - index: lastMeasuredIndex, - offset, - }); } + // If we haven't yet measured this high, fallback to an exponential search with an inner binary search. + // The exponential search avoids pre-computing sizes for the full set of items as a binary search would. + // The overall complexity for this approach is O(log n). + return this._exponentialSearch({ + index: lastMeasuredIndex, + offset, + }); } } diff --git a/driver/js/packages/hippy-web-renderer/src/third-lib/virtual-list.js b/driver/js/packages/hippy-web-renderer/src/third-lib/virtual-list.js index 356cd1ba59a..f79ef38d06c 100644 --- a/driver/js/packages/hippy-web-renderer/src/third-lib/virtual-list.js +++ b/driver/js/packages/hippy-web-renderer/src/third-lib/virtual-list.js @@ -173,7 +173,7 @@ export class VirtualizedList { }); const fragment = document.createDocumentFragment(); - for (let index = start; index <= stop&&stop>0; index++) { + for (let index = start; index <= stop; index++) { fragment.appendChild(renderRow(index)); } From 865e41d9922ad07531d9c3df8030a5a46fa66c51 Mon Sep 17 00:00:00 2001 From: maxli Date: Tue, 22 Oct 2024 21:12:14 +0800 Subject: [PATCH 24/52] feat(android): add offscreenPageLimit property for view pager --- docs/api/hippy-react/components.md | 1 + .../mtt/hippy/views/viewpager/HippyViewPagerController.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/docs/api/hippy-react/components.md b/docs/api/hippy-react/components.md index b4ab90baf3e..7223bae82db 100644 --- a/docs/api/hippy-react/components.md +++ b/docs/api/hippy-react/components.md @@ -503,6 +503,7 @@ import icon from './qb_icon_new.png'; | ------------------------ | ------------------------------------------------------------ | -------------------------------------------- | -------- | | bounces | 是否开启回弹效果,默认 `true` | `boolean` | `iOS、Voltron` | | initialPage | 指定一个数字,用于决定初始化后默认显示的页面 index,默认不指定的时候是0 | `number` | `Android、iOS、hippy-react-web、Web-Renderer、Voltron` | +| offscreenPageLimit | 指定一个数字,用于设置最大挂载到view tree的page item数量,默认为1,如果在间隔较大的item之间切换遇到一些刷新闪动问题,可以尝试设置该属性为最大page item count来解决 | `number` | `Android` | | scrollEnabled | 指定 ViewPager 是否可以滑动,默认为 `true` | `boolean` | `Android、iOS、hippy-react-web、Web-Renderer、Voltron` | | onPageSelected | 指定一个函数,当 page 被选中时进行回调。回调参数是一个 event 对象,回调参数: `position: number` - 表示即将滑到的目标 page 的索引 | `(obj: {position: number}) => void` | `Android、iOS、hippy-react-web、Web-Renderer、Voltron` | | onPageScroll | 指定一个函数,当 page 被滑动时进行回调。回调参数是一个 event 对象,回调参数 `position: number` - 表示即将滑到的目标 page 的索引,`offset: number` - 当前被选中的 page 的相对位移,取值范围 -1 到 1 | `(obj: {position: number, offset: number}) => void` | `Android、iOS、Web-Renderer、Voltron` | diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java index e8e0eefdf84..5f14430a828 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/viewpager/HippyViewPagerController.java @@ -140,6 +140,11 @@ public void setOverflow(HippyViewPager pager, String overflow) { pager.setOverflow(overflow); } + @HippyControllerProps(name = "offscreenPageLimit", defaultNumber = 0, defaultType = HippyControllerProps.NUMBER) + public void setOffscreenPageLimit(HippyViewPager parent, int limit) { + parent.setOffscreenPageLimit(limit); + } + private void resolveInvalidParams(@Nullable Promise promise) { if (promise != null) { String msg = "Invalid parameter!"; From e73c63c7bad8d848c8b238427253de7481c81b1d Mon Sep 17 00:00:00 2001 From: maxli Date: Wed, 23 Oct 2024 15:19:42 +0800 Subject: [PATCH 25/52] fix(android): document improvement and update --- docs/api/hippy-react/components.md | 6 +++++ .../android-3.0-upgrade-guidelines.md | 3 +++ docs/development/native-adapter.md | 20 +++++++++++++++++ docs/development/native-module.md | 22 +++++++++++++++---- .../nativemodules/HippyNativeModuleInfo.java | 10 +-------- .../image/ImageLoaderModule.java | 4 ++-- .../hippy/annotation/HippyNativeModule.java | 7 ------ 7 files changed, 50 insertions(+), 22 deletions(-) diff --git a/docs/api/hippy-react/components.md b/docs/api/hippy-react/components.md index 7223bae82db..1921d47a0fc 100644 --- a/docs/api/hippy-react/components.md +++ b/docs/api/hippy-react/components.md @@ -157,6 +157,12 @@ import icon from './qb_icon_new.png'; > >* time: number: 可指定延迟多久后收起 PullHeader,单位ms +### expandPullHeader + +> 最低支持版本 `2.14.0` + +`() => void` 展开顶部下拉刷新条 PullHeader。当设置了`renderPullHeader`后,可以通过该方法来主动触发下拉刷新的效果。 + ### collapsePullFooter > 最低支持版本 `2.14.0` diff --git a/docs/development/android-3.0-upgrade-guidelines.md b/docs/development/android-3.0-upgrade-guidelines.md index 31b7d8ce0d0..829fde9e8e0 100644 --- a/docs/development/android-3.0-upgrade-guidelines.md +++ b/docs/development/android-3.0-upgrade-guidelines.md @@ -54,6 +54,9 @@ } ``` + +7. module注解HippyNativeModule中取消了线程属性的自定义
+ 3.0中非JSI module调用将统一走hippy-module-Thread线程调用module对应接口,开发者可以根据自己的需要自行切换线程。
diff --git a/docs/development/native-adapter.md b/docs/development/native-adapter.md index 5e3a83d294f..494e032ea0c 100644 --- a/docs/development/native-adapter.md +++ b/docs/development/native-adapter.md @@ -21,6 +21,7 @@ Hippy SDK 现在所提供的 Adapter 包括: - `HippyStorageAdapter`:数据库(KEY-VALUE)Adapter。 - `HippyExecutorSupplierAdapter`:线程池 Adapter。 - `HippyEngineMonitorAdapter`:Hippy 引擎状态监控 Adapter。 +- `HippyFontScaleAdapter`:自定义字体 Adapter。 ## HippyHttpAdapter @@ -55,6 +56,25 @@ Hippy SDK 提供默认空实现 `DefaultEngineMonitorAdapter`。当你需要查 用于支持开发者有自定义格式图片的解码需求,需要开发者自行提供接口类实例。 +## HippyFontScaleAdapter + +Hippy SDK 提供默认的实现 `DefaultFontScaleAdapter`,默认实现中未对字体做任何定制处理,如果需要加载自定义字体或者改变文字显示大小需要实现自定义font adapter并实现以下接口。 + +``` java +// 返回字体的缩放系数,开发者可以返回自定义缩放系数,来动态改变字体的显示大小 +float getFontScale(); + +// 通过该方法可以替换text中自定义表情字符 +CharSequence getEmoticonText(CharSequence text, int fontSize) + +// 根据font family和style返回自定义字体的文件路径 +String getCustomFontFilePath(String fontFamily, int style); + +// 根据font family和style返回自定义字体的Typaeface对象 +Typeface getCustomTypeface(String fontFamily, int style); + +``` +
diff --git a/docs/development/native-module.md b/docs/development/native-module.md index eddde6ffda1..364f53a8cad 100644 --- a/docs/development/native-module.md +++ b/docs/development/native-module.md @@ -43,13 +43,16 @@ public class TestModule extends HippyNativeModuleBase HippyNativeModuleBase 要求增加注解 `@HippyNativeModule` 。 -HippyNativeModule有两个注解参数: +HippyNativeModule注解参数: -- name:能力名称,js调用时需要通过此访问该能力。 -- thread:能力运行的线程。包括 `HippyNativeModule.Thread.DOM`(Dom线程)、`HippyNativeModule.Thread.MAIN`(主线程)、`HippyNativeModule.Thread.BRIDGE`(Bridge线程、默认值)。 +- name:module名称,js调用时需要通过此属性找到对应的module实例对象。 +- names:module别名,支持同一个module设置不同的名称。 +- init:默认为false,即module在首次调用的时候才会进行实例初始化,如果设置为true,在引擎创建时候就会马上创建实例并初始化 + +> **注意:init参数在非必要的情况下不要设置为true,否则可能增加引擎启动的耗时。** ``` java -@HippyNativeModule(name = "TestModule", thread = HippyNativeModule.Thread.BRIDGE) +@HippyNativeModule(name = "TestModule") public class TestModule extends HippyNativeModuleBase { ... @@ -65,8 +68,17 @@ public class TestModule extends HippyNativeModuleBase - Java基本数据类型。 - HippyArray:类似于ArrayList,线程非安全。 - HippyMap:类似于HashMap,线程非安全。 +- 基于JSValue的新数据类型:注解参数useJSValueType设置为true时适用。 - Promise:回调JS的触发器,通过 `resolve` 方法返回成功信息给JS。通过 `reject` 方法返回失败实现给JS。 +HippyMethod注解参数: + +- name:接口名称,js调用时需要通过此参数找到对应的接口信息,并进行反射调用。 +- isSync:是否为JSI接口,JSI为同步调用接口,会卡住js线程,只适用于数据结构简单且size较小的数据传输,[JSI特性介绍](feature/feature2.0/jsi.md) +- useJSValueType:接口参数是否使用新数据类型,默认为false,即使用老的HippyMap与HippyArray类型接收参数,设置为true以后参数需要使用基于JSValue为基类的扩展数据类型,[新数据类型介绍](development/type-mapping.md) + +> **注意:新数据类型不能与HippyMap或HippyArray相互嵌套混用, 否则会导致数据编解码产生错误。** + ```java @HippyMethod(name="log") public void log(String msg) @@ -105,6 +117,8 @@ public void helloNativeWithPromise(HippyMap hippyMap, Promise promise) } ``` + + ## 4. 注册Module 然后需要注册这个Module。需要在 `HippyPackage` 的 `getNativeModules` 方法中添加这个 Module,这样它才能在JS中被访问到。 diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/HippyNativeModuleInfo.java b/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/HippyNativeModuleInfo.java index 4cf1b6ad1f4..68dadcb7205 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/HippyNativeModuleInfo.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/HippyNativeModuleInfo.java @@ -23,7 +23,6 @@ import com.tencent.mtt.hippy.annotation.HippyMethod; import com.tencent.mtt.hippy.annotation.HippyNativeModule; -import com.tencent.mtt.hippy.annotation.HippyNativeModule.Thread; import com.tencent.mtt.hippy.common.HippyArray; import com.tencent.mtt.hippy.common.Provider; import com.tencent.mtt.hippy.modules.HippyModulePromise; @@ -35,7 +34,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Type; -import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -44,7 +42,6 @@ public final class HippyNativeModuleInfo { private static final String TAG = "HippyNativeModuleInfo"; private String mName; private String[] mNames; - private HippyNativeModule.Thread mThread = Thread.BRIDGE; private final Provider mProvider; private final Class mClass; @Nullable @@ -61,7 +58,6 @@ public HippyNativeModuleInfo(@NonNull Class cls, if (annotation != null) { mName = annotation.name(); mNames = annotation.names(); - mThread = annotation.thread(); initImmediately(annotation); } } @@ -96,10 +92,6 @@ public HippyNativeModuleBase getInstance() { return mInstance; } - public HippyNativeModule.Thread getThread() { - return mThread; - } - private void checkModuleMethods() { if (mMethods != null) { return; @@ -198,7 +190,7 @@ private boolean checkArgumentType(@NonNull Object args) { @Nullable private Object[] prepareArguments(@NonNull Object args, PromiseImpl promise) throws IllegalArgumentException { - if (mParamTypes == null || mParamTypes.length <= 0) { + if (mParamTypes == null || mParamTypes.length == 0) { return null; } if (!checkArgumentType(args)) { diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java b/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java index 0f7282ec50c..1b96fa7de70 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/modules/nativemodules/image/ImageLoaderModule.java @@ -77,10 +77,10 @@ private void onFetchFailed(final String url, final Promise promise, @NonNull fin } private void handleFetchResult(final String url, final Promise promise, @NonNull final ResourceDataHolder dataHolder) { - byte[] bytes = dataHolder.getBytes(); - Bitmap bitmap = dataHolder.bitmap; LogUtils.d(TAG, "handleFetchResult: url " + url + ", result " + dataHolder.resultCode); if (dataHolder.resultCode == ResourceDataHolder.RESOURCE_LOAD_SUCCESS_CODE) { + byte[] bytes = dataHolder.getBytes(); + Bitmap bitmap = dataHolder.bitmap; if (bitmap != null && !bitmap.isRecycled()) { LogUtils.d(TAG, "handleFetchResult: url " + url + ", bitmap width " + bitmap.getWidth() + ", bitmap height " + bitmap.getHeight()); diff --git a/modules/android/hippy_support/src/main/java/com/tencent/mtt/hippy/annotation/HippyNativeModule.java b/modules/android/hippy_support/src/main/java/com/tencent/mtt/hippy/annotation/HippyNativeModule.java index b26043cd04d..6fca3093edf 100644 --- a/modules/android/hippy_support/src/main/java/com/tencent/mtt/hippy/annotation/HippyNativeModule.java +++ b/modules/android/hippy_support/src/main/java/com/tencent/mtt/hippy/annotation/HippyNativeModule.java @@ -28,16 +28,9 @@ @Target(TYPE) public @interface HippyNativeModule { - enum Thread { - BRIDGE, - MAIN - } - String name(); String[] names() default {}; - Thread thread() default Thread.BRIDGE; - boolean init() default false; } From 78aff6fea4f769af41d3f740e99d1117382dfea3 Mon Sep 17 00:00:00 2001 From: siguangli Date: Wed, 23 Oct 2024 17:06:58 +0800 Subject: [PATCH 26/52] feat(android): add layout module for reset layout cache (#4089) * feat(android): add layout module for reset layout cache * fix(android): correct to YogaLayoutNode --------- Co-authored-by: siguangli --- dom/CMakeLists.txt | 2 +- dom/include/dom/dom_node.h | 2 +- dom/include/dom/layout_node.h | 5 ++ dom/include/dom/taitank_layout_node.h | 5 ++ dom/include/dom/yoga_layout_node.h | 2 + dom/src/dom/dom_node.cc | 4 + dom/src/dom/taitank_layout_node.cc | 5 ++ dom/src/dom/yoga_layout_node.cc | 4 + driver/js/CMakeLists.txt | 3 +- .../include/driver/modules/ui_layout_module.h | 56 +++++++++++++ driver/js/lib/global/UIManagerModule.js | 4 + driver/js/src/modules/ui_layout_module.cc | 81 +++++++++++++++++++ driver/js/src/scope.cc | 2 + .../js/src/vm/jsc/native_source_code_ios.cc | 4 +- .../src/vm/v8/native_source_code_android.cc | 4 +- .../src/bridge/native_source_code_flutter.cc | 4 +- 16 files changed, 178 insertions(+), 9 deletions(-) create mode 100644 driver/js/include/driver/modules/ui_layout_module.h create mode 100644 driver/js/src/modules/ui_layout_module.cc diff --git a/dom/CMakeLists.txt b/dom/CMakeLists.txt index 27b6d41b686..9027fd00546 100644 --- a/dom/CMakeLists.txt +++ b/dom/CMakeLists.txt @@ -55,7 +55,7 @@ if ("${LAYOUT_ENGINE}" STREQUAL "Yoga") target_link_libraries(${PROJECT_NAME} PRIVATE yogacore) elseif ("${LAYOUT_ENGINE}" STREQUAL "Taitank") InfraPackage_Add(taitank - REMOTE "dom/third_party/taitank/1.0.5/git-repo.tgz" + REMOTE "dom/third_party/taitank/1.0.6/git-repo.tar.gz" LOCAL "third_party/taitank" ) target_link_libraries(${PROJECT_NAME} PRIVATE taitank) diff --git a/dom/include/dom/dom_node.h b/dom/include/dom/dom_node.h index 858b1d4e14b..b485c468e30 100644 --- a/dom/include/dom/dom_node.h +++ b/dom/include/dom/dom_node.h @@ -157,7 +157,7 @@ class DomNode : public std::enable_shared_from_this { void UpdateLayoutStyleInfo( const std::unordered_map>& style_update, const std::vector& style_delete); - + void ResetLayoutCache(); /** * this method should run in dom taskrunner * */ diff --git a/dom/include/dom/layout_node.h b/dom/include/dom/layout_node.h index 01a0ec3f684..ddb1926a695 100644 --- a/dom/include/dom/layout_node.h +++ b/dom/include/dom/layout_node.h @@ -122,6 +122,11 @@ class LayoutNode { virtual void SetLayoutStyles( const std::unordered_map>& style_update, const std::vector& style_delete) = 0; + + /** + * @brief 清除节点layout缓存 + */ + virtual void ResetLayoutCache() = 0; }; void InitLayoutConsts(); diff --git a/dom/include/dom/taitank_layout_node.h b/dom/include/dom/taitank_layout_node.h index 25c906344a4..b1394e6f372 100644 --- a/dom/include/dom/taitank_layout_node.h +++ b/dom/include/dom/taitank_layout_node.h @@ -194,6 +194,11 @@ class TaitankLayoutNode : public LayoutNode, public std::enable_shared_from_this */ void SetHasNewLayout(bool has_new_layout) override; + /** + * @brief 清除节点layout缓存 + */ + void ResetLayoutCache() override; + /** * @brief 节点标脏 */ diff --git a/dom/include/dom/yoga_layout_node.h b/dom/include/dom/yoga_layout_node.h index b585e7238d2..d0153e5ee63 100644 --- a/dom/include/dom/yoga_layout_node.h +++ b/dom/include/dom/yoga_layout_node.h @@ -89,6 +89,8 @@ class YogaLayoutNode : public LayoutNode, public std::enable_shared_from_thisResetLayoutCache(); +} + void DomNode::TransferLayoutOutputsRecursive(std::vector>& changed_nodes) { auto not_equal = std::not_equal_to<>(); bool changed = layout_node_->IsDirty() || layout_node_->HasNewLayout(); diff --git a/dom/src/dom/taitank_layout_node.cc b/dom/src/dom/taitank_layout_node.cc index 05726b7aed6..b22a47dbf7b 100644 --- a/dom/src/dom/taitank_layout_node.cc +++ b/dom/src/dom/taitank_layout_node.cc @@ -238,6 +238,11 @@ void TaitankLayoutNode::SetLayoutStyles( Parser(style_update, style_delete); } +void TaitankLayoutNode::ResetLayoutCache() { + FOOTSTONE_DLOG(INFO) << "do reset layout cache"; + engine_node_->ResetLayoutRecursive(); +} + void TaitankLayoutNode::Parser( const std::unordered_map>& style_update, const std::vector& style_delete) { diff --git a/dom/src/dom/yoga_layout_node.cc b/dom/src/dom/yoga_layout_node.cc index 7b681694fa5..2d4a4d37bc3 100644 --- a/dom/src/dom/yoga_layout_node.cc +++ b/dom/src/dom/yoga_layout_node.cc @@ -280,6 +280,10 @@ void YogaLayoutNode::SetLayoutStyles( Parser(style_update, style_delete); } +void YogaLayoutNode::ResetLayoutCache() { + FOOTSTONE_DLOG(INFO) << "ResetLayoutCache not impl in yoga"; +} + void YogaLayoutNode::SetWidth(float width) { YGNodeStyleSetWidth(yoga_node_, width); } void YogaLayoutNode::SetHeight(float height) { YGNodeStyleSetHeight(yoga_node_, height); } diff --git a/driver/js/CMakeLists.txt b/driver/js/CMakeLists.txt index 3701693902e..892b5502695 100644 --- a/driver/js/CMakeLists.txt +++ b/driver/js/CMakeLists.txt @@ -199,7 +199,8 @@ set(SOURCE_SET_STANDALONE src/modules/performance/performance_paint_timing_module.cc src/modules/performance/performance_resource_timing_module.cc src/modules/timer_module.cc - src/modules/ui_manager_module.cc) + src/modules/ui_manager_module.cc + src/modules/ui_layout_module.cc) target_sources(${PROJECT_NAME} PRIVATE ${SOURCE_SET}) # The linker treats `.a` and `.o` files are different: # * `.o` files from `.a` file only referenced `.o` object files are linked. diff --git a/driver/js/include/driver/modules/ui_layout_module.h b/driver/js/include/driver/modules/ui_layout_module.h new file mode 100644 index 00000000000..4480763e5f5 --- /dev/null +++ b/driver/js/include/driver/modules/ui_layout_module.h @@ -0,0 +1,56 @@ +/* + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#pragma once + +#include +#include +#include +#include + +#include "driver/modules/module_base.h" +#include "driver/napi/callback_info.h" +#include "driver/napi/js_ctx.h" +#include "footstone/task.h" +#include "dom/dom_manager.h" +#include "dom/dom_node.h" + +namespace hippy { +inline namespace driver { +inline namespace module { + +class LayoutModule : public ModuleBase { + public: + using CallbackInfo = hippy::napi::CallbackInfo; + using CtxValue = hippy::napi::CtxValue; + using DomNode = hippy::dom::DomNode; + + LayoutModule() = default; + + void ResetLayoutCache(CallbackInfo& info, void* data); + + virtual std::shared_ptr BindFunction(std::shared_ptr scope, std::shared_ptr rest_args[]) override; +}; + +} +} +} diff --git a/driver/js/lib/global/UIManagerModule.js b/driver/js/lib/global/UIManagerModule.js index 3e1a0ff24ca..e687d287945 100644 --- a/driver/js/lib/global/UIManagerModule.js +++ b/driver/js/lib/global/UIManagerModule.js @@ -22,6 +22,7 @@ /* eslint-disable no-underscore-dangle */ const UIManagerModule = internalBinding('UIManagerModule'); +const LayoutModule = internalBinding('LayoutModule'); Hippy.document = { createNode() { @@ -42,6 +43,9 @@ Hippy.document = { callUIFunction(id, name, param, cb) { UIManagerModule.CallUIFunction(id, name, param, cb); }, + ResetLayoutCache() { + LayoutModule.ResetLayoutCache(); + }, sendRenderError(error) { if (error) { throw error; diff --git a/driver/js/src/modules/ui_layout_module.cc b/driver/js/src/modules/ui_layout_module.cc new file mode 100644 index 00000000000..3b44c04e62a --- /dev/null +++ b/driver/js/src/modules/ui_layout_module.cc @@ -0,0 +1,81 @@ +/* + * + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "driver/modules/ui_layout_module.h" + +#include +#include + +#include "driver/modules/module_register.h" +#include "driver/base/js_convert_utils.h" +#include "dom/dom_argument.h" +#include "dom/dom_event.h" +#include "dom/dom_node.h" +#include "dom/node_props.h" +#include "footstone/task.h" + +using HippyValue = footstone::value::HippyValue; +using DomArgument = hippy::dom::DomArgument; +using string_view = footstone::stringview::string_view; +using TaskRunner = footstone::runner::TaskRunner; + +using Ctx = hippy::napi::Ctx; +using CtxValue = hippy::napi::CtxValue; +using CallbackInfo = hippy::napi::CallbackInfo; + +namespace hippy { +inline namespace driver { +inline namespace module { + +GEN_INVOKE_CB(LayoutModule, ResetLayoutCache) + +void LayoutModule::ResetLayoutCache(CallbackInfo& info, void* data) { + auto scope_wrapper = reinterpret_cast(std::any_cast(info.GetSlot())); + auto scope = scope_wrapper->scope.lock(); + FOOTSTONE_CHECK(scope); + if (!scope) { + return; + } + auto root_node = scope->GetRootNode().lock(); + if (root_node != nullptr) { + root_node->ResetLayoutCache(); + } +} + +std::shared_ptr LayoutModule::BindFunction(std::shared_ptr scope, + std::shared_ptr rest_args[]) { + auto context = scope->GetContext(); + auto object = context->CreateObject(); + + auto key = context->CreateString("ResetLayoutCache"); + auto wrapper = std::make_unique(InvokeLayoutModuleResetLayoutCache, nullptr); + auto value = context->CreateFunction(wrapper); + scope->SaveFunctionWrapper(std::move(wrapper)); + context->SetProperty(object, key, value); + + return object; +} + +} +} +} + diff --git a/driver/js/src/scope.cc b/driver/js/src/scope.cc index e0520bf8e90..88365bf292f 100644 --- a/driver/js/src/scope.cc +++ b/driver/js/src/scope.cc @@ -47,6 +47,7 @@ #include "driver/modules/scene_builder_module.h" #include "driver/modules/timer_module.h" #include "driver/modules/ui_manager_module.h" +#include "driver/modules/ui_layout_module.h" #include "driver/vm/native_source_code.h" #include "footstone/logging.h" #include "footstone/string_view_utils.h" @@ -204,6 +205,7 @@ void Scope::BindModule() { #ifdef JS_V8 module_object_map_["MemoryModule"] = std::make_shared(); #endif + module_object_map_["LayoutModule"] = std::make_shared(); } void Scope::Bootstrap() { diff --git a/driver/js/src/vm/jsc/native_source_code_ios.cc b/driver/js/src/vm/jsc/native_source_code_ios.cc index d0280b5c13a..0eb6bcfadb4 100644 --- a/driver/js/src/vm/jsc/native_source_code_ios.cc +++ b/driver/js/src/vm/jsc/native_source_code_ios.cc @@ -2,7 +2,7 @@ * Tencent is pleased to support the open source community by making * Hippy available. * - * Copyright (C) 2017-2023 THL A29 Limited, a Tencent company. + * Copyright (C) 2017-2024 THL A29 Limited, a Tencent company. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,7 +31,7 @@ namespace { const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,102,117,110,99,116,105,111,110,32,95,116,121,112,101,111,102,40,111,98,106,41,32,123,32,34,64,98,97,98,101,108,47,104,101,108,112,101,114,115,32,45,32,116,121,112,101,111,102,34,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,32,61,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,34,115,121,109,98,111,108,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,46,105,116,101,114,97,116,111,114,32,63,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,116,121,112,101,111,102,32,111,98,106,59,32,125,32,58,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,111,98,106,32,38,38,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,111,98,106,46,99,111,110,115,116,114,117,99,116,111,114,32,61,61,61,32,83,121,109,98,111,108,32,38,38,32,111,98,106,32,33,61,61,32,83,121,109,98,111,108,46,112,114,111,116,111,116,121,112,101,32,63,32,34,115,121,109,98,111,108,34,32,58,32,116,121,112,101,111,102,32,111,98,106,59,32,125,44,32,95,116,121,112,101,111,102,40,111,98,106,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,116,97,114,103,101,116,44,32,112,114,111,112,115,41,32,123,32,102,111,114,32,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,112,114,111,112,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,32,118,97,114,32,100,101,115,99,114,105,112,116,111,114,32,61,32,112,114,111,112,115,91,105,93,59,32,100,101,115,99,114,105,112,116,111,114,46,101,110,117,109,101,114,97,98,108,101,32,61,32,100,101,115,99,114,105,112,116,111,114,46,101,110,117,109,101,114,97,98,108,101,32,124,124,32,102,97,108,115,101,59,32,100,101,115,99,114,105,112,116,111,114,46,99,111,110,102,105,103,117,114,97,98,108,101,32,61,32,116,114,117,101,59,32,105,102,32,40,34,118,97,108,117,101,34,32,105,110,32,100,101,115,99,114,105,112,116,111,114,41,32,100,101,115,99,114,105,112,116,111,114,46,119,114,105,116,97,98,108,101,32,61,32,116,114,117,101,59,32,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,116,97,114,103,101,116,44,32,95,116,111,80,114,111,112,101,114,116,121,75,101,121,40,100,101,115,99,114,105,112,116,111,114,46,107,101,121,41,44,32,100,101,115,99,114,105,112,116,111,114,41,59,32,125,32,125,10,102,117,110,99,116,105,111,110,32,95,99,114,101,97,116,101,67,108,97,115,115,40,67,111,110,115,116,114,117,99,116,111,114,44,32,112,114,111,116,111,80,114,111,112,115,44,32,115,116,97,116,105,99,80,114,111,112,115,41,32,123,32,105,102,32,40,112,114,111,116,111,80,114,111,112,115,41,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,67,111,110,115,116,114,117,99,116,111,114,46,112,114,111,116,111,116,121,112,101,44,32,112,114,111,116,111,80,114,111,112,115,41,59,32,105,102,32,40,115,116,97,116,105,99,80,114,111,112,115,41,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,67,111,110,115,116,114,117,99,116,111,114,44,32,115,116,97,116,105,99,80,114,111,112,115,41,59,32,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,67,111,110,115,116,114,117,99,116,111,114,44,32,34,112,114,111,116,111,116,121,112,101,34,44,32,123,32,119,114,105,116,97,98,108,101,58,32,102,97,108,115,101,32,125,41,59,32,114,101,116,117,114,110,32,67,111,110,115,116,114,117,99,116,111,114,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,111,80,114,111,112,101,114,116,121,75,101,121,40,97,114,103,41,32,123,32,118,97,114,32,107,101,121,32,61,32,95,116,111,80,114,105,109,105,116,105,118,101,40,97,114,103,44,32,34,115,116,114,105,110,103,34,41,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,40,107,101,121,41,32,61,61,61,32,34,115,121,109,98,111,108,34,32,63,32,107,101,121,32,58,32,83,116,114,105,110,103,40,107,101,121,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,111,80,114,105,109,105,116,105,118,101,40,105,110,112,117,116,44,32,104,105,110,116,41,32,123,32,105,102,32,40,95,116,121,112,101,111,102,40,105,110,112,117,116,41,32,33,61,61,32,34,111,98,106,101,99,116,34,32,124,124,32,105,110,112,117,116,32,61,61,61,32,110,117,108,108,41,32,114,101,116,117,114,110,32,105,110,112,117,116,59,32,118,97,114,32,112,114,105,109,32,61,32,105,110,112,117,116,91,83,121,109,98,111,108,46,116,111,80,114,105,109,105,116,105,118,101,93,59,32,105,102,32,40,112,114,105,109,32,33,61,61,32,117,110,100,101,102,105,110,101,100,41,32,123,32,118,97,114,32,114,101,115,32,61,32,112,114,105,109,46,99,97,108,108,40,105,110,112,117,116,44,32,104,105,110,116,32,124,124,32,34,100,101,102,97,117,108,116,34,41,59,32,105,102,32,40,95,116,121,112,101,111,102,40,114,101,115,41,32,33,61,61,32,34,111,98,106,101,99,116,34,41,32,114,101,116,117,114,110,32,114,101,115,59,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,34,64,64,116,111,80,114,105,109,105,116,105,118,101,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,112,114,105,109,105,116,105,118,101,32,118,97,108,117,101,46,34,41,59,32,125,32,114,101,116,117,114,110,32,40,104,105,110,116,32,61,61,61,32,34,115,116,114,105,110,103,34,32,63,32,83,116,114,105,110,103,32,58,32,78,117,109,98,101,114,41,40,105,110,112,117,116,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,99,108,97,115,115,67,97,108,108,67,104,101,99,107,40,105,110,115,116,97,110,99,101,44,32,67,111,110,115,116,114,117,99,116,111,114,41,32,123,32,105,102,32,40,33,40,105,110,115,116,97,110,99,101,32,105,110,115,116,97,110,99,101,111,102,32,67,111,110,115,116,114,117,99,116,111,114,41,41,32,123,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,34,67,97,110,110,111,116,32,99,97,108,108,32,97,32,99,108,97,115,115,32,97,115,32,97,32,102,117,110,99,116,105,111,110,34,41,59,32,125,32,125,10,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,10,125,59,10,118,97,114,32,69,114,114,111,114,69,118,101,110,116,32,61,32,95,99,114,101,97,116,101,67,108,97,115,115,40,102,117,110,99,116,105,111,110,32,69,114,114,111,114,69,118,101,110,116,40,109,101,115,115,97,103,101,44,32,102,105,108,101,110,97,109,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,95,99,108,97,115,115,67,97,108,108,67,104,101,99,107,40,116,104,105,115,44,32,69,114,114,111,114,69,118,101,110,116,41,59,10,32,32,116,104,105,115,46,109,101,115,115,97,103,101,32,61,32,109,101,115,115,97,103,101,59,10,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,116,104,105,115,46,108,105,110,101,110,111,32,61,32,108,105,110,101,110,111,59,10,32,32,116,104,105,115,46,99,111,108,110,111,32,61,32,99,111,108,110,111,59,10,32,32,116,104,105,115,46,101,114,114,111,114,32,61,32,101,114,114,111,114,59,10,125,41,59,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,97,114,103,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,32,62,32,49,32,63,32,95,108,101,110,32,45,32,49,32,58,32,48,41,44,32,95,107,101,121,32,61,32,49,59,32,95,107,101,121,32,60,32,95,108,101,110,59,32,95,107,101,121,43,43,41,32,123,10,32,32,32,32,97,114,103,115,91,95,107,101,121,32,45,32,49,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,93,59,10,32,32,125,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,105,115,69,114,114,32,61,32,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,101,114,114,111,114,39,59,10,32,32,118,97,114,32,101,114,114,79,98,106,32,61,32,110,101,119,32,69,114,114,111,114,40,41,59,10,32,32,105,102,32,40,105,115,69,114,114,41,32,123,10,32,32,32,32,118,97,114,32,97,114,114,32,61,32,97,114,103,115,91,48,93,59,10,32,32,32,32,105,102,32,40,33,40,97,114,114,32,105,110,115,116,97,110,99,101,111,102,32,65,114,114,97,121,41,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,101,114,114,111,114,32,101,118,101,110,116,44,32,97,114,103,115,48,32,109,117,115,116,32,98,101,32,97,114,114,97,121,39,41,59,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,97,114,114,46,108,101,110,103,116,104,32,33,61,61,32,53,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,101,114,114,111,114,32,101,118,101,110,116,44,32,97,114,103,115,48,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,53,39,41,59,10,32,32,32,32,125,10,32,32,32,32,101,114,114,79,98,106,46,109,101,115,115,97,103,101,32,61,32,74,83,79,78,46,115,116,114,105,110,103,105,102,121,40,97,114,114,91,52,93,41,59,10,32,32,32,32,105,102,32,40,72,105,112,112,121,46,111,110,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,72,105,112,112,121,46,111,110,101,114,114,111,114,40,97,114,114,91,48,93,44,32,97,114,114,91,49,93,44,32,97,114,114,91,50,93,44,32,97,114,114,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,105,102,32,40,105,115,69,114,114,41,32,123,10,32,32,32,32,32,32,118,97,114,32,95,97,114,114,32,61,32,97,114,103,115,91,48,93,59,10,32,32,32,32,32,32,118,97,114,32,101,118,101,110,116,32,61,32,110,101,119,32,69,114,114,111,114,69,118,101,110,116,40,95,97,114,114,91,48,93,44,32,95,97,114,114,91,49,93,44,32,95,97,114,114,91,50,93,44,32,95,97,114,114,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,40,101,118,101,110,116,41,59,10,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,46,97,112,112,108,121,40,118,111,105,100,32,48,44,32,97,114,103,115,41,59,10,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,10,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,111,110,59,10,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,111,102,102,59,10,72,105,112,112,121,46,111,110,101,114,114,111,114,32,61,32,117,110,100,101,102,105,110,101,100,59,125,41,59,0 }; // NOLINT const uint8_t k_DynamicLoad[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,100,121,110,97,109,105,99,76,111,97,100,32,61,32,102,117,110,99,116,105,111,110,32,40,112,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,32,123,10,32,32,118,97,114,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,112,97,116,104,32,124,124,32,39,39,59,10,32,32,118,97,114,32,105,115,83,99,104,101,109,97,32,61,32,47,94,40,46,43,58,92,47,92,47,41,124,94,40,92,47,92,47,41,47,46,116,101,115,116,40,112,97,116,104,41,59,10,32,32,105,102,32,40,33,105,115,83,99,104,101,109,97,41,32,123,10,32,32,32,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,103,108,111,98,97,108,46,95,95,72,73,80,80,89,67,85,82,68,73,82,95,95,32,43,32,112,97,116,104,59,10,32,32,125,10,32,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,46,76,111,97,100,85,110,116,114,117,115,116,101,100,67,111,110,116,101,110,116,40,114,101,113,117,101,115,116,80,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,59,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_Platform[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,32,61,32,123,125,59,10,105,102,32,40,116,121,112,101,111,102,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,118,97,114,32,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,123,10,32,32,32,32,99,111,117,110,116,114,121,58,32,39,39,44,10,32,32,32,32,108,97,110,103,117,97,103,101,58,32,39,39,44,10,32,32,32,32,100,105,114,101,99,116,105,111,110,58,32,48,10,32,32,125,59,10,32,32,105,102,32,40,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,32,61,61,61,32,39,105,111,115,39,41,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,68,101,118,105,99,101,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,68,101,118,105,99,101,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,10,125,125,41,59,0 }; // NOLINT - const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,58,32,102,117,110,99,116,105,111,110,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,58,32,102,117,110,99,116,105,111,110,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,58,32,102,117,110,99,116,105,111,110,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,58,32,102,117,110,99,116,105,111,110,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT + const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,118,97,114,32,76,97,121,111,117,116,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,76,97,121,111,117,116,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,58,32,102,117,110,99,116,105,111,110,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,58,32,102,117,110,99,116,105,111,110,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,58,32,102,117,110,99,116,105,111,110,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,58,32,102,117,110,99,116,105,111,110,32,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,40,41,32,123,10,32,32,32,32,76,97,121,111,117,116,77,111,100,117,108,101,46,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,40,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,58,32,102,117,110,99,116,105,111,110,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_js2native[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,110,101,101,100,82,101,106,101,99,116,32,61,32,102,117,110,99,116,105,111,110,32,110,101,101,100,82,101,106,101,99,116,40,109,111,100,117,108,101,78,97,109,101,44,32,109,101,116,104,111,100,78,97,109,101,41,32,123,10,32,32,114,101,116,117,114,110,32,33,40,109,111,100,117,108,101,78,97,109,101,32,61,61,61,32,39,83,116,111,114,97,103,101,77,111,100,117,108,101,39,32,124,124,32,109,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,117,108,116,105,71,101,116,39,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,32,61,32,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,99,97,108,108,65,114,103,117,109,101,110,116,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,41,44,32,95,107,101,121,32,61,32,48,59,32,95,107,101,121,32,60,32,95,108,101,110,59,32,95,107,101,121,43,43,41,32,123,10,32,32,32,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,95,107,101,121,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,93,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,50,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,32,97,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,50,39,41,59,10,32,32,125,10,32,32,118,97,114,32,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,48,93,44,10,32,32,32,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,49,93,59,10,32,32,105,102,32,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,32,61,61,61,32,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,32,38,38,32,40,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,101,97,115,117,114,101,39,32,124,124,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,101,97,115,117,114,101,73,110,87,105,110,100,111,119,39,32,124,124,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,101,97,115,117,114,101,73,110,65,112,112,87,105,110,100,111,119,39,41,41,32,123,10,32,32,32,32,118,97,114,32,110,111,100,101,73,100,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,50,93,59,10,32,32,32,32,118,97,114,32,99,97,108,108,98,97,99,107,70,117,110,99,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,51,93,59,10,32,32,32,32,114,101,116,117,114,110,32,103,108,111,98,97,108,46,72,105,112,112,121,46,100,111,99,117,109,101,110,116,46,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,110,111,100,101,73,100,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,91,93,44,32,99,97,108,108,98,97,99,107,70,117,110,99,41,59,10,32,32,125,10,32,32,118,97,114,32,78,97,116,105,118,101,77,111,100,117,108,101,32,61,32,95,95,71,76,79,66,65,76,95,95,46,78,97,116,105,118,101,77,111,100,117,108,101,115,91,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,93,59,10,32,32,118,97,114,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,32,61,32,78,97,116,105,118,101,77,111,100,117,108,101,91,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,93,59,10,32,32,105,102,32,40,78,97,116,105,118,101,77,111,100,117,108,101,32,38,38,32,116,121,112,101,111,102,32,78,97,116,105,118,101,77,111,100,117,108,101,91,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,93,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,118,97,114,32,112,97,114,97,109,76,105,115,116,32,61,32,91,93,59,10,32,32,32,32,102,111,114,32,40,118,97,114,32,105,32,61,32,50,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,41,59,10,32,32,32,32,125,10,32,32,32,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,46,97,112,112,108,121,40,78,97,116,105,118,101,77,111,100,117,108,101,44,32,112,97,114,97,109,76,105,115,116,46,108,101,110,103,116,104,32,63,32,112,97,114,97,109,76,105,115,116,32,58,32,117,110,100,101,102,105,110,101,100,41,59,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,34,99,97,108,108,78,97,116,105,118,101,32,78,97,116,105,118,101,32,34,46,99,111,110,99,97,116,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,34,46,34,41,46,99,111,110,99,97,116,40,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,34,40,41,32,110,111,116,32,102,111,117,110,100,34,41,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,87,105,116,104,80,114,111,109,105,115,101,32,61,32,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,50,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,99,97,108,108,65,114,103,117,109,101,110,116,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,50,41,44,32,95,107,101,121,50,32,61,32,48,59,32,95,107,101,121,50,32,60,32,95,108,101,110,50,59,32,95,107,101,121,50,43,43,41,32,123,10,32,32,32,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,95,107,101,121,50,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,50,93,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,50,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,106,101,99,116,40,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,87,105,116,104,80,114,111,109,105,115,101,32,97,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,50,39,41,41,59,10,32,32,125,10,32,32,118,97,114,32,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,48,93,44,10,32,32,32,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,49,93,59,10,32,32,118,97,114,32,78,97,116,105,118,101,77,111,100,117,108,101,32,61,32,95,95,71,76,79,66,65,76,95,95,46,78,97,116,105,118,101,77,111,100,117,108,101,115,91,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,93,59,10,32,32,105,102,32,40,78,97,116,105,118,101,77,111,100,117,108,101,32,38,38,32,78,97,116,105,118,101,77,111,100,117,108,101,91,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,93,41,32,123,10,32,32,32,32,118,97,114,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,32,61,32,78,97,116,105,118,101,77,111,100,117,108,101,91,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,93,59,10,32,32,32,32,118,97,114,32,112,97,114,97,109,76,105,115,116,32,61,32,91,93,59,10,32,32,32,32,102,111,114,32,40,118,97,114,32,105,32,61,32,50,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,41,59,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,46,116,121,112,101,32,61,61,61,32,39,112,114,111,109,105,115,101,39,41,32,123,10,32,32,32,32,32,32,114,101,116,117,114,110,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,46,97,112,112,108,121,40,78,97,116,105,118,101,77,111,100,117,108,101,44,32,112,97,114,97,109,76,105,115,116,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,102,117,110,99,116,105,111,110,32,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,123,10,32,32,32,32,32,32,105,102,32,40,110,101,101,100,82,101,106,101,99,116,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,41,41,32,123,10,32,32,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,114,101,106,101,99,116,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,114,101,115,111,108,118,101,41,59,10,32,32,32,32,32,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,46,97,112,112,108,121,40,78,97,116,105,118,101,77,111,100,117,108,101,44,32,112,97,114,97,109,76,105,115,116,41,59,10,32,32,32,32,125,41,59,10,32,32,125,10,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,106,101,99,116,40,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,34,99,97,108,108,78,97,116,105,118,101,87,105,116,104,80,114,111,109,105,115,101,32,78,97,116,105,118,101,32,34,46,99,111,110,99,97,116,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,34,46,34,41,46,99,111,110,99,97,116,40,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,34,40,41,32,110,111,116,32,102,111,117,110,100,34,41,41,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,61,32,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,51,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,99,97,108,108,65,114,103,117,109,101,110,116,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,51,41,44,32,95,107,101,121,51,32,61,32,48,59,32,95,107,101,121,51,32,60,32,95,108,101,110,51,59,32,95,107,101,121,51,43,43,41,32,123,10,32,32,32,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,95,107,101,121,51,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,51,93,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,51,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,97,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,51,39,41,59,10,32,32,125,10,32,32,118,97,114,32,109,111,100,117,108,101,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,48,93,44,10,32,32,32,32,109,101,116,104,111,100,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,49,93,44,10,32,32,32,32,97,117,116,111,68,101,108,101,116,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,50,93,59,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,61,61,61,32,51,41,32,123,10,32,32,32,32,118,97,114,32,78,97,116,105,118,101,77,111,100,117,108,101,32,61,32,95,95,71,76,79,66,65,76,95,95,46,78,97,116,105,118,101,77,111,100,117,108,101,115,91,109,111,100,117,108,101,78,97,109,101,93,59,10,32,32,32,32,105,102,32,40,78,97,116,105,118,101,77,111,100,117,108,101,32,38,38,32,78,97,116,105,118,101,77,111,100,117,108,101,91,109,101,116,104,111,100,78,97,109,101,93,41,32,123,10,32,32,32,32,32,32,105,102,32,40,97,117,116,111,68,101,108,101,116,101,32,61,61,61,32,102,97,108,115,101,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,78,97,116,105,118,101,77,111,100,117,108,101,91,109,101,116,104,111,100,78,97,109,101,93,40,123,10,32,32,32,32,32,32,32,32,32,32,110,111,116,68,101,108,101,116,101,58,32,116,114,117,101,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,114,101,116,117,114,110,32,78,97,116,105,118,101,77,111,100,117,108,101,91,109,101,116,104,111,100,78,97,109,101,93,40,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,118,97,114,32,95,78,97,116,105,118,101,77,111,100,117,108,101,32,61,32,95,95,71,76,79,66,65,76,95,95,46,78,97,116,105,118,101,77,111,100,117,108,101,115,91,109,111,100,117,108,101,78,97,109,101,93,59,10,32,32,32,32,105,102,32,40,95,78,97,116,105,118,101,77,111,100,117,108,101,32,38,38,32,95,78,97,116,105,118,101,77,111,100,117,108,101,91,109,101,116,104,111,100,78,97,109,101,93,41,32,123,10,32,32,32,32,32,32,118,97,114,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,32,61,32,95,78,97,116,105,118,101,77,111,100,117,108,101,91,109,101,116,104,111,100,78,97,109,101,93,59,10,32,32,32,32,32,32,118,97,114,32,112,97,114,97,109,32,61,32,91,93,59,10,32,32,32,32,32,32,102,111,114,32,40,118,97,114,32,105,32,61,32,51,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,32,32,32,32,112,97,114,97,109,46,112,117,115,104,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,118,97,114,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,32,32,32,32,118,97,114,32,110,97,116,105,118,101,80,97,114,97,109,32,61,32,91,93,59,10,32,32,32,32,32,32,105,102,32,40,97,117,116,111,68,101,108,101,116,101,32,61,61,61,32,102,97,108,115,101,41,32,123,10,32,32,32,32,32,32,32,32,110,97,116,105,118,101,80,97,114,97,109,46,112,117,115,104,40,123,10,32,32,32,32,32,32,32,32,32,32,110,111,116,68,101,108,101,116,101,58,32,116,114,117,101,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,110,97,116,105,118,101,80,97,114,97,109,46,112,117,115,104,40,99,117,114,114,101,110,116,67,97,108,108,73,100,41,59,10,32,32,32,32,32,32,110,97,116,105,118,101,80,97,114,97,109,32,61,32,110,97,116,105,118,101,80,97,114,97,109,46,99,111,110,99,97,116,40,112,97,114,97,109,41,59,10,32,32,32,32,32,32,99,97,108,108,77,111,100,117,108,101,77,101,116,104,111,100,46,97,112,112,108,121,40,95,78,97,116,105,118,101,77,111,100,117,108,101,44,32,110,97,116,105,118,101,80,97,114,97,109,41,59,10,32,32,32,32,32,32,114,101,116,117,114,110,32,99,117,114,114,101,110,116,67,97,108,108,73,100,59,10,32,32,32,32,125,10,32,32,125,10,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,34,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,78,97,116,105,118,101,32,34,46,99,111,110,99,97,116,40,109,111,100,117,108,101,78,97,109,101,44,32,34,46,34,41,46,99,111,110,99,97,116,40,109,101,116,104,111,100,78,97,109,101,44,32,34,40,41,32,110,111,116,32,102,111,117,110,100,34,41,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,114,101,109,111,118,101,78,97,116,105,118,101,67,97,108,108,98,97,99,107,32,61,32,102,117,110,99,116,105,111,110,32,40,41,32,123,125,59,125,41,59,0 }; // NOLINT const uint8_t k_TimerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,116,105,109,101,114,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,84,105,109,101,114,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,115,101,116,84,105,109,101,111,117,116,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,115,108,101,101,112,84,105,109,101,41,32,123,10,32,32,118,97,114,32,97,114,103,115,32,61,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,97,114,103,117,109,101,110,116,115,44,32,50,41,59,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,83,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,99,98,46,97,112,112,108,121,40,110,117,108,108,44,32,97,114,103,115,41,59,10,32,32,125,44,32,115,108,101,101,112,84,105,109,101,41,59,10,125,59,10,103,108,111,98,97,108,46,99,108,101,97,114,84,105,109,101,111,117,116,32,61,32,102,117,110,99,116,105,111,110,32,40,116,105,109,101,114,73,100,41,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,108,101,97,114,84,105,109,101,111,117,116,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,10,103,108,111,98,97,108,46,115,101,116,73,110,116,101,114,118,97,108,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,105,110,116,101,114,118,97,108,84,105,109,101,41,32,123,10,32,32,118,97,114,32,97,114,103,115,32,61,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,97,114,103,117,109,101,110,116,115,44,32,50,41,59,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,83,101,116,73,110,116,101,114,118,97,108,40,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,99,98,46,97,112,112,108,121,40,110,117,108,108,44,32,97,114,103,115,41,59,10,32,32,125,44,32,105,110,116,101,114,118,97,108,84,105,109,101,41,59,10,125,59,10,103,108,111,98,97,108,46,99,108,101,97,114,73,110,116,101,114,118,97,108,32,61,32,102,117,110,99,116,105,111,110,32,40,116,105,109,101,114,73,100,41,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,108,101,97,114,73,110,116,101,114,118,97,108,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,10,103,108,111,98,97,108,46,114,101,113,117,101,115,116,73,100,108,101,67,97,108,108,98,97,99,107,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,111,112,116,41,32,123,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,82,101,113,117,101,115,116,73,100,108,101,67,97,108,108,98,97,99,107,40,102,117,110,99,116,105,111,110,32,40,112,97,114,97,109,41,32,123,10,32,32,32,32,118,97,114,32,110,111,119,32,61,32,68,97,116,101,46,110,111,119,40,41,59,10,32,32,32,32,118,97,114,32,95,116,105,109,101,82,101,109,97,105,110,105,110,103,32,61,32,112,97,114,97,109,46,116,105,109,101,82,101,109,97,105,110,105,110,103,59,10,32,32,32,32,99,98,40,123,10,32,32,32,32,32,32,100,105,100,84,105,109,101,111,117,116,58,32,112,97,114,97,109,46,100,105,100,84,105,109,101,111,117,116,44,10,32,32,32,32,32,32,116,105,109,101,82,101,109,97,105,110,105,110,103,58,32,102,117,110,99,116,105,111,110,32,116,105,109,101,82,101,109,97,105,110,105,110,103,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,116,105,109,101,32,61,32,95,116,105,109,101,82,101,109,97,105,110,105,110,103,32,45,32,40,68,97,116,101,46,110,111,119,40,41,32,45,32,110,111,119,41,59,10,32,32,32,32,32,32,32,32,116,105,109,101,32,61,32,116,105,109,101,32,60,32,48,32,63,32,48,32,58,32,116,105,109,101,59,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,105,109,101,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,41,59,10,32,32,125,44,32,111,112,116,41,59,10,125,59,10,103,108,111,98,97,108,46,99,97,110,99,101,108,73,100,108,101,67,97,108,108,98,97,99,107,32,61,32,102,117,110,99,116,105,111,110,32,40,116,105,109,101,114,73,100,41,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,97,110,99,101,108,73,100,108,101,67,97,108,108,98,97,99,107,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_promise[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,102,117,110,99,116,105,111,110,32,95,116,121,112,101,111,102,40,111,98,106,41,32,123,32,34,64,98,97,98,101,108,47,104,101,108,112,101,114,115,32,45,32,116,121,112,101,111,102,34,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,32,61,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,34,115,121,109,98,111,108,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,46,105,116,101,114,97,116,111,114,32,63,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,116,121,112,101,111,102,32,111,98,106,59,32,125,32,58,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,111,98,106,32,38,38,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,111,98,106,46,99,111,110,115,116,114,117,99,116,111,114,32,61,61,61,32,83,121,109,98,111,108,32,38,38,32,111,98,106,32,33,61,61,32,83,121,109,98,111,108,46,112,114,111,116,111,116,121,112,101,32,63,32,34,115,121,109,98,111,108,34,32,58,32,116,121,112,101,111,102,32,111,98,106,59,32,125,44,32,95,116,121,112,101,111,102,40,111,98,106,41,59,32,125,10,102,117,110,99,116,105,111,110,32,110,111,111,112,40,41,32,123,125,10,118,97,114,32,76,65,83,84,95,69,82,82,79,82,32,61,32,110,117,108,108,59,10,118,97,114,32,73,83,95,69,82,82,79,82,32,61,32,123,125,59,10,102,117,110,99,116,105,111,110,32,103,101,116,84,104,101,110,40,111,98,106,41,32,123,10,32,32,116,114,121,32,123,10,32,32,32,32,114,101,116,117,114,110,32,111,98,106,46,116,104,101,110,59,10,32,32,125,32,99,97,116,99,104,32,40,101,120,41,32,123,10,32,32,32,32,76,65,83,84,95,69,82,82,79,82,32,61,32,101,120,59,10,32,32,32,32,114,101,116,117,114,110,32,73,83,95,69,82,82,79,82,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,116,114,121,67,97,108,108,79,110,101,40,102,110,44,32,97,41,32,123,10,32,32,116,114,121,32,123,10,32,32,32,32,114,101,116,117,114,110,32,102,110,40,97,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,120,41,32,123,10,32,32,32,32,76,65,83,84,95,69,82,82,79,82,32,61,32,101,120,59,10,32,32,32,32,114,101,116,117,114,110,32,73,83,95,69,82,82,79,82,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,116,114,121,67,97,108,108,84,119,111,40,102,110,44,32,97,44,32,98,41,32,123,10,32,32,116,114,121,32,123,10,32,32,32,32,102,110,40,97,44,32,98,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,120,41,32,123,10,32,32,32,32,76,65,83,84,95,69,82,82,79,82,32,61,32,101,120,59,10,32,32,32,32,114,101,116,117,114,110,32,73,83,95,69,82,82,79,82,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,80,114,111,109,105,115,101,40,102,110,41,32,123,10,32,32,105,102,32,40,95,116,121,112,101,111,102,40,116,104,105,115,41,32,33,61,61,32,39,111,98,106,101,99,116,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,80,114,111,109,105,115,101,115,32,109,117,115,116,32,98,101,32,99,111,110,115,116,114,117,99,116,101,100,32,118,105,97,32,110,101,119,39,41,59,10,32,32,125,10,32,32,105,102,32,40,116,121,112,101,111,102,32,102,110,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,80,114,111,109,105,115,101,32,99,111,110,115,116,114,117,99,116,111,114,92,39,115,32,97,114,103,117,109,101,110,116,32,105,115,32,110,111,116,32,97,32,102,117,110,99,116,105,111,110,39,41,59,10,32,32,125,10,32,32,116,104,105,115,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,32,48,59,10,32,32,116,104,105,115,46,95,115,116,97,116,101,32,61,32,48,59,10,32,32,116,104,105,115,46,95,118,97,108,117,101,32,61,32,110,117,108,108,59,10,32,32,116,104,105,115,46,95,100,101,102,101,114,114,101,100,115,32,61,32,110,117,108,108,59,10,32,32,105,102,32,40,102,110,32,61,61,61,32,110,111,111,112,41,32,114,101,116,117,114,110,59,10,32,32,100,111,82,101,115,111,108,118,101,40,102,110,44,32,116,104,105,115,41,59,10,125,10,80,114,111,109,105,115,101,46,95,111,110,72,97,110,100,108,101,32,61,32,110,117,108,108,59,10,80,114,111,109,105,115,101,46,95,111,110,82,101,106,101,99,116,32,61,32,110,117,108,108,59,10,80,114,111,109,105,115,101,46,95,110,111,111,112,32,61,32,110,111,111,112,59,10,80,114,111,109,105,115,101,46,112,114,111,116,111,116,121,112,101,46,116,104,101,110,32,61,32,102,117,110,99,116,105,111,110,32,40,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,41,32,123,10,32,32,105,102,32,40,116,104,105,115,46,99,111,110,115,116,114,117,99,116,111,114,32,33,61,61,32,80,114,111,109,105,115,101,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,115,97,102,101,84,104,101,110,40,116,104,105,115,44,32,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,41,59,10,32,32,125,10,32,32,118,97,114,32,114,101,115,32,61,32,110,101,119,32,80,114,111,109,105,115,101,40,110,111,111,112,41,59,10,32,32,104,97,110,100,108,101,40,116,104,105,115,44,32,110,101,119,32,72,97,110,100,108,101,114,40,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,44,32,114,101,115,41,41,59,10,32,32,114,101,116,117,114,110,32,114,101,115,59,10,125,59,10,102,117,110,99,116,105,111,110,32,115,97,102,101,84,104,101,110,40,115,101,108,102,44,32,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,41,32,123,10,32,32,114,101,116,117,114,110,32,110,101,119,32,115,101,108,102,46,99,111,110,115,116,114,117,99,116,111,114,40,102,117,110,99,116,105,111,110,32,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,123,10,32,32,32,32,118,97,114,32,114,101,115,32,61,32,110,101,119,32,80,114,111,109,105,115,101,40,110,111,111,112,41,59,10,32,32,32,32,114,101,115,46,116,104,101,110,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,59,10,32,32,32,32,104,97,110,100,108,101,40,115,101,108,102,44,32,110,101,119,32,72,97,110,100,108,101,114,40,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,44,32,114,101,115,41,41,59,10,32,32,125,41,59,10,125,10,102,117,110,99,116,105,111,110,32,104,97,110,100,108,101,40,115,101,108,102,44,32,100,101,102,101,114,114,101,100,41,32,123,10,32,32,119,104,105,108,101,32,40,115,101,108,102,46,95,115,116,97,116,101,32,61,61,61,32,51,41,32,123,10,32,32,32,32,115,101,108,102,32,61,32,115,101,108,102,46,95,118,97,108,117,101,59,10,32,32,125,10,32,32,105,102,32,40,80,114,111,109,105,115,101,46,95,111,110,72,97,110,100,108,101,41,32,123,10,32,32,32,32,80,114,111,109,105,115,101,46,95,111,110,72,97,110,100,108,101,40,115,101,108,102,41,59,10,32,32,125,10,32,32,105,102,32,40,115,101,108,102,46,95,115,116,97,116,101,32,61,61,61,32,48,41,32,123,10,32,32,32,32,105,102,32,40,115,101,108,102,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,61,61,32,48,41,32,123,10,32,32,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,32,49,59,10,32,32,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,32,61,32,100,101,102,101,114,114,101,100,59,10,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,115,101,108,102,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,61,61,32,49,41,32,123,10,32,32,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,32,50,59,10,32,32,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,32,61,32,91,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,44,32,100,101,102,101,114,114,101,100,93,59,10,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,125,10,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,46,112,117,115,104,40,100,101,102,101,114,114,101,100,41,59,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,104,97,110,100,108,101,82,101,115,111,108,118,101,100,40,115,101,108,102,44,32,100,101,102,101,114,114,101,100,41,59,10,125,10,102,117,110,99,116,105,111,110,32,104,97,110,100,108,101,82,101,115,111,108,118,101,100,40,115,101,108,102,44,32,100,101,102,101,114,114,101,100,41,32,123,10,32,32,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,118,97,114,32,99,98,32,61,32,115,101,108,102,46,95,115,116,97,116,101,32,61,61,61,32,49,32,63,32,100,101,102,101,114,114,101,100,46,111,110,70,117,108,102,105,108,108,101,100,32,58,32,100,101,102,101,114,114,101,100,46,111,110,82,101,106,101,99,116,101,100,59,10,32,32,32,32,105,102,32,40,99,98,32,61,61,61,32,110,117,108,108,41,32,123,10,32,32,32,32,32,32,105,102,32,40,115,101,108,102,46,95,115,116,97,116,101,32,61,61,61,32,49,41,32,123,10,32,32,32,32,32,32,32,32,114,101,115,111,108,118,101,40,100,101,102,101,114,114,101,100,46,112,114,111,109,105,115,101,44,32,115,101,108,102,46,95,118,97,108,117,101,41,59,10,32,32,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,32,32,114,101,106,101,99,116,40,100,101,102,101,114,114,101,100,46,112,114,111,109,105,115,101,44,32,115,101,108,102,46,95,118,97,108,117,101,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,125,10,32,32,32,32,118,97,114,32,114,101,116,32,61,32,116,114,121,67,97,108,108,79,110,101,40,99,98,44,32,115,101,108,102,46,95,118,97,108,117,101,41,59,10,32,32,32,32,105,102,32,40,114,101,116,32,61,61,61,32,73,83,95,69,82,82,79,82,41,32,123,10,32,32,32,32,32,32,114,101,106,101,99,116,40,100,101,102,101,114,114,101,100,46,112,114,111,109,105,115,101,44,32,76,65,83,84,95,69,82,82,79,82,41,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,114,101,115,111,108,118,101,40,100,101,102,101,114,114,101,100,46,112,114,111,109,105,115,101,44,32,114,101,116,41,59,10,32,32,32,32,125,10,32,32,125,44,32,48,41,59,10,125,10,102,117,110,99,116,105,111,110,32,114,101,115,111,108,118,101,40,115,101,108,102,44,32,110,101,119,86,97,108,117,101,41,32,123,10,32,32,105,102,32,40,110,101,119,86,97,108,117,101,32,61,61,61,32,115,101,108,102,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,114,101,106,101,99,116,40,115,101,108,102,44,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,65,32,112,114,111,109,105,115,101,32,99,97,110,110,111,116,32,98,101,32,114,101,115,111,108,118,101,100,32,119,105,116,104,32,105,116,115,101,108,102,46,39,41,41,59,10,32,32,125,10,32,32,105,102,32,40,110,101,119,86,97,108,117,101,32,38,38,32,40,95,116,121,112,101,111,102,40,110,101,119,86,97,108,117,101,41,32,61,61,61,32,39,111,98,106,101,99,116,39,32,124,124,32,116,121,112,101,111,102,32,110,101,119,86,97,108,117,101,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,41,32,123,10,32,32,32,32,118,97,114,32,116,104,101,110,32,61,32,103,101,116,84,104,101,110,40,110,101,119,86,97,108,117,101,41,59,10,32,32,32,32,105,102,32,40,116,104,101,110,32,61,61,61,32,73,83,95,69,82,82,79,82,41,32,123,10,32,32,32,32,32,32,114,101,116,117,114,110,32,114,101,106,101,99,116,40,115,101,108,102,44,32,76,65,83,84,95,69,82,82,79,82,41,59,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,116,104,101,110,32,61,61,61,32,115,101,108,102,46,116,104,101,110,32,38,38,32,110,101,119,86,97,108,117,101,32,105,110,115,116,97,110,99,101,111,102,32,80,114,111,109,105,115,101,41,32,123,10,32,32,32,32,32,32,115,101,108,102,46,95,115,116,97,116,101,32,61,32,51,59,10,32,32,32,32,32,32,115,101,108,102,46,95,118,97,108,117,101,32,61,32,110,101,119,86,97,108,117,101,59,10,32,32,32,32,32,32,102,105,110,97,108,101,40,115,101,108,102,41,59,10,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,125,32,101,108,115,101,32,105,102,32,40,116,121,112,101,111,102,32,116,104,101,110,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,32,32,100,111,82,101,115,111,108,118,101,40,116,104,101,110,46,98,105,110,100,40,110,101,119,86,97,108,117,101,41,44,32,115,101,108,102,41,59,10,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,125,10,32,32,125,10,32,32,115,101,108,102,46,95,115,116,97,116,101,32,61,32,49,59,10,32,32,115,101,108,102,46,95,118,97,108,117,101,32,61,32,110,101,119,86,97,108,117,101,59,10,32,32,102,105,110,97,108,101,40,115,101,108,102,41,59,10,125,10,102,117,110,99,116,105,111,110,32,114,101,106,101,99,116,40,115,101,108,102,44,32,110,101,119,86,97,108,117,101,41,32,123,10,32,32,115,101,108,102,46,95,115,116,97,116,101,32,61,32,50,59,10,32,32,115,101,108,102,46,95,118,97,108,117,101,32,61,32,110,101,119,86,97,108,117,101,59,10,32,32,105,102,32,40,80,114,111,109,105,115,101,46,95,111,110,82,101,106,101,99,116,41,32,123,10,32,32,32,32,80,114,111,109,105,115,101,46,95,111,110,82,101,106,101,99,116,40,115,101,108,102,44,32,110,101,119,86,97,108,117,101,41,59,10,32,32,125,10,32,32,102,105,110,97,108,101,40,115,101,108,102,41,59,10,125,10,102,117,110,99,116,105,111,110,32,102,105,110,97,108,101,40,115,101,108,102,41,32,123,10,32,32,105,102,32,40,115,101,108,102,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,61,61,32,49,41,32,123,10,32,32,32,32,104,97,110,100,108,101,40,115,101,108,102,44,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,41,59,10,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,32,61,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,115,101,108,102,46,95,100,101,102,101,114,114,101,100,83,116,97,116,101,32,61,61,61,32,50,41,32,123,10,32,32,32,32,102,111,114,32,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,10,32,32,32,32,32,32,104,97,110,100,108,101,40,115,101,108,102,44,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,91,105,93,41,59,10,32,32,32,32,125,10,32,32,32,32,115,101,108,102,46,95,100,101,102,101,114,114,101,100,115,32,61,32,110,117,108,108,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,72,97,110,100,108,101,114,40,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,44,32,112,114,111,109,105,115,101,41,32,123,10,32,32,116,104,105,115,46,111,110,70,117,108,102,105,108,108,101,100,32,61,32,116,121,112,101,111,102,32,111,110,70,117,108,102,105,108,108,101,100,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,63,32,111,110,70,117,108,102,105,108,108,101,100,32,58,32,110,117,108,108,59,10,32,32,116,104,105,115,46,111,110,82,101,106,101,99,116,101,100,32,61,32,116,121,112,101,111,102,32,111,110,82,101,106,101,99,116,101,100,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,63,32,111,110,82,101,106,101,99,116,101,100,32,58,32,110,117,108,108,59,10,32,32,116,104,105,115,46,112,114,111,109,105,115,101,32,61,32,112,114,111,109,105,115,101,59,10,125,10,102,117,110,99,116,105,111,110,32,100,111,82,101,115,111,108,118,101,40,102,110,44,32,112,114,111,109,105,115,101,41,32,123,10,32,32,118,97,114,32,100,111,110,101,32,61,32,102,97,108,115,101,59,10,32,32,118,97,114,32,114,101,115,32,61,32,116,114,121,67,97,108,108,84,119,111,40,102,110,44,32,102,117,110,99,116,105,111,110,32,40,118,97,108,117,101,41,32,123,10,32,32,32,32,105,102,32,40,100,111,110,101,41,32,114,101,116,117,114,110,59,10,32,32,32,32,100,111,110,101,32,61,32,116,114,117,101,59,10,32,32,32,32,114,101,115,111,108,118,101,40,112,114,111,109,105,115,101,44,32,118,97,108,117,101,41,59,10,32,32,125,44,32,102,117,110,99,116,105,111,110,32,40,114,101,97,115,111,110,41,32,123,10,32,32,32,32,105,102,32,40,100,111,110,101,41,32,114,101,116,117,114,110,59,10,32,32,32,32,100,111,110,101,32,61,32,116,114,117,101,59,10,32,32,32,32,114,101,106,101,99,116,40,112,114,111,109,105,115,101,44,32,114,101,97,115,111,110,41,59,10,32,32,125,41,59,10,32,32,105,102,32,40,33,100,111,110,101,32,38,38,32,114,101,115,32,61,61,61,32,73,83,95,69,82,82,79,82,41,32,123,10,32,32,32,32,100,111,110,101,32,61,32,116,114,117,101,59,10,32,32,32,32,114,101,106,101,99,116,40,112,114,111,109,105,115,101,44,32,76,65,83,84,95,69,82,82,79,82,41,59,10,32,32,125,10,125,10,80,114,111,109,105,115,101,46,112,114,111,116,111,116,121,112,101,46,100,111,110,101,32,61,32,102,117,110,99,116,105,111,110,32,40,111,110,70,117,108,102,105,108,108,101,100,44,32,111,110,82,101,106,101,99,116,101,100,41,32,123,10,32,32,118,97,114,32,115,101,108,102,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,63,32,116,104,105,115,46,116,104,101,110,46,97,112,112,108,121,40,116,104,105,115,44,32,97,114,103,117,109,101,110,116,115,41,32,58,32,116,104,105,115,59,10,32,32,115,101,108,102,46,116,104,101,110,40,110,117,108,108,44,32,102,117,110,99,116,105,111,110,32,40,101,114,114,41,32,123,10,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,59,10,32,32,32,32,125,44,32,48,41,59,10,32,32,125,41,59,10,125,59,10,80,114,111,109,105,115,101,46,112,114,111,116,111,116,121,112,101,91,39,102,105,110,97,108,108,121,39,93,32,61,32,102,117,110,99,116,105,111,110,32,40,102,41,32,123,10,32,32,114,101,116,117,114,110,32,116,104,105,115,46,116,104,101,110,40,102,117,110,99,116,105,111,110,32,40,118,97,108,117,101,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,115,111,108,118,101,40,102,40,41,41,46,116,104,101,110,40,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,32,32,114,101,116,117,114,110,32,118,97,108,117,101,59,10,32,32,32,32,125,41,59,10,32,32,125,44,32,102,117,110,99,116,105,111,110,32,40,101,114,114,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,115,111,108,118,101,40,102,40,41,41,46,116,104,101,110,40,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,59,10,32,32,32,32,125,41,59,10,32,32,125,41,59,10,125,59,10,118,97,114,32,84,82,85,69,32,61,32,118,97,108,117,101,80,114,111,109,105,115,101,40,116,114,117,101,41,59,10,118,97,114,32,70,65,76,83,69,32,61,32,118,97,108,117,101,80,114,111,109,105,115,101,40,102,97,108,115,101,41,59,10,118,97,114,32,78,85,76,76,32,61,32,118,97,108,117,101,80,114,111,109,105,115,101,40,110,117,108,108,41,59,10,118,97,114,32,85,78,68,69,70,73,78,69,68,32,61,32,118,97,108,117,101,80,114,111,109,105,115,101,40,117,110,100,101,102,105,110,101,100,41,59,10,118,97,114,32,90,69,82,79,32,61,32,118,97,108,117,101,80,114,111,109,105,115,101,40,48,41,59,10,118,97,114,32,69,77,80,84,89,83,84,82,73,78,71,32,61,32,118,97,108,117,101,80,114,111,109,105,115,101,40,39,39,41,59,10,102,117,110,99,116,105,111,110,32,118,97,108,117,101,80,114,111,109,105,115,101,40,118,97,108,117,101,41,32,123,10,32,32,118,97,114,32,112,32,61,32,110,101,119,32,80,114,111,109,105,115,101,40,80,114,111,109,105,115,101,46,95,110,111,111,112,41,59,10,32,32,112,46,95,115,116,97,116,101,32,61,32,49,59,10,32,32,112,46,95,118,97,108,117,101,32,61,32,118,97,108,117,101,59,10,32,32,114,101,116,117,114,110,32,112,59,10,125,10,80,114,111,109,105,115,101,46,114,101,115,111,108,118,101,32,61,32,102,117,110,99,116,105,111,110,32,40,118,97,108,117,101,41,32,123,10,32,32,105,102,32,40,118,97,108,117,101,32,105,110,115,116,97,110,99,101,111,102,32,80,114,111,109,105,115,101,41,32,114,101,116,117,114,110,32,118,97,108,117,101,59,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,110,117,108,108,41,32,114,101,116,117,114,110,32,78,85,76,76,59,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,117,110,100,101,102,105,110,101,100,41,32,114,101,116,117,114,110,32,85,78,68,69,70,73,78,69,68,59,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,116,114,117,101,41,32,114,101,116,117,114,110,32,84,82,85,69,59,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,102,97,108,115,101,41,32,114,101,116,117,114,110,32,70,65,76,83,69,59,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,48,41,32,114,101,116,117,114,110,32,90,69,82,79,59,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,39,39,41,32,114,101,116,117,114,110,32,69,77,80,84,89,83,84,82,73,78,71,59,10,32,32,105,102,32,40,95,116,121,112,101,111,102,40,118,97,108,117,101,41,32,61,61,61,32,39,111,98,106,101,99,116,39,32,124,124,32,116,121,112,101,111,102,32,118,97,108,117,101,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,118,97,114,32,116,104,101,110,32,61,32,118,97,108,117,101,46,116,104,101,110,59,10,32,32,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,116,104,101,110,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,116,104,101,110,46,98,105,110,100,40,118,97,108,117,101,41,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,120,41,32,123,10,32,32,32,32,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,102,117,110,99,116,105,111,110,32,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,123,10,32,32,32,32,32,32,32,32,114,101,106,101,99,116,40,101,120,41,59,10,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,114,101,116,117,114,110,32,118,97,108,117,101,80,114,111,109,105,115,101,40,118,97,108,117,101,41,59,10,125,59,10,118,97,114,32,95,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,32,61,32,102,117,110,99,116,105,111,110,32,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,40,105,116,101,114,97,98,108,101,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,65,114,114,97,121,46,102,114,111,109,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,95,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,32,61,32,65,114,114,97,121,46,102,114,111,109,59,10,32,32,32,32,114,101,116,117,114,110,32,65,114,114,97,121,46,102,114,111,109,40,105,116,101,114,97,98,108,101,41,59,10,32,32,125,10,32,32,95,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,32,61,32,102,117,110,99,116,105,111,110,32,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,40,120,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,120,41,59,10,32,32,125,59,10,32,32,114,101,116,117,114,110,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,105,116,101,114,97,98,108,101,41,59,10,125,59,10,80,114,111,109,105,115,101,46,97,108,108,32,61,32,102,117,110,99,116,105,111,110,32,40,97,114,114,41,32,123,10,32,32,118,97,114,32,97,114,103,115,32,61,32,95,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,40,97,114,114,41,59,10,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,102,117,110,99,116,105,111,110,32,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,46,108,101,110,103,116,104,32,61,61,61,32,48,41,32,114,101,116,117,114,110,32,114,101,115,111,108,118,101,40,91,93,41,59,10,32,32,32,32,118,97,114,32,114,101,109,97,105,110,105,110,103,32,61,32,97,114,103,115,46,108,101,110,103,116,104,59,10,32,32,32,32,102,117,110,99,116,105,111,110,32,114,101,115,40,105,44,32,118,97,108,41,32,123,10,32,32,32,32,32,32,105,102,32,40,118,97,108,32,38,38,32,40,95,116,121,112,101,111,102,40,118,97,108,41,32,61,61,61,32,39,111,98,106,101,99,116,39,32,124,124,32,116,121,112,101,111,102,32,118,97,108,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,41,32,123,10,32,32,32,32,32,32,32,32,105,102,32,40,118,97,108,32,105,110,115,116,97,110,99,101,111,102,32,80,114,111,109,105,115,101,32,38,38,32,118,97,108,46,116,104,101,110,32,61,61,61,32,80,114,111,109,105,115,101,46,112,114,111,116,111,116,121,112,101,46,116,104,101,110,41,32,123,10,32,32,32,32,32,32,32,32,32,32,119,104,105,108,101,32,40,118,97,108,46,95,115,116,97,116,101,32,61,61,61,32,51,41,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,118,97,108,32,61,32,118,97,108,46,95,118,97,108,117,101,59,10,32,32,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,32,32,105,102,32,40,118,97,108,46,95,115,116,97,116,101,32,61,61,61,32,49,41,32,114,101,116,117,114,110,32,114,101,115,40,105,44,32,118,97,108,46,95,118,97,108,117,101,41,59,10,32,32,32,32,32,32,32,32,32,32,105,102,32,40,118,97,108,46,95,115,116,97,116,101,32,61,61,61,32,50,41,32,114,101,106,101,99,116,40,118,97,108,46,95,118,97,108,117,101,41,59,10,32,32,32,32,32,32,32,32,32,32,118,97,108,46,116,104,101,110,40,102,117,110,99,116,105,111,110,32,40,118,97,108,41,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,115,40,105,44,32,118,97,108,41,59,10,32,32,32,32,32,32,32,32,32,32,125,44,32,114,101,106,101,99,116,41,59,10,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,32,32,32,32,118,97,114,32,116,104,101,110,32,61,32,118,97,108,46,116,104,101,110,59,10,32,32,32,32,32,32,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,116,104,101,110,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,118,97,114,32,112,32,61,32,110,101,119,32,80,114,111,109,105,115,101,40,116,104,101,110,46,98,105,110,100,40,118,97,108,41,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,112,46,116,104,101,110,40,102,117,110,99,116,105,111,110,32,40,118,97,108,41,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,101,115,40,105,44,32,118,97,108,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,125,44,32,114,101,106,101,99,116,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,59,10,32,32,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,97,114,103,115,91,105,93,32,61,32,118,97,108,59,10,32,32,32,32,32,32,105,102,32,40,45,45,114,101,109,97,105,110,105,110,103,32,61,61,61,32,48,41,32,123,10,32,32,32,32,32,32,32,32,114,101,115,111,108,118,101,40,97,114,103,115,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,10,32,32,32,32,102,111,114,32,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,97,114,103,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,10,32,32,32,32,32,32,114,101,115,40,105,44,32,97,114,103,115,91,105,93,41,59,10,32,32,32,32,125,10,32,32,125,41,59,10,125,59,10,80,114,111,109,105,115,101,46,114,101,106,101,99,116,32,61,32,102,117,110,99,116,105,111,110,32,40,118,97,108,117,101,41,32,123,10,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,102,117,110,99,116,105,111,110,32,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,123,10,32,32,32,32,114,101,106,101,99,116,40,118,97,108,117,101,41,59,10,32,32,125,41,59,10,125,59,10,80,114,111,109,105,115,101,46,114,97,99,101,32,61,32,102,117,110,99,116,105,111,110,32,40,118,97,108,117,101,115,41,32,123,10,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,102,117,110,99,116,105,111,110,32,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,123,10,32,32,32,32,95,105,116,101,114,97,98,108,101,84,111,65,114,114,97,121,40,118,97,108,117,101,115,41,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,118,97,108,117,101,41,32,123,10,32,32,32,32,32,32,80,114,111,109,105,115,101,46,114,101,115,111,108,118,101,40,118,97,108,117,101,41,46,116,104,101,110,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,59,10,32,32,32,32,125,41,59,10,32,32,125,41,59,10,125,59,10,80,114,111,109,105,115,101,46,112,114,111,116,111,116,121,112,101,91,39,99,97,116,99,104,39,93,32,61,32,102,117,110,99,116,105,111,110,32,40,111,110,82,101,106,101,99,116,101,100,41,32,123,10,32,32,114,101,116,117,114,110,32,116,104,105,115,46,116,104,101,110,40,110,117,108,108,44,32,111,110,82,101,106,101,99,116,101,100,41,59,10,125,59,10,103,108,111,98,97,108,46,80,114,111,109,105,115,101,32,61,32,80,114,111,109,105,115,101,59,125,41,59,0 }; // NOLINT diff --git a/driver/js/src/vm/v8/native_source_code_android.cc b/driver/js/src/vm/v8/native_source_code_android.cc index e754cfd1145..6da4344ac4b 100644 --- a/driver/js/src/vm/v8/native_source_code_android.cc +++ b/driver/js/src/vm/v8/native_source_code_android.cc @@ -2,7 +2,7 @@ * Tencent is pleased to support the open source community by making * Hippy available. * - * Copyright (C) 2017-2023 THL A29 Limited, a Tencent company. + * Copyright (C) 2017-2024 THL A29 Limited, a Tencent company. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,7 +31,7 @@ namespace { const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,10,125,59,10,99,108,97,115,115,32,69,114,114,111,114,69,118,101,110,116,32,123,10,32,32,99,111,110,115,116,114,117,99,116,111,114,40,109,101,115,115,97,103,101,44,32,102,105,108,101,110,97,109,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,32,32,116,104,105,115,46,109,101,115,115,97,103,101,32,61,32,109,101,115,115,97,103,101,59,10,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,116,104,105,115,46,108,105,110,101,110,111,32,61,32,108,105,110,101,110,111,59,10,32,32,32,32,116,104,105,115,46,99,111,108,110,111,32,61,32,99,111,108,110,111,59,10,32,32,32,32,116,104,105,115,46,101,114,114,111,114,32,61,32,101,114,114,111,114,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,44,32,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,108,101,116,32,105,115,69,114,114,32,61,32,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,101,114,114,111,114,39,59,10,32,32,108,101,116,32,101,114,114,79,98,106,32,61,32,110,101,119,32,69,114,114,111,114,40,41,59,10,32,32,105,102,32,40,105,115,69,114,114,41,32,123,10,32,32,32,32,108,101,116,32,97,114,114,32,61,32,97,114,103,115,91,48,93,59,10,32,32,32,32,105,102,32,40,33,40,97,114,114,32,105,110,115,116,97,110,99,101,111,102,32,65,114,114,97,121,41,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,101,114,114,111,114,32,101,118,101,110,116,44,32,97,114,103,115,48,32,109,117,115,116,32,98,101,32,97,114,114,97,121,39,41,59,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,97,114,114,46,108,101,110,103,116,104,32,33,61,61,32,53,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,101,114,114,111,114,32,101,118,101,110,116,44,32,97,114,103,115,48,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,53,39,41,59,10,32,32,32,32,125,10,32,32,32,32,101,114,114,79,98,106,46,109,101,115,115,97,103,101,32,61,32,74,83,79,78,46,115,116,114,105,110,103,105,102,121,40,97,114,114,91,52,93,41,59,10,32,32,32,32,105,102,32,40,72,105,112,112,121,46,111,110,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,72,105,112,112,121,46,111,110,101,114,114,111,114,40,97,114,114,91,48,93,44,32,97,114,114,91,49,93,44,32,97,114,114,91,50,93,44,32,97,114,114,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,105,102,32,40,105,115,69,114,114,41,32,123,10,32,32,32,32,32,32,108,101,116,32,97,114,114,32,61,32,97,114,103,115,91,48,93,59,10,32,32,32,32,32,32,108,101,116,32,101,118,101,110,116,32,61,32,110,101,119,32,69,114,114,111,114,69,118,101,110,116,40,97,114,114,91,48,93,44,32,97,114,114,91,49,93,44,32,97,114,114,91,50,93,44,32,97,114,114,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,101,118,101,110,116,41,41,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,46,46,46,97,114,103,115,41,41,59,10,32,32,32,32,125,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,10,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,111,110,59,10,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,111,102,102,59,10,72,105,112,112,121,46,111,110,101,114,114,111,114,32,61,32,117,110,100,101,102,105,110,101,100,59,125,41,59,0 }; // NOLINT const uint8_t k_DynamicLoad[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,100,121,110,97,109,105,99,76,111,97,100,32,61,32,40,112,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,32,61,62,32,123,10,32,32,108,101,116,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,112,97,116,104,32,124,124,32,39,39,59,10,32,32,99,111,110,115,116,32,105,115,83,99,104,101,109,97,32,61,32,47,94,40,46,43,58,92,47,92,47,41,124,94,40,92,47,92,47,41,47,46,116,101,115,116,40,112,97,116,104,41,59,10,32,32,105,102,32,40,33,105,115,83,99,104,101,109,97,41,32,123,10,32,32,32,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,103,108,111,98,97,108,46,95,95,72,73,80,80,89,67,85,82,68,73,82,95,95,32,43,32,112,97,116,104,59,10,32,32,125,10,32,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,46,76,111,97,100,85,110,116,114,117,115,116,101,100,67,111,110,116,101,110,116,40,114,101,113,117,101,115,116,80,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,59,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_Platform[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,32,61,32,123,125,59,10,105,102,32,40,116,121,112,101,111,102,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,99,111,110,115,116,32,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,123,10,32,32,32,32,99,111,117,110,116,114,121,58,32,39,39,44,10,32,32,32,32,108,97,110,103,117,97,103,101,58,32,39,39,44,10,32,32,32,32,100,105,114,101,99,116,105,111,110,58,32,48,10,32,32,125,59,10,32,32,105,102,32,40,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,32,61,61,61,32,39,105,111,115,39,41,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,68,101,118,105,99,101,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,68,101,118,105,99,101,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,10,125,125,41,59,0 }; // NOLINT - const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT + const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,99,111,110,115,116,32,76,97,121,111,117,116,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,76,97,121,111,117,116,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,40,41,32,123,10,32,32,32,32,76,97,121,111,117,116,77,111,100,117,108,101,46,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,40,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_js2native[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,32,61,32,40,46,46,46,99,97,108,108,65,114,103,117,109,101,110,116,115,41,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,103,108,111,98,97,108,46,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,110,111,116,32,100,101,102,105,110,101,100,39,41,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,50,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,32,97,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,50,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,91,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,93,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,59,10,32,32,105,102,32,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,32,61,61,61,32,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,32,38,38,32,40,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,101,97,115,117,114,101,39,32,124,124,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,101,97,115,117,114,101,73,110,87,105,110,100,111,119,39,32,124,124,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,61,61,61,32,39,109,101,97,115,117,114,101,73,110,65,112,112,87,105,110,100,111,119,39,41,41,32,123,10,32,32,32,32,99,111,110,115,116,32,110,111,100,101,73,100,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,50,93,59,10,32,32,32,32,99,111,110,115,116,32,99,97,108,108,98,97,99,107,70,117,110,99,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,51,93,59,10,32,32,32,32,114,101,116,117,114,110,32,103,108,111,98,97,108,46,72,105,112,112,121,46,100,111,99,117,109,101,110,116,46,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,110,111,100,101,73,100,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,91,93,44,32,99,97,108,108,98,97,99,107,70,117,110,99,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,99,111,110,115,116,32,112,97,114,97,109,76,105,115,116,32,61,32,91,93,59,10,32,32,108,101,116,32,104,97,115,67,97,108,108,98,97,99,107,32,61,32,102,97,108,115,101,59,10,32,32,108,101,116,32,109,111,100,117,108,101,67,97,108,108,98,97,99,107,73,100,32,61,32,45,49,59,10,32,32,102,111,114,32,40,108,101,116,32,105,32,61,32,50,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,59,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,97,114,103,115,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,38,38,32,33,104,97,115,67,97,108,108,98,97,99,107,41,32,123,10,32,32,32,32,32,32,104,97,115,67,97,108,108,98,97,99,107,32,61,32,116,114,117,101,59,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,99,98,58,32,97,114,103,115,44,10,32,32,32,32,32,32,32,32,116,121,112,101,58,32,48,10,32,32,32,32,32,32,125,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,97,114,103,115,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,105,102,32,40,104,97,115,67,97,108,108,98,97,99,107,41,32,123,10,32,32,32,32,109,111,100,117,108,101,67,97,108,108,98,97,99,107,73,100,32,61,32,99,117,114,114,101,110,116,67,97,108,108,73,100,59,10,32,32,125,10,32,32,103,108,111,98,97,108,46,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,109,111,100,117,108,101,67,97,108,108,98,97,99,107,73,100,46,116,111,83,116,114,105,110,103,40,41,44,32,112,97,114,97,109,76,105,115,116,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,87,105,116,104,80,114,111,109,105,115,101,32,61,32,40,46,46,46,99,97,108,108,65,114,103,117,109,101,110,116,115,41,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,103,108,111,98,97,108,46,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,106,101,99,116,40,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,110,111,116,32,100,101,102,105,110,101,100,39,41,41,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,50,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,106,101,99,116,40,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,87,105,116,104,80,114,111,109,105,115,101,32,97,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,50,39,41,41,59,10,32,32,125,10,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,40,114,101,115,111,108,118,101,44,32,114,101,106,101,99,116,41,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,91,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,93,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,59,10,32,32,32,32,99,111,110,115,116,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,32,32,99,111,110,115,116,32,112,97,114,97,109,76,105,115,116,32,61,32,91,93,59,10,32,32,32,32,108,101,116,32,104,97,115,67,97,108,108,98,97,99,107,32,61,32,102,97,108,115,101,59,10,32,32,32,32,102,111,114,32,40,108,101,116,32,105,32,61,32,50,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,59,10,32,32,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,97,114,103,115,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,38,38,32,33,104,97,115,67,97,108,108,98,97,99,107,41,32,123,10,32,32,32,32,32,32,32,32,104,97,115,67,97,108,108,98,97,99,107,32,61,32,116,114,117,101,59,10,32,32,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,32,32,114,101,106,101,99,116,44,10,32,32,32,32,32,32,32,32,32,32,99,98,58,32,97,114,103,115,44,10,32,32,32,32,32,32,32,32,32,32,116,121,112,101,58,32,48,10,32,32,32,32,32,32,32,32,125,59,10,32,32,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,97,114,103,115,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,33,104,97,115,67,97,108,108,98,97,99,107,41,32,123,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,114,101,106,101,99,116,44,10,32,32,32,32,32,32,32,32,99,98,58,32,114,101,115,111,108,118,101,44,10,32,32,32,32,32,32,32,32,116,121,112,101,58,32,48,10,32,32,32,32,32,32,125,59,10,32,32,32,32,125,10,32,32,32,32,103,108,111,98,97,108,46,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,99,117,114,114,101,110,116,67,97,108,108,73,100,46,116,111,83,116,114,105,110,103,40,41,44,32,112,97,114,97,109,76,105,115,116,41,59,10,32,32,125,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,61,32,40,46,46,46,99,97,108,108,65,114,103,117,109,101,110,116,115,41,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,103,108,111,98,97,108,46,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,110,111,116,32,100,101,102,105,110,101,100,39,41,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,51,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,97,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,51,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,91,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,97,117,116,111,68,101,108,101,116,101,93,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,59,10,32,32,105,102,32,40,116,121,112,101,111,102,32,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,97,117,116,111,68,101,108,101,116,101,32,33,61,61,32,39,98,111,111,108,101,97,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,105,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,115,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,99,111,110,115,116,32,112,97,114,97,109,76,105,115,116,32,61,32,91,93,59,10,32,32,108,101,116,32,104,97,115,67,97,108,108,98,97,99,107,32,61,32,102,97,108,115,101,59,10,32,32,102,111,114,32,40,108,101,116,32,105,32,61,32,51,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,59,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,97,114,103,115,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,38,38,32,33,104,97,115,67,97,108,108,98,97,99,107,41,32,123,10,32,32,32,32,32,32,104,97,115,67,97,108,108,98,97,99,107,32,61,32,116,114,117,101,59,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,99,98,58,32,97,114,103,115,44,10,32,32,32,32,32,32,32,32,116,121,112,101,58,32,97,117,116,111,68,101,108,101,116,101,32,63,32,49,32,58,32,50,10,32,32,32,32,32,32,125,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,112,97,114,97,109,76,105,115,116,46,112,117,115,104,40,97,114,103,115,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,103,108,111,98,97,108,46,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,40,110,97,116,105,118,101,77,111,100,117,108,101,78,97,109,101,44,32,110,97,116,105,118,101,77,101,116,104,111,100,78,97,109,101,44,32,99,117,114,114,101,110,116,67,97,108,108,73,100,46,116,111,83,116,114,105,110,103,40,41,44,32,112,97,114,97,109,76,105,115,116,41,59,10,32,32,114,101,116,117,114,110,32,99,117,114,114,101,110,116,67,97,108,108,73,100,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,114,101,109,111,118,101,78,97,116,105,118,101,67,97,108,108,98,97,99,107,32,61,32,99,97,108,108,73,100,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,99,97,108,108,73,100,32,33,61,61,32,39,110,117,109,98,101,114,39,32,124,124,32,99,97,108,108,73,100,32,60,32,48,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,114,101,109,111,118,101,78,97,116,105,118,101,67,97,108,108,98,97,99,107,32,105,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,115,39,41,59,10,32,32,125,10,32,32,105,102,32,40,116,121,112,101,111,102,32,95,95,71,76,79,66,65,76,95,95,32,33,61,61,32,39,111,98,106,101,99,116,39,32,124,124,32,116,121,112,101,111,102,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,32,33,61,61,32,39,111,98,106,101,99,116,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,114,101,109,111,118,101,78,97,116,105,118,101,67,97,108,108,98,97,99,107,32,109,111,100,117,108,101,67,97,108,108,76,105,115,116,32,110,111,116,32,100,101,102,105,110,101,100,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,97,108,108,98,97,99,107,79,98,106,101,99,116,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,97,108,108,73,100,93,59,10,32,32,105,102,32,40,99,97,108,108,98,97,99,107,79,98,106,101,99,116,32,38,38,32,40,99,97,108,108,98,97,99,107,79,98,106,101,99,116,46,116,121,112,101,32,61,61,61,32,49,32,124,124,32,99,97,108,108,98,97,99,107,79,98,106,101,99,116,46,116,121,112,101,32,61,61,61,32,50,41,41,32,123,10,32,32,32,32,100,101,108,101,116,101,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,97,108,108,73,100,93,59,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_TimerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,116,105,109,101,114,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,84,105,109,101,114,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,115,101,116,84,105,109,101,111,117,116,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,115,108,101,101,112,84,105,109,101,41,32,123,10,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,97,114,103,117,109,101,110,116,115,44,32,50,41,59,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,83,101,116,84,105,109,101,111,117,116,40,40,41,32,61,62,32,99,98,46,97,112,112,108,121,40,110,117,108,108,44,32,97,114,103,115,41,44,32,115,108,101,101,112,84,105,109,101,41,59,10,125,59,10,103,108,111,98,97,108,46,99,108,101,97,114,84,105,109,101,111,117,116,32,61,32,116,105,109,101,114,73,100,32,61,62,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,108,101,97,114,84,105,109,101,111,117,116,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,10,103,108,111,98,97,108,46,115,101,116,73,110,116,101,114,118,97,108,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,105,110,116,101,114,118,97,108,84,105,109,101,41,32,123,10,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,97,114,103,117,109,101,110,116,115,44,32,50,41,59,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,83,101,116,73,110,116,101,114,118,97,108,40,40,41,32,61,62,32,99,98,46,97,112,112,108,121,40,110,117,108,108,44,32,97,114,103,115,41,44,32,105,110,116,101,114,118,97,108,84,105,109,101,41,59,10,125,59,10,103,108,111,98,97,108,46,99,108,101,97,114,73,110,116,101,114,118,97,108,32,61,32,116,105,109,101,114,73,100,32,61,62,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,108,101,97,114,73,110,116,101,114,118,97,108,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,10,103,108,111,98,97,108,46,114,101,113,117,101,115,116,73,100,108,101,67,97,108,108,98,97,99,107,32,61,32,40,99,98,44,32,111,112,116,41,32,61,62,32,123,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,82,101,113,117,101,115,116,73,100,108,101,67,97,108,108,98,97,99,107,40,112,97,114,97,109,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,110,111,119,32,61,32,68,97,116,101,46,110,111,119,40,41,59,10,32,32,32,32,99,111,110,115,116,32,116,105,109,101,82,101,109,97,105,110,105,110,103,32,61,32,112,97,114,97,109,46,116,105,109,101,82,101,109,97,105,110,105,110,103,59,10,32,32,32,32,99,98,40,123,10,32,32,32,32,32,32,100,105,100,84,105,109,101,111,117,116,58,32,112,97,114,97,109,46,100,105,100,84,105,109,101,111,117,116,44,10,32,32,32,32,32,32,116,105,109,101,82,101,109,97,105,110,105,110,103,58,32,40,41,32,61,62,32,123,10,32,32,32,32,32,32,32,32,108,101,116,32,116,105,109,101,32,61,32,116,105,109,101,82,101,109,97,105,110,105,110,103,32,45,32,40,68,97,116,101,46,110,111,119,40,41,32,45,32,110,111,119,41,59,10,32,32,32,32,32,32,32,32,116,105,109,101,32,61,32,116,105,109,101,32,60,32,48,32,63,32,48,32,58,32,116,105,109,101,59,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,105,109,101,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,41,59,10,32,32,125,44,32,111,112,116,41,59,10,125,59,10,103,108,111,98,97,108,46,99,97,110,99,101,108,73,100,108,101,67,97,108,108,98,97,99,107,32,61,32,116,105,109,101,114,73,100,32,61,62,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,97,110,99,101,108,73,100,108,101,67,97,108,108,98,97,99,107,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_ConsoleModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,99,111,110,115,111,108,101,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,115,111,108,101,77,111,100,117,108,101,39,41,59,10,99,111,110,115,116,32,105,110,100,101,110,116,32,61,32,108,101,118,101,108,32,61,62,32,123,10,32,32,108,101,116,32,116,97,98,32,61,32,39,39,59,10,32,32,119,104,105,108,101,32,40,116,97,98,46,108,101,110,103,116,104,32,60,32,108,101,118,101,108,32,42,32,50,41,32,123,10,32,32,32,32,116,97,98,32,43,61,32,39,32,32,39,59,10,32,32,125,10,32,32,114,101,116,117,114,110,32,116,97,98,59,10,125,59,10,108,101,116,32,105,110,115,112,101,99,116,79,98,106,101,99,116,32,61,32,110,117,108,108,59,10,108,101,116,32,105,110,115,112,101,99,116,32,61,32,110,117,108,108,59,10,102,117,110,99,116,105,111,110,32,103,101,116,79,119,110,80,114,111,112,101,114,116,121,68,101,115,99,114,105,112,116,111,114,115,40,112,97,114,97,109,41,32,123,10,32,32,99,111,110,115,116,32,114,101,115,117,108,116,32,61,32,123,125,59,10,32,32,99,111,110,115,116,32,112,114,111,112,75,101,121,115,32,61,32,79,98,106,101,99,116,46,107,101,121,115,40,112,97,114,97,109,41,59,10,32,32,112,114,111,112,75,101,121,115,46,102,111,114,69,97,99,104,40,40,107,101,121,44,32,105,110,100,101,120,41,32,61,62,32,123,10,32,32,32,32,114,101,115,117,108,116,91,112,114,111,112,75,101,121,115,91,105,110,100,101,120,93,93,32,61,32,79,98,106,101,99,116,46,103,101,116,79,119,110,80,114,111,112,101,114,116,121,68,101,115,99,114,105,112,116,111,114,40,112,97,114,97,109,44,32,112,114,111,112,75,101,121,115,91,105,110,100,101,120,93,41,59,10,32,32,125,41,59,10,32,32,114,101,116,117,114,110,32,114,101,115,117,108,116,59,10,125,10,105,110,115,112,101,99,116,79,98,106,101,99,116,32,61,32,40,118,97,108,117,101,44,32,108,101,118,101,108,32,61,32,48,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,61,32,50,44,32,108,105,110,101,98,114,101,97,107,32,61,32,39,92,110,39,41,32,61,62,32,123,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,110,117,108,108,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,39,110,117,108,108,39,59,10,32,32,125,10,32,32,105,102,32,40,65,114,114,97,121,46,105,115,65,114,114,97,121,40,118,97,108,117,101,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,96,91,32,36,123,118,97,108,117,101,46,109,97,112,40,105,116,101,109,32,61,62,32,105,110,115,112,101,99,116,40,105,116,101,109,44,32,108,101,118,101,108,32,43,32,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,41,41,46,106,111,105,110,40,39,44,32,39,41,125,32,93,96,59,10,32,32,125,10,32,32,115,119,105,116,99,104,32,40,79,98,106,101,99,116,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,41,32,123,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,68,97,116,101,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,68,97,116,101,46,112,114,111,116,111,116,121,112,101,46,116,111,73,83,79,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,82,101,103,69,120,112,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,82,101,103,69,120,112,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,69,114,114,111,114,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,96,36,123,118,97,108,117,101,46,115,116,97,99,107,32,124,124,32,69,114,114,111,114,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,125,96,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,83,101,116,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,96,83,101,116,32,123,32,36,123,91,46,46,46,118,97,108,117,101,93,46,109,97,112,40,105,116,101,109,32,61,62,32,105,110,115,112,101,99,116,40,105,116,101,109,44,32,108,101,118,101,108,32,43,32,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,108,105,110,101,98,114,101,97,107,41,41,46,106,111,105,110,40,39,44,32,39,41,125,32,125,96,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,87,101,97,107,83,101,116,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,87,101,97,107,83,101,116,32,123,32,91,105,116,101,109,115,32,117,110,107,110,111,119,110,93,32,125,39,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,77,97,112,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,99,111,110,115,116,32,101,110,116,114,105,101,115,32,61,32,91,93,59,10,32,32,32,32,32,32,32,32,118,97,108,117,101,46,102,111,114,69,97,99,104,40,40,118,97,108,44,32,107,101,121,41,32,61,62,32,123,10,32,32,32,32,32,32,32,32,32,32,101,110,116,114,105,101,115,46,112,117,115,104,40,96,36,123,105,110,115,112,101,99,116,40,107,101,121,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,42,32,45,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,39,39,41,125,32,61,62,32,36,123,105,110,115,112,101,99,116,40,118,97,108,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,42,32,45,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,39,39,41,125,96,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,96,77,97,112,32,123,32,36,123,101,110,116,114,105,101,115,46,106,111,105,110,40,39,44,32,39,41,125,32,125,96,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,87,101,97,107,77,97,112,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,87,101,97,107,77,97,112,32,123,32,91,105,116,101,109,115,32,117,110,107,110,111,119,110,93,32,125,39,59,10,32,32,32,32,32,32,125,10,32,32,32,32,100,101,102,97,117,108,116,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,98,114,101,97,107,59,10,32,32,32,32,32,32,125,10,32,32,125,10,32,32,105,102,32,40,118,97,108,117,101,32,105,110,115,116,97,110,99,101,111,102,32,69,114,114,111,114,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,96,36,123,118,97,108,117,101,46,115,116,97,99,107,32,124,124,32,69,114,114,111,114,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,125,96,59,10,32,32,125,10,32,32,99,111,110,115,116,32,100,101,115,99,115,32,61,32,103,101,116,79,119,110,80,114,111,112,101,114,116,121,68,101,115,99,114,105,112,116,111,114,115,40,118,97,108,117,101,41,59,10,32,32,99,111,110,115,116,32,107,101,121,115,32,61,32,79,98,106,101,99,116,46,107,101,121,115,40,100,101,115,99,115,41,59,10,32,32,99,111,110,115,116,32,112,97,105,114,115,32,61,32,91,93,59,10,32,32,107,101,121,115,46,102,111,114,69,97,99,104,40,107,101,121,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,100,101,115,99,32,61,32,100,101,115,99,115,91,107,101,121,93,59,10,32,32,32,32,99,111,110,115,116,32,105,116,101,109,80,114,101,102,105,120,32,61,32,96,36,123,105,110,100,101,110,116,40,108,101,118,101,108,32,43,32,49,41,125,36,123,107,101,121,125,32,58,32,96,59,10,32,32,32,32,105,102,32,40,100,101,115,99,46,103,101,116,41,32,123,10,32,32,32,32,32,32,105,102,32,40,100,101,115,99,46,115,101,116,41,32,123,10,32,32,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,91,71,101,116,116,101,114,47,83,101,116,116,101,114,93,96,41,59,10,32,32,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,91,71,101,116,116,101,114,93,96,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,32,101,108,115,101,32,105,102,32,40,100,101,115,99,46,115,101,116,41,32,123,10,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,91,83,101,116,116,101,114,93,96,41,59,10,32,32,32,32,125,32,101,108,115,101,32,105,102,32,40,100,101,115,99,46,118,97,108,117,101,41,32,123,10,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,36,123,105,110,115,112,101,99,116,40,100,101,115,99,46,118,97,108,117,101,44,32,108,101,118,101,108,32,43,32,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,108,105,110,101,98,114,101,97,107,41,125,96,41,59,10,32,32,32,32,125,10,32,32,125,41,59,10,32,32,114,101,116,117,114,110,32,96,123,36,123,108,105,110,101,98,114,101,97,107,125,36,123,112,97,105,114,115,46,106,111,105,110,40,96,44,32,36,123,108,105,110,101,98,114,101,97,107,125,96,41,125,36,123,108,105,110,101,98,114,101,97,107,125,36,123,105,110,100,101,110,116,40,108,101,118,101,108,41,125,125,96,59,10,125,59,10,105,110,115,112,101,99,116,32,61,32,40,118,97,108,117,101,44,32,108,101,118,101,108,32,61,32,48,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,61,32,50,44,32,108,105,110,101,98,114,101,97,107,32,61,32,39,92,110,39,41,32,61,62,32,123,10,32,32,115,119,105,116,99,104,32,40,116,121,112,101,111,102,32,118,97,108,117,101,41,32,123,10,32,32,32,32,99,97,115,101,32,39,115,116,114,105,110,103,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,39,36,123,118,97,108,117,101,125,39,96,59,10,32,32,32,32,99,97,115,101,32,39,115,121,109,98,111,108,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,118,97,108,117,101,46,116,111,83,116,114,105,110,103,40,41,59,10,32,32,32,32,99,97,115,101,32,39,102,117,110,99,116,105,111,110,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,91,70,117,110,99,116,105,111,110,36,123,118,97,108,117,101,46,110,97,109,101,32,63,32,96,58,32,36,123,118,97,108,117,101,46,110,97,109,101,125,96,32,58,32,39,39,125,93,96,59,10,32,32,32,32,99,97,115,101,32,39,111,98,106,101,99,116,39,58,10,32,32,32,32,32,32,105,102,32,40,114,101,99,117,114,115,101,84,105,109,101,115,32,60,32,48,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,91,79,98,106,101,99,116,93,39,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,114,101,116,117,114,110,32,105,110,115,112,101,99,116,79,98,106,101,99,116,40,118,97,108,117,101,44,32,108,101,118,101,108,44,32,114,101,99,117,114,115,101,84,105,109,101,115,44,32,108,105,110,101,98,114,101,97,107,41,59,10,32,32,32,32,99,97,115,101,32,39,98,105,103,105,110,116,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,110,36,123,118,97,108,117,101,125,96,59,10,32,32,32,32,99,97,115,101,32,39,117,110,100,101,102,105,110,101,100,39,58,10,32,32,32,32,99,97,115,101,32,39,110,117,109,98,101,114,39,58,10,32,32,32,32,99,97,115,101,32,39,98,111,111,108,101,97,110,39,58,10,32,32,32,32,100,101,102,97,117,108,116,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,36,123,118,97,108,117,101,125,96,59,10,32,32,125,10,125,59,10,108,101,116,32,118,109,67,111,110,115,111,108,101,59,10,105,102,32,40,116,121,112,101,111,102,32,99,111,110,115,111,108,101,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,118,109,67,111,110,115,111,108,101,32,61,32,99,111,110,115,111,108,101,59,10,125,10,99,111,110,115,116,32,115,117,112,112,111,114,116,65,112,105,76,105,115,116,32,61,32,91,39,108,111,103,39,44,32,39,105,110,102,111,39,44,32,39,119,97,114,110,39,44,32,39,101,114,114,111,114,39,44,32,39,100,101,98,117,103,39,93,59,10,103,108,111,98,97,108,46,67,111,110,115,111,108,101,77,111,100,117,108,101,32,61,32,123,125,59,10,115,117,112,112,111,114,116,65,112,105,76,105,115,116,46,102,111,114,69,97,99,104,40,97,112,105,32,61,62,32,123,10,32,32,103,108,111,98,97,108,46,67,111,110,115,111,108,101,77,111,100,117,108,101,91,97,112,105,93,32,61,32,40,46,46,46,97,114,103,115,41,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,108,111,103,32,61,32,97,114,103,115,46,109,97,112,40,97,114,103,32,61,62,32,105,110,115,112,101,99,116,40,97,114,103,41,41,46,106,111,105,110,40,39,32,39,41,59,10,32,32,32,32,99,111,110,115,111,108,101,77,111,100,117,108,101,46,76,111,103,40,108,111,103,44,32,97,112,105,41,59,10,32,32,125,59,10,125,41,59,10,103,108,111,98,97,108,46,99,111,110,115,111,108,101,32,61,32,123,10,32,32,114,101,112,111,114,116,85,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,32,38,38,32,101,114,114,111,114,32,105,110,115,116,97,110,99,101,111,102,32,69,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,10,105,102,32,40,118,109,67,111,110,115,111,108,101,41,32,123,10,32,32,79,98,106,101,99,116,46,107,101,121,115,40,118,109,67,111,110,115,111,108,101,41,46,102,111,114,69,97,99,104,40,97,112,105,32,61,62,32,123,10,32,32,32,32,103,108,111,98,97,108,46,99,111,110,115,111,108,101,91,97,112,105,93,32,61,32,118,109,67,111,110,115,111,108,101,91,97,112,105,93,59,10,32,32,125,41,59,10,125,125,41,59,0 }; // NOLINT diff --git a/framework/voltron/core/src/bridge/native_source_code_flutter.cc b/framework/voltron/core/src/bridge/native_source_code_flutter.cc index ab9fa509951..0eb97c5ca5f 100644 --- a/framework/voltron/core/src/bridge/native_source_code_flutter.cc +++ b/framework/voltron/core/src/bridge/native_source_code_flutter.cc @@ -2,7 +2,7 @@ * Tencent is pleased to support the open source community by making * Hippy available. * - * Copyright (C) 2017-2023 THL A29 Limited, a Tencent company. + * Copyright (C) 2017-2024 THL A29 Limited, a Tencent company. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,7 +31,7 @@ namespace { const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,10,125,59,10,99,108,97,115,115,32,69,114,114,111,114,69,118,101,110,116,32,123,10,32,32,99,111,110,115,116,114,117,99,116,111,114,40,109,101,115,115,97,103,101,44,32,102,105,108,101,110,97,109,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,32,32,116,104,105,115,46,109,101,115,115,97,103,101,32,61,32,109,101,115,115,97,103,101,59,10,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,116,104,105,115,46,108,105,110,101,110,111,32,61,32,108,105,110,101,110,111,59,10,32,32,32,32,116,104,105,115,46,99,111,108,110,111,32,61,32,99,111,108,110,111,59,10,32,32,32,32,116,104,105,115,46,101,114,114,111,114,32,61,32,101,114,114,111,114,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,44,32,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,108,101,116,32,105,115,69,114,114,32,61,32,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,101,114,114,111,114,39,59,10,32,32,108,101,116,32,101,114,114,79,98,106,32,61,32,110,101,119,32,69,114,114,111,114,40,41,59,10,32,32,105,102,32,40,105,115,69,114,114,41,32,123,10,32,32,32,32,108,101,116,32,97,114,114,32,61,32,97,114,103,115,91,48,93,59,10,32,32,32,32,105,102,32,40,33,40,97,114,114,32,105,110,115,116,97,110,99,101,111,102,32,65,114,114,97,121,41,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,101,114,114,111,114,32,101,118,101,110,116,44,32,97,114,103,115,48,32,109,117,115,116,32,98,101,32,97,114,114,97,121,39,41,59,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,97,114,114,46,108,101,110,103,116,104,32,33,61,61,32,53,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,101,114,114,111,114,32,101,118,101,110,116,44,32,97,114,103,115,48,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,53,39,41,59,10,32,32,32,32,125,10,32,32,32,32,101,114,114,79,98,106,46,109,101,115,115,97,103,101,32,61,32,74,83,79,78,46,115,116,114,105,110,103,105,102,121,40,97,114,114,91,52,93,41,59,10,32,32,32,32,105,102,32,40,72,105,112,112,121,46,111,110,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,72,105,112,112,121,46,111,110,101,114,114,111,114,40,97,114,114,91,48,93,44,32,97,114,114,91,49,93,44,32,97,114,114,91,50,93,44,32,97,114,114,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,105,102,32,40,105,115,69,114,114,41,32,123,10,32,32,32,32,32,32,108,101,116,32,97,114,114,32,61,32,97,114,103,115,91,48,93,59,10,32,32,32,32,32,32,108,101,116,32,101,118,101,110,116,32,61,32,110,101,119,32,69,114,114,111,114,69,118,101,110,116,40,97,114,114,91,48,93,44,32,97,114,114,91,49,93,44,32,97,114,114,91,50,93,44,32,97,114,114,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,101,118,101,110,116,41,41,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,46,46,46,97,114,103,115,41,41,59,10,32,32,32,32,125,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,10,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,111,110,59,10,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,111,102,102,59,10,72,105,112,112,121,46,111,110,101,114,114,111,114,32,61,32,117,110,100,101,102,105,110,101,100,59,125,41,59,0 }; // NOLINT const uint8_t k_DynamicLoad[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,100,121,110,97,109,105,99,76,111,97,100,32,61,32,40,112,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,32,61,62,32,123,10,32,32,108,101,116,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,112,97,116,104,32,124,124,32,39,39,59,10,32,32,99,111,110,115,116,32,105,115,83,99,104,101,109,97,32,61,32,47,94,40,46,43,58,92,47,92,47,41,124,94,40,92,47,92,47,41,47,46,116,101,115,116,40,112,97,116,104,41,59,10,32,32,105,102,32,40,33,105,115,83,99,104,101,109,97,41,32,123,10,32,32,32,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,103,108,111,98,97,108,46,95,95,72,73,80,80,89,67,85,82,68,73,82,95,95,32,43,32,112,97,116,104,59,10,32,32,125,10,32,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,46,76,111,97,100,85,110,116,114,117,115,116,101,100,67,111,110,116,101,110,116,40,114,101,113,117,101,115,116,80,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,59,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_Platform[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,32,61,32,123,125,59,10,105,102,32,40,116,121,112,101,111,102,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,99,111,110,115,116,32,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,123,10,32,32,32,32,99,111,117,110,116,114,121,58,32,39,39,44,10,32,32,32,32,108,97,110,103,117,97,103,101,58,32,39,39,44,10,32,32,32,32,100,105,114,101,99,116,105,111,110,58,32,48,10,32,32,125,59,10,32,32,105,102,32,40,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,32,61,61,61,32,39,105,111,115,39,41,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,68,101,118,105,99,101,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,68,101,118,105,99,101,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,10,125,125,41,59,0 }; // NOLINT - const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT + const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,99,111,110,115,116,32,76,97,121,111,117,116,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,76,97,121,111,117,116,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,40,41,32,123,10,32,32,32,32,76,97,121,111,117,116,77,111,100,117,108,101,46,82,101,115,101,116,76,97,121,111,117,116,67,97,99,104,101,40,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_js2native[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,32,61,32,40,46,46,46,99,97,108,108,65,114,103,117,109,101,110,116,115,41,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,110,111,116,32,100,101,102,105,110,101,100,39,41,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,50,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,65,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,50,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,99,111,110,115,116,32,112,97,114,97,109,32,61,32,91,93,59,10,32,32,108,101,116,32,99,98,67,111,117,110,116,32,61,32,48,59,10,32,32,102,111,114,32,40,108,101,116,32,105,32,61,32,50,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,38,38,32,99,98,67,111,117,110,116,32,61,61,61,32,48,41,32,123,10,32,32,32,32,32,32,99,98,67,111,117,110,116,32,43,61,32,49,59,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,99,98,58,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,44,10,32,32,32,32,32,32,32,32,116,121,112,101,58,32,48,10,32,32,32,32,32,32,125,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,112,97,114,97,109,46,112,117,115,104,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,108,101,116,32,109,111,100,117,108,101,67,97,108,108,98,97,99,107,73,100,32,61,32,45,49,59,10,32,32,105,102,32,40,99,98,67,111,117,110,116,32,62,32,48,41,32,123,10,32,32,32,32,109,111,100,117,108,101,67,97,108,108,98,97,99,107,73,100,32,61,32,99,117,114,114,101,110,116,67,97,108,108,73,100,59,10,32,32,125,10,32,32,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,48,93,44,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,49,93,44,32,109,111,100,117,108,101,67,97,108,108,98,97,99,107,73,100,46,116,111,83,116,114,105,110,103,40,41,44,32,112,97,114,97,109,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,87,105,116,104,80,114,111,109,105,115,101,32,61,32,40,46,46,46,99,97,108,108,65,114,103,117,109,101,110,116,115,41,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,106,101,99,116,40,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,110,111,116,32,100,101,102,105,110,101,100,39,41,41,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,50,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,80,114,111,109,105,115,101,46,114,101,106,101,99,116,40,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,65,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,50,39,41,41,59,10,32,32,125,10,32,32,114,101,116,117,114,110,32,110,101,119,32,80,114,111,109,105,115,101,40,40,114,101,115,111,108,118,101,44,32,114,106,41,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,32,32,99,111,110,115,116,32,112,97,114,97,109,32,61,32,91,93,59,10,32,32,32,32,108,101,116,32,99,98,67,111,117,110,116,32,61,32,48,59,10,32,32,32,32,102,111,114,32,40,108,101,116,32,105,32,61,32,50,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,38,38,32,99,98,67,111,117,110,116,32,61,61,61,32,48,41,32,123,10,32,32,32,32,32,32,32,32,99,98,67,111,117,110,116,32,43,61,32,49,59,10,32,32,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,32,32,99,98,58,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,44,10,32,32,32,32,32,32,32,32,32,32,114,101,106,101,99,116,58,32,114,106,44,10,32,32,32,32,32,32,32,32,32,32,116,121,112,101,58,32,48,10,32,32,32,32,32,32,32,32,125,59,10,32,32,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,32,32,112,97,114,97,109,46,112,117,115,104,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,10,32,32,32,32,105,102,32,40,99,98,67,111,117,110,116,32,61,61,61,32,48,41,32,123,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,99,98,58,32,114,101,115,111,108,118,101,44,10,32,32,32,32,32,32,32,32,114,101,106,101,99,116,58,32,114,106,44,10,32,32,32,32,32,32,32,32,116,121,112,101,58,32,48,10,32,32,32,32,32,32,125,59,10,32,32,32,32,125,10,32,32,32,32,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,48,93,44,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,49,93,44,32,99,117,114,114,101,110,116,67,97,108,108,73,100,46,116,111,83,116,114,105,110,103,40,41,44,32,112,97,114,97,109,41,59,10,32,32,125,41,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,99,97,108,108,78,97,116,105,118,101,87,105,116,104,67,97,108,108,98,97,99,107,73,100,32,61,32,40,46,46,46,99,97,108,108,65,114,103,117,109,101,110,116,115,41,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,32,110,111,116,32,100,101,102,105,110,101,100,39,41,59,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,32,60,32,51,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,65,114,103,117,109,101,110,116,115,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,108,97,114,103,101,114,32,116,104,97,110,32,51,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,97,108,108,77,111,100,117,108,101,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,48,93,59,10,32,32,99,111,110,115,116,32,99,97,108,108,70,117,110,99,78,97,109,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,49,93,59,10,32,32,99,111,110,115,116,32,97,117,116,111,68,101,108,101,116,101,32,61,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,50,93,59,10,32,32,105,102,32,40,116,121,112,101,111,102,32,99,97,108,108,77,111,100,117,108,101,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,99,97,108,108,70,117,110,99,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,97,117,116,111,68,101,108,101,116,101,32,33,61,61,32,39,98,111,111,108,101,97,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,115,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,117,114,114,101,110,116,67,97,108,108,73,100,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,59,10,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,73,100,32,43,61,32,49,59,10,32,32,99,111,110,115,116,32,112,97,114,97,109,32,61,32,91,93,59,10,32,32,105,102,32,40,99,97,108,108,77,111,100,117,108,101,78,97,109,101,32,61,61,61,32,39,65,110,105,109,97,116,105,111,110,77,111,100,117,108,101,39,32,38,38,32,40,99,97,108,108,70,117,110,99,78,97,109,101,32,61,61,61,32,39,99,114,101,97,116,101,65,110,105,109,97,116,105,111,110,39,32,124,124,32,99,97,108,108,70,117,110,99,78,97,109,101,32,61,61,61,32,39,99,114,101,97,116,101,65,110,105,109,97,116,105,111,110,83,101,116,39,41,41,32,123,10,32,32,32,32,112,97,114,97,109,46,112,117,115,104,40,99,117,114,114,101,110,116,67,97,108,108,73,100,41,59,10,32,32,125,10,32,32,108,101,116,32,99,98,67,111,117,110,116,32,61,32,48,59,10,32,32,102,111,114,32,40,108,101,116,32,105,32,61,32,51,59,32,105,32,60,32,99,97,108,108,65,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,59,32,105,32,43,61,32,49,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,32,61,61,61,32,39,102,117,110,99,116,105,111,110,39,32,38,38,32,99,98,67,111,117,110,116,32,61,61,61,32,48,41,32,123,10,32,32,32,32,32,32,99,98,67,111,117,110,116,32,43,61,32,49,59,10,32,32,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,117,114,114,101,110,116,67,97,108,108,73,100,93,32,61,32,123,10,32,32,32,32,32,32,32,32,99,98,58,32,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,44,10,32,32,32,32,32,32,32,32,116,121,112,101,58,32,97,117,116,111,68,101,108,101,116,101,32,63,32,49,32,58,32,50,10,32,32,32,32,32,32,125,59,10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,112,97,114,97,109,46,112,117,115,104,40,99,97,108,108,65,114,103,117,109,101,110,116,115,91,105,93,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,105,102,32,40,99,97,108,108,77,111,100,117,108,101,78,97,109,101,32,61,61,61,32,39,84,105,109,101,114,77,111,100,117,108,101,39,32,124,124,32,99,97,108,108,77,111,100,117,108,101,78,97,109,101,32,61,61,61,32,39,65,110,105,109,97,116,105,111,110,70,114,97,109,101,77,111,100,117,108,101,39,41,32,123,10,32,32,32,32,112,97,114,97,109,46,112,117,115,104,40,99,117,114,114,101,110,116,67,97,108,108,73,100,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,125,10,32,32,104,105,112,112,121,67,97,108,108,78,97,116,105,118,101,115,40,99,97,108,108,77,111,100,117,108,101,78,97,109,101,44,32,99,97,108,108,70,117,110,99,78,97,109,101,44,32,99,117,114,114,101,110,116,67,97,108,108,73,100,46,116,111,83,116,114,105,110,103,40,41,44,32,112,97,114,97,109,41,59,10,32,32,114,101,116,117,114,110,32,99,117,114,114,101,110,116,67,97,108,108,73,100,59,10,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,46,114,101,109,111,118,101,78,97,116,105,118,101,67,97,108,108,98,97,99,107,32,61,32,99,97,108,108,73,100,32,61,62,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,99,97,108,108,73,100,32,33,61,61,32,39,110,117,109,98,101,114,39,32,124,124,32,99,97,108,108,73,100,32,60,32,48,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,115,39,41,59,10,32,32,125,10,32,32,105,102,32,40,116,121,112,101,111,102,32,95,95,71,76,79,66,65,76,95,95,32,33,61,61,32,39,111,98,106,101,99,116,39,32,124,124,32,116,121,112,101,111,102,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,32,33,61,61,32,39,111,98,106,101,99,116,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,82,101,102,101,114,101,110,99,101,69,114,114,111,114,40,39,109,111,100,117,108,101,67,97,108,108,76,105,115,116,32,110,111,116,32,100,101,102,105,110,101,100,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,99,97,108,108,98,97,99,107,79,98,106,101,99,116,32,61,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,97,108,108,73,100,93,59,10,32,32,105,102,32,40,99,97,108,108,98,97,99,107,79,98,106,101,99,116,32,38,38,32,40,99,97,108,108,98,97,99,107,79,98,106,101,99,116,46,116,121,112,101,32,61,61,61,32,49,32,124,124,32,99,97,108,108,98,97,99,107,79,98,106,101,99,116,46,116,121,112,101,32,61,61,61,32,50,41,41,32,123,10,32,32,32,32,100,101,108,101,116,101,32,95,95,71,76,79,66,65,76,95,95,46,109,111,100,117,108,101,67,97,108,108,76,105,115,116,91,99,97,108,108,73,100,93,59,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_TimerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,116,105,109,101,114,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,84,105,109,101,114,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,115,101,116,84,105,109,101,111,117,116,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,115,108,101,101,112,84,105,109,101,41,32,123,10,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,97,114,103,117,109,101,110,116,115,44,32,50,41,59,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,83,101,116,84,105,109,101,111,117,116,40,40,41,32,61,62,32,99,98,46,97,112,112,108,121,40,110,117,108,108,44,32,97,114,103,115,41,44,32,115,108,101,101,112,84,105,109,101,41,59,10,125,59,10,103,108,111,98,97,108,46,99,108,101,97,114,84,105,109,101,111,117,116,32,61,32,116,105,109,101,114,73,100,32,61,62,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,108,101,97,114,84,105,109,101,111,117,116,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,10,103,108,111,98,97,108,46,115,101,116,73,110,116,101,114,118,97,108,32,61,32,102,117,110,99,116,105,111,110,32,40,99,98,44,32,105,110,116,101,114,118,97,108,84,105,109,101,41,32,123,10,32,32,99,111,110,115,116,32,97,114,103,115,32,61,32,65,114,114,97,121,46,112,114,111,116,111,116,121,112,101,46,115,108,105,99,101,46,99,97,108,108,40,97,114,103,117,109,101,110,116,115,44,32,50,41,59,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,83,101,116,73,110,116,101,114,118,97,108,40,40,41,32,61,62,32,99,98,46,97,112,112,108,121,40,110,117,108,108,44,32,97,114,103,115,41,44,32,105,110,116,101,114,118,97,108,84,105,109,101,41,59,10,125,59,10,103,108,111,98,97,108,46,99,108,101,97,114,73,110,116,101,114,118,97,108,32,61,32,116,105,109,101,114,73,100,32,61,62,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,108,101,97,114,73,110,116,101,114,118,97,108,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,10,103,108,111,98,97,108,46,114,101,113,117,101,115,116,73,100,108,101,67,97,108,108,98,97,99,107,32,61,32,40,99,98,44,32,111,112,116,41,32,61,62,32,123,10,32,32,114,101,116,117,114,110,32,116,105,109,101,114,46,82,101,113,117,101,115,116,73,100,108,101,67,97,108,108,98,97,99,107,40,112,97,114,97,109,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,110,111,119,32,61,32,68,97,116,101,46,110,111,119,40,41,59,10,32,32,32,32,99,111,110,115,116,32,116,105,109,101,82,101,109,97,105,110,105,110,103,32,61,32,112,97,114,97,109,46,116,105,109,101,82,101,109,97,105,110,105,110,103,59,10,32,32,32,32,99,98,40,123,10,32,32,32,32,32,32,100,105,100,84,105,109,101,111,117,116,58,32,112,97,114,97,109,46,100,105,100,84,105,109,101,111,117,116,44,10,32,32,32,32,32,32,116,105,109,101,82,101,109,97,105,110,105,110,103,58,32,40,41,32,61,62,32,123,10,32,32,32,32,32,32,32,32,108,101,116,32,116,105,109,101,32,61,32,116,105,109,101,82,101,109,97,105,110,105,110,103,32,45,32,40,68,97,116,101,46,110,111,119,40,41,32,45,32,110,111,119,41,59,10,32,32,32,32,32,32,32,32,116,105,109,101,32,61,32,116,105,109,101,32,60,32,48,32,63,32,48,32,58,32,116,105,109,101,59,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,105,109,101,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,41,59,10,32,32,125,44,32,111,112,116,41,59,10,125,59,10,103,108,111,98,97,108,46,99,97,110,99,101,108,73,100,108,101,67,97,108,108,98,97,99,107,32,61,32,116,105,109,101,114,73,100,32,61,62,32,123,10,32,32,105,102,32,40,78,117,109,98,101,114,46,105,115,73,110,116,101,103,101,114,40,116,105,109,101,114,73,100,41,32,38,38,32,116,105,109,101,114,73,100,32,62,32,48,41,32,123,10,32,32,32,32,116,105,109,101,114,46,67,97,110,99,101,108,73,100,108,101,67,97,108,108,98,97,99,107,40,116,105,109,101,114,73,100,41,59,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_ConsoleModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,99,111,110,115,111,108,101,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,115,111,108,101,77,111,100,117,108,101,39,41,59,10,99,111,110,115,116,32,105,110,100,101,110,116,32,61,32,108,101,118,101,108,32,61,62,32,123,10,32,32,108,101,116,32,116,97,98,32,61,32,39,39,59,10,32,32,119,104,105,108,101,32,40,116,97,98,46,108,101,110,103,116,104,32,60,32,108,101,118,101,108,32,42,32,50,41,32,123,10,32,32,32,32,116,97,98,32,43,61,32,39,32,32,39,59,10,32,32,125,10,32,32,114,101,116,117,114,110,32,116,97,98,59,10,125,59,10,108,101,116,32,105,110,115,112,101,99,116,79,98,106,101,99,116,32,61,32,110,117,108,108,59,10,108,101,116,32,105,110,115,112,101,99,116,32,61,32,110,117,108,108,59,10,102,117,110,99,116,105,111,110,32,103,101,116,79,119,110,80,114,111,112,101,114,116,121,68,101,115,99,114,105,112,116,111,114,115,40,112,97,114,97,109,41,32,123,10,32,32,99,111,110,115,116,32,114,101,115,117,108,116,32,61,32,123,125,59,10,32,32,99,111,110,115,116,32,112,114,111,112,75,101,121,115,32,61,32,79,98,106,101,99,116,46,107,101,121,115,40,112,97,114,97,109,41,59,10,32,32,112,114,111,112,75,101,121,115,46,102,111,114,69,97,99,104,40,40,107,101,121,44,32,105,110,100,101,120,41,32,61,62,32,123,10,32,32,32,32,114,101,115,117,108,116,91,112,114,111,112,75,101,121,115,91,105,110,100,101,120,93,93,32,61,32,79,98,106,101,99,116,46,103,101,116,79,119,110,80,114,111,112,101,114,116,121,68,101,115,99,114,105,112,116,111,114,40,112,97,114,97,109,44,32,112,114,111,112,75,101,121,115,91,105,110,100,101,120,93,41,59,10,32,32,125,41,59,10,32,32,114,101,116,117,114,110,32,114,101,115,117,108,116,59,10,125,10,105,110,115,112,101,99,116,79,98,106,101,99,116,32,61,32,40,118,97,108,117,101,44,32,108,101,118,101,108,32,61,32,48,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,61,32,50,44,32,108,105,110,101,98,114,101,97,107,32,61,32,39,92,110,39,41,32,61,62,32,123,10,32,32,105,102,32,40,118,97,108,117,101,32,61,61,61,32,110,117,108,108,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,39,110,117,108,108,39,59,10,32,32,125,10,32,32,105,102,32,40,65,114,114,97,121,46,105,115,65,114,114,97,121,40,118,97,108,117,101,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,96,91,32,36,123,118,97,108,117,101,46,109,97,112,40,105,116,101,109,32,61,62,32,105,110,115,112,101,99,116,40,105,116,101,109,44,32,108,101,118,101,108,32,43,32,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,41,41,46,106,111,105,110,40,39,44,32,39,41,125,32,93,96,59,10,32,32,125,10,32,32,115,119,105,116,99,104,32,40,79,98,106,101,99,116,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,41,32,123,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,68,97,116,101,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,68,97,116,101,46,112,114,111,116,111,116,121,112,101,46,116,111,73,83,79,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,82,101,103,69,120,112,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,82,101,103,69,120,112,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,69,114,114,111,114,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,96,36,123,118,97,108,117,101,46,115,116,97,99,107,32,124,124,32,69,114,114,111,114,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,125,96,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,83,101,116,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,96,83,101,116,32,123,32,36,123,91,46,46,46,118,97,108,117,101,93,46,109,97,112,40,105,116,101,109,32,61,62,32,105,110,115,112,101,99,116,40,105,116,101,109,44,32,108,101,118,101,108,32,43,32,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,108,105,110,101,98,114,101,97,107,41,41,46,106,111,105,110,40,39,44,32,39,41,125,32,125,96,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,87,101,97,107,83,101,116,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,87,101,97,107,83,101,116,32,123,32,91,105,116,101,109,115,32,117,110,107,110,111,119,110,93,32,125,39,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,77,97,112,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,99,111,110,115,116,32,101,110,116,114,105,101,115,32,61,32,91,93,59,10,32,32,32,32,32,32,32,32,118,97,108,117,101,46,102,111,114,69,97,99,104,40,40,118,97,108,44,32,107,101,121,41,32,61,62,32,123,10,32,32,32,32,32,32,32,32,32,32,101,110,116,114,105,101,115,46,112,117,115,104,40,96,36,123,105,110,115,112,101,99,116,40,107,101,121,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,42,32,45,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,39,39,41,125,32,61,62,32,36,123,105,110,115,112,101,99,116,40,118,97,108,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,42,32,45,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,39,39,41,125,96,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,96,77,97,112,32,123,32,36,123,101,110,116,114,105,101,115,46,106,111,105,110,40,39,44,32,39,41,125,32,125,96,59,10,32,32,32,32,32,32,125,10,32,32,32,32,99,97,115,101,32,39,91,111,98,106,101,99,116,32,87,101,97,107,77,97,112,93,39,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,87,101,97,107,77,97,112,32,123,32,91,105,116,101,109,115,32,117,110,107,110,111,119,110,93,32,125,39,59,10,32,32,32,32,32,32,125,10,32,32,32,32,100,101,102,97,117,108,116,58,10,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,98,114,101,97,107,59,10,32,32,32,32,32,32,125,10,32,32,125,10,32,32,105,102,32,40,118,97,108,117,101,32,105,110,115,116,97,110,99,101,111,102,32,69,114,114,111,114,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,96,36,123,118,97,108,117,101,46,115,116,97,99,107,32,124,124,32,69,114,114,111,114,46,112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,99,97,108,108,40,118,97,108,117,101,41,125,96,59,10,32,32,125,10,32,32,99,111,110,115,116,32,100,101,115,99,115,32,61,32,103,101,116,79,119,110,80,114,111,112,101,114,116,121,68,101,115,99,114,105,112,116,111,114,115,40,118,97,108,117,101,41,59,10,32,32,99,111,110,115,116,32,107,101,121,115,32,61,32,79,98,106,101,99,116,46,107,101,121,115,40,100,101,115,99,115,41,59,10,32,32,99,111,110,115,116,32,112,97,105,114,115,32,61,32,91,93,59,10,32,32,107,101,121,115,46,102,111,114,69,97,99,104,40,107,101,121,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,100,101,115,99,32,61,32,100,101,115,99,115,91,107,101,121,93,59,10,32,32,32,32,99,111,110,115,116,32,105,116,101,109,80,114,101,102,105,120,32,61,32,96,36,123,105,110,100,101,110,116,40,108,101,118,101,108,32,43,32,49,41,125,36,123,107,101,121,125,32,58,32,96,59,10,32,32,32,32,105,102,32,40,100,101,115,99,46,103,101,116,41,32,123,10,32,32,32,32,32,32,105,102,32,40,100,101,115,99,46,115,101,116,41,32,123,10,32,32,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,91,71,101,116,116,101,114,47,83,101,116,116,101,114,93,96,41,59,10,32,32,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,91,71,101,116,116,101,114,93,96,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,32,101,108,115,101,32,105,102,32,40,100,101,115,99,46,115,101,116,41,32,123,10,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,91,83,101,116,116,101,114,93,96,41,59,10,32,32,32,32,125,32,101,108,115,101,32,105,102,32,40,100,101,115,99,46,118,97,108,117,101,41,32,123,10,32,32,32,32,32,32,112,97,105,114,115,46,112,117,115,104,40,96,36,123,105,116,101,109,80,114,101,102,105,120,125,36,123,105,110,115,112,101,99,116,40,100,101,115,99,46,118,97,108,117,101,44,32,108,101,118,101,108,32,43,32,49,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,45,32,49,44,32,108,105,110,101,98,114,101,97,107,41,125,96,41,59,10,32,32,32,32,125,10,32,32,125,41,59,10,32,32,114,101,116,117,114,110,32,96,123,36,123,108,105,110,101,98,114,101,97,107,125,36,123,112,97,105,114,115,46,106,111,105,110,40,96,44,32,36,123,108,105,110,101,98,114,101,97,107,125,96,41,125,36,123,108,105,110,101,98,114,101,97,107,125,36,123,105,110,100,101,110,116,40,108,101,118,101,108,41,125,125,96,59,10,125,59,10,105,110,115,112,101,99,116,32,61,32,40,118,97,108,117,101,44,32,108,101,118,101,108,32,61,32,48,44,32,114,101,99,117,114,115,101,84,105,109,101,115,32,61,32,50,44,32,108,105,110,101,98,114,101,97,107,32,61,32,39,92,110,39,41,32,61,62,32,123,10,32,32,115,119,105,116,99,104,32,40,116,121,112,101,111,102,32,118,97,108,117,101,41,32,123,10,32,32,32,32,99,97,115,101,32,39,115,116,114,105,110,103,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,39,36,123,118,97,108,117,101,125,39,96,59,10,32,32,32,32,99,97,115,101,32,39,115,121,109,98,111,108,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,118,97,108,117,101,46,116,111,83,116,114,105,110,103,40,41,59,10,32,32,32,32,99,97,115,101,32,39,102,117,110,99,116,105,111,110,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,91,70,117,110,99,116,105,111,110,36,123,118,97,108,117,101,46,110,97,109,101,32,63,32,96,58,32,36,123,118,97,108,117,101,46,110,97,109,101,125,96,32,58,32,39,39,125,93,96,59,10,32,32,32,32,99,97,115,101,32,39,111,98,106,101,99,116,39,58,10,32,32,32,32,32,32,105,102,32,40,114,101,99,117,114,115,101,84,105,109,101,115,32,60,32,48,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,39,91,79,98,106,101,99,116,93,39,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,114,101,116,117,114,110,32,105,110,115,112,101,99,116,79,98,106,101,99,116,40,118,97,108,117,101,44,32,108,101,118,101,108,44,32,114,101,99,117,114,115,101,84,105,109,101,115,44,32,108,105,110,101,98,114,101,97,107,41,59,10,32,32,32,32,99,97,115,101,32,39,98,105,103,105,110,116,39,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,110,36,123,118,97,108,117,101,125,96,59,10,32,32,32,32,99,97,115,101,32,39,117,110,100,101,102,105,110,101,100,39,58,10,32,32,32,32,99,97,115,101,32,39,110,117,109,98,101,114,39,58,10,32,32,32,32,99,97,115,101,32,39,98,111,111,108,101,97,110,39,58,10,32,32,32,32,100,101,102,97,117,108,116,58,10,32,32,32,32,32,32,114,101,116,117,114,110,32,96,36,123,118,97,108,117,101,125,96,59,10,32,32,125,10,125,59,10,108,101,116,32,118,109,67,111,110,115,111,108,101,59,10,105,102,32,40,116,121,112,101,111,102,32,99,111,110,115,111,108,101,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,118,109,67,111,110,115,111,108,101,32,61,32,99,111,110,115,111,108,101,59,10,125,10,99,111,110,115,116,32,115,117,112,112,111,114,116,65,112,105,76,105,115,116,32,61,32,91,39,108,111,103,39,44,32,39,105,110,102,111,39,44,32,39,119,97,114,110,39,44,32,39,101,114,114,111,114,39,44,32,39,100,101,98,117,103,39,93,59,10,103,108,111,98,97,108,46,67,111,110,115,111,108,101,77,111,100,117,108,101,32,61,32,123,125,59,10,115,117,112,112,111,114,116,65,112,105,76,105,115,116,46,102,111,114,69,97,99,104,40,97,112,105,32,61,62,32,123,10,32,32,103,108,111,98,97,108,46,67,111,110,115,111,108,101,77,111,100,117,108,101,91,97,112,105,93,32,61,32,40,46,46,46,97,114,103,115,41,32,61,62,32,123,10,32,32,32,32,99,111,110,115,116,32,108,111,103,32,61,32,97,114,103,115,46,109,97,112,40,97,114,103,32,61,62,32,105,110,115,112,101,99,116,40,97,114,103,41,41,46,106,111,105,110,40,39,32,39,41,59,10,32,32,32,32,99,111,110,115,111,108,101,77,111,100,117,108,101,46,76,111,103,40,108,111,103,44,32,97,112,105,41,59,10,32,32,125,59,10,125,41,59,10,103,108,111,98,97,108,46,99,111,110,115,111,108,101,32,61,32,123,10,32,32,114,101,112,111,114,116,85,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,32,38,38,32,101,114,114,111,114,32,105,110,115,116,97,110,99,101,111,102,32,69,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,10,105,102,32,40,118,109,67,111,110,115,111,108,101,41,32,123,10,32,32,79,98,106,101,99,116,46,107,101,121,115,40,118,109,67,111,110,115,111,108,101,41,46,102,111,114,69,97,99,104,40,97,112,105,32,61,62,32,123,10,32,32,32,32,103,108,111,98,97,108,46,99,111,110,115,111,108,101,91,97,112,105,93,32,61,32,118,109,67,111,110,115,111,108,101,91,97,112,105,93,59,10,32,32,125,41,59,10,125,125,41,59,0 }; // NOLINT From 254b6b9f66b7342123143e8f0764db4c1020ca3c Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 23 Oct 2024 21:57:57 +0800 Subject: [PATCH 27/52] fix(ios): delay release engine resource to avoid deadlock (#4090) --- framework/ios/base/executors/HippyJSExecutor.mm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/framework/ios/base/executors/HippyJSExecutor.mm b/framework/ios/base/executors/HippyJSExecutor.mm index 46c787d4cf3..9c9fa7928db 100644 --- a/framework/ios/base/executors/HippyJSExecutor.mm +++ b/framework/ios/base/executors/HippyJSExecutor.mm @@ -249,7 +249,12 @@ - (void)invalidate { return; } dispatch_async(dispatch_get_main_queue(), ^{ + auto engineRsc = [[HippyJSEnginesMapper defaultInstance] JSEngineResourceForKey:enginekey]; [[HippyJSEnginesMapper defaultInstance] removeEngineResourceForKey:enginekey]; + dispatch_async(dispatch_get_main_queue(), ^{ + // Make a tiny delay to ensure the engine resource is released on the main thread + HippyLogInfo(@"Remove EngineRsc, UseCount:%ld", engineRsc.use_count()); + }); }); } From 6bea97a1b71711ee4b3e76cd4436ec232f929118 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Fri, 25 Oct 2024 21:04:12 +0800 Subject: [PATCH 28/52] build(ios): fix build error due to std::any_cast --- driver/js/src/modules/ui_layout_module.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/driver/js/src/modules/ui_layout_module.cc b/driver/js/src/modules/ui_layout_module.cc index 3b44c04e62a..ee7c743e627 100644 --- a/driver/js/src/modules/ui_layout_module.cc +++ b/driver/js/src/modules/ui_layout_module.cc @@ -49,7 +49,8 @@ inline namespace module { GEN_INVOKE_CB(LayoutModule, ResetLayoutCache) void LayoutModule::ResetLayoutCache(CallbackInfo& info, void* data) { - auto scope_wrapper = reinterpret_cast(std::any_cast(info.GetSlot())); + std::any slot_any = info.GetSlot(); + auto scope_wrapper = reinterpret_cast(std::any_cast(&slot_any)); auto scope = scope_wrapper->scope.lock(); FOOTSTONE_CHECK(scope); if (!scope) { From 950a78206b4fa1e8f341ef61cc5e603c4c8b6ebb Mon Sep 17 00:00:00 2001 From: wwwcg Date: Tue, 29 Oct 2024 12:06:00 +0800 Subject: [PATCH 29/52] fix(android,ios): performance record inaccurate when engine reuse --- dom/include/dom/dom_manager.h | 12 +-- dom/src/dom/dom_manager.cc | 14 ++-- dom/src/dom/root_node.cc | 2 +- dom/src/dom/scene_builder.cc | 8 +- .../cpp/include/connector/js_driver_jni.h | 2 +- .../js/src/main/cpp/src/js_driver_jni.cc | 14 ++-- .../com/openhippy/connector/JsDriver.java | 6 +- .../mtt/hippy/HippyEngineManagerImpl.java | 4 +- .../base/bridge/HippyBridge+PerformanceAPI.h | 9 ++- .../base/bridge/HippyBridge+PerformanceAPI.mm | 80 ++++++++++++++++--- .../com/tencent/mtt/hippy/HippyRootView.java | 2 +- .../com/tencent/renderer/FrameworkProxy.java | 2 +- .../com/tencent/renderer/NativeRender.java | 2 +- .../com/tencent/renderer/NativeRenderer.java | 4 +- renderer/native/ios/renderer/HippyRootView.mm | 2 +- 15 files changed, 116 insertions(+), 47 deletions(-) diff --git a/dom/include/dom/dom_manager.h b/dom/include/dom/dom_manager.h index da57955f68e..cc145033b20 100644 --- a/dom/include/dom/dom_manager.h +++ b/dom/include/dom/dom_manager.h @@ -133,10 +133,10 @@ class DomManager : public std::enable_shared_from_this { static byte_string GetSnapShot(const std::shared_ptr& root_node); bool SetSnapShot(const std::shared_ptr& root_node, const byte_string& buffer); - void RecordDomStartTimePoint(); - void RecordDomEndTimePoint(); - inline auto GetDomStartTimePoint() { return dom_start_time_point_; } - inline auto GetDomEndTimePoint() { return dom_end_time_point_; } + void RecordDomStartTimePoint(uint32_t root_id); + void RecordDomEndTimePoint(uint32_t root_id); + inline auto GetDomStartTimePoint(uint32_t root_id) { return dom_start_time_point_[root_id]; } + inline auto GetDomEndTimePoint(uint32_t root_id) { return dom_end_time_point_[root_id]; } private: friend class DomNode; @@ -152,8 +152,8 @@ class DomManager : public std::enable_shared_from_this { std::shared_ptr task_runner_; std::shared_ptr worker_; - footstone::TimePoint dom_start_time_point_; - footstone::TimePoint dom_end_time_point_; + std::unordered_map dom_start_time_point_; + std::unordered_map dom_end_time_point_; }; } // namespace dom diff --git a/dom/src/dom/dom_manager.cc b/dom/src/dom/dom_manager.cc index 74d81826d92..2a6a9e1cdb9 100644 --- a/dom/src/dom/dom_manager.cc +++ b/dom/src/dom/dom_manager.cc @@ -272,16 +272,16 @@ bool DomManager::SetSnapShot(const std::shared_ptr& root_node, const b return true; } -void DomManager::RecordDomStartTimePoint() { - if (dom_start_time_point_.ToEpochDelta() == TimeDelta::Zero()) { - dom_start_time_point_ = footstone::TimePoint::SystemNow(); +void DomManager::RecordDomStartTimePoint(uint32_t root_id) { + if (dom_start_time_point_[root_id].ToEpochDelta() == TimeDelta::Zero()) { + dom_start_time_point_[root_id] = footstone::TimePoint::SystemNow(); } } -void DomManager::RecordDomEndTimePoint() { - if (dom_end_time_point_.ToEpochDelta() == TimeDelta::Zero() - && dom_start_time_point_.ToEpochDelta() != TimeDelta::Zero()) { - dom_end_time_point_ = footstone::TimePoint::SystemNow(); +void DomManager::RecordDomEndTimePoint(uint32_t root_id) { + if (dom_end_time_point_[root_id].ToEpochDelta() == TimeDelta::Zero() + && dom_start_time_point_[root_id].ToEpochDelta() != TimeDelta::Zero()) { + dom_end_time_point_[root_id] = footstone::TimePoint::SystemNow(); } } diff --git a/dom/src/dom/root_node.cc b/dom/src/dom/root_node.cc index eb94863ea70..7d25e3a63da 100644 --- a/dom/src/dom/root_node.cc +++ b/dom/src/dom/root_node.cc @@ -333,7 +333,7 @@ void RootNode::SyncWithRenderManager(const std::shared_ptr& rende TDF_PERF_LOG("RootNode::DoAndFlushLayout Done"); auto dom_manager = dom_manager_.lock(); if (dom_manager) { - dom_manager->RecordDomEndTimePoint(); + dom_manager->RecordDomEndTimePoint(this->GetId()); } render_manager->EndBatch(GetWeakSelf()); TDF_PERF_LOG("RootNode::SyncWithRenderManager End"); diff --git a/dom/src/dom/scene_builder.cc b/dom/src/dom/scene_builder.cc index a122f8d87d9..6f36894211c 100644 --- a/dom/src/dom/scene_builder.cc +++ b/dom/src/dom/scene_builder.cc @@ -19,9 +19,8 @@ */ #include "dom/scene_builder.h" - #include "dom/dom_listener.h" - +#include "dom/root_node.h" #include "footstone/logging.h" #include "footstone/string_view_utils.h" @@ -33,8 +32,9 @@ void SceneBuilder::Create(const std::weak_ptr& weak_dom_manager, std::vector>&& nodes, bool needSortByIndex) { auto dom_manager = weak_dom_manager.lock(); - if (dom_manager) { - dom_manager->RecordDomStartTimePoint(); + auto rootNode = root_node.lock(); + if (dom_manager && rootNode) { + dom_manager->RecordDomStartTimePoint(rootNode->GetId()); dom_manager->CreateDomNodes(root_node, std::move(nodes), needSortByIndex); } } diff --git a/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h b/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h index 56a3d914d87..43d145c927c 100644 --- a/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h +++ b/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h @@ -87,7 +87,7 @@ void SetDomManager(JNIEnv* j_env, void OnNativeInitEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong startTime, jlong endTime); -void OnFirstPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong time); +void OnFirstPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong time, jint j_root_id); void OnFirstContentfulPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong time); diff --git a/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc b/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc index 5f7011a49d3..9a62d7ce31f 100644 --- a/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc +++ b/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc @@ -112,7 +112,7 @@ REGISTER_JNI("com/openhippy/connector/JsDriver", // NOLINT(cert-err58-cpp) REGISTER_JNI("com/openhippy/connector/JsDriver", // NOLINT(cert-err58-cpp) "onFirstPaintEnd", - "(IJ)V", + "(IJI)V", OnFirstPaintEnd) REGISTER_JNI("com/openhippy/connector/JsDriver", // NOLINT(cert-err58-cpp) @@ -192,7 +192,7 @@ void OnNativeInitEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong sta } } -void OnFirstPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong time) { +void OnFirstPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong time, jint j_root_id) { auto scope = GetScope(j_scope_id); if (!scope) { return; @@ -204,7 +204,7 @@ void OnFirstPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong tim auto runner = engine->GetJsTaskRunner(); if (runner) { std::weak_ptr weak_scope = scope; - auto task = [weak_scope, time]() { + auto task = [weak_scope, time, j_root_id]() { auto scope = weak_scope.lock(); if (!scope) { return; @@ -214,10 +214,10 @@ void OnFirstPaintEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong tim return; } auto entry = scope->GetPerformance()->PerformanceNavigation("hippyInit"); - entry->SetHippyRunApplicationEnd(dom_manager->GetDomStartTimePoint()); - entry->SetHippyDomStart(dom_manager->GetDomStartTimePoint()); - entry->SetHippyDomEnd(dom_manager->GetDomEndTimePoint()); - entry->SetHippyFirstFrameStart(dom_manager->GetDomEndTimePoint()); + entry->SetHippyRunApplicationEnd(dom_manager->GetDomStartTimePoint(j_root_id)); + entry->SetHippyDomStart(dom_manager->GetDomStartTimePoint(j_root_id)); + entry->SetHippyDomEnd(dom_manager->GetDomEndTimePoint(j_root_id)); + entry->SetHippyFirstFrameStart(dom_manager->GetDomEndTimePoint(j_root_id)); entry->SetHippyFirstFrameEnd(footstone::TimePoint::FromEpochDelta(footstone::TimeDelta::FromMilliseconds(time))); }; runner->PostTask(std::move(task)); diff --git a/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java b/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java index 6e277584bcb..5cdb4d379e4 100644 --- a/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java +++ b/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java @@ -73,8 +73,8 @@ public void recordNativeInitEndTime(long startTime, long endTime) { onNativeInitEnd(mInstanceId, startTime, endTime); } - public void recordFirstPaintEndTime(long time) { - onFirstPaintEnd(mInstanceId, time); + public void recordFirstPaintEndTime(long time, int rootId) { + onFirstPaintEnd(mInstanceId, time, rootId); } public void recordFirstContentfulPaintEndTime(long time) { @@ -170,7 +170,7 @@ private native void callFunction(int instanceId, String action, NativeCallback c private native void onNativeInitEnd(int instanceId, long startTime, long endTime); - private native void onFirstPaintEnd(int instanceId, long time); + private native void onFirstPaintEnd(int instanceId, long time, int rootId); private native void onFirstContentfulPaintEnd(int instanceId, long time); diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java b/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java index 393e29fee7e..445407158aa 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/HippyEngineManagerImpl.java @@ -234,8 +234,8 @@ protected void onDestroyEngine() { } @Override - public void onFirstPaint() { - mEngineContext.getJsDriver().recordFirstPaintEndTime(System.currentTimeMillis()); + public void onFirstPaint(int rootId) { + mEngineContext.getJsDriver().recordFirstPaintEndTime(System.currentTimeMillis(), rootId)); mEngineContext.getMonitor().addPoint(TimeMonitor.MONITOR_GROUP_PAINT, TimeMonitor.MONITOR_POINT_FIRST_CONTENTFUL_PAINT); mGlobalConfigs.getEngineMonitorAdapter().onFirstPaintCompleted(mEngineContext.getComponentName()); diff --git a/framework/ios/base/bridge/HippyBridge+PerformanceAPI.h b/framework/ios/base/bridge/HippyBridge+PerformanceAPI.h index ffd18976f27..739e8e09242 100644 --- a/framework/ios/base/bridge/HippyBridge+PerformanceAPI.h +++ b/framework/ios/base/bridge/HippyBridge+PerformanceAPI.h @@ -29,11 +29,18 @@ NS_ASSUME_NONNULL_BEGIN @interface HippyBridge (PerformanceAPI) /// Update perf records of FP, DOM_START/DOM_END etc. -- (void)updatePerfRecordsOnRootContentDidAppear; +/// - Parameter rootTag: Tag of rootView +- (void)updatePerfRecordsOnRootContentDidAppear:(NSNumber *)rootTag; /// Update FCP perf record. - (void)updatePerfRecordOnFirstContentfulPaintEnd; +/// Get all perf data +- (NSDictionary *)getHippyInitPerformanceData; + +/// Get fcp perf data +- (nullable NSDictionary *)getFCPPerformanceData; + @end NS_ASSUME_NONNULL_END diff --git a/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm b/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm index 8f4b31925e2..e968f33fb8d 100644 --- a/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm +++ b/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm @@ -24,10 +24,13 @@ #import "HippyJSExecutor+Internal.h" #import "HippyLog.h" #import "driver/scope.h" +#import "footstone/string_view_utils.h" + +using namespace footstone; @implementation HippyBridge (PerformanceAPI) -- (void)updatePerfRecordsOnRootContentDidAppear { +- (void)updatePerfRecordsOnRootContentDidAppear:(NSNumber *)rootTag { std::shared_ptr scope = self.javaScriptExecutor.pScope; if (!scope) { return; @@ -39,18 +42,19 @@ - (void)updatePerfRecordsOnRootContentDidAppear { if (!entry) { return; } - entry->SetHippyRunApplicationEnd(domManager->GetDomStartTimePoint()); - entry->SetHippyDomStart(domManager->GetDomStartTimePoint()); - entry->SetHippyDomEnd(domManager->GetDomEndTimePoint()); - entry->SetHippyFirstFrameStart(domManager->GetDomEndTimePoint()); + uint32_t rootId = rootTag.unsignedIntValue; + entry->SetHippyRunApplicationEnd(domManager->GetDomStartTimePoint(rootId)); + entry->SetHippyDomStart(domManager->GetDomStartTimePoint(rootId)); + entry->SetHippyDomEnd(domManager->GetDomEndTimePoint(rootId)); + entry->SetHippyFirstFrameStart(domManager->GetDomEndTimePoint(rootId)); entry->SetHippyFirstFrameEnd(footstone::TimePoint::SystemNow()); #if HIPPY_DEBUG int64_t totalFPTime = (entry->GetHippyFirstFrameEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); - auto nativeInit = (entry->GetHippyNativeInitEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); - auto runApplication = (entry->GetHippyRunApplicationEnd() - entry->GetHippyRunApplicationStart()).ToMilliseconds(); - auto domCreate = (entry->GetHippyDomEnd() - entry->GetHippyDomStart()).ToMilliseconds(); - auto firstFrame = (entry->GetHippyFirstFrameEnd() - entry->GetHippyFirstFrameStart()).ToMilliseconds(); + int64_t nativeInit = (entry->GetHippyNativeInitEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); + int64_t runApplication = (entry->GetHippyRunApplicationEnd() - entry->GetHippyRunApplicationStart()).ToMilliseconds(); + int64_t domCreate = (entry->GetHippyDomEnd() - entry->GetHippyDomStart()).ToMilliseconds(); + int64_t firstFrame = (entry->GetHippyFirstFrameEnd() - entry->GetHippyFirstFrameStart()).ToMilliseconds(); HippyLogTrace(@"Hippy FP=%lld, detail: %lld, %lld, %lld, %lld", totalFPTime, nativeInit, runApplication, domCreate, firstFrame); #endif /* HIPPY_DEBUG */ } @@ -72,4 +76,62 @@ - (void)updatePerfRecordOnFirstContentfulPaintEnd { } } +- (NSDictionary *)getHippyInitPerformanceData { + std::shared_ptr scope = self.javaScriptExecutor.pScope; + if (!scope) { + return @{}; + } + auto domManager = scope->GetDomManager().lock(); + auto performance = scope->GetPerformance(); + if (domManager && performance) { + auto entry = performance->PerformanceNavigation(hippy::kPerfNavigationHippyInit); + if (!entry) { + return @{}; + } + + NSMutableDictionary *dic = [NSMutableDictionary dictionary]; + int64_t totalFPTime = (entry->GetHippyFirstFrameEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); + int64_t nativeInit = (entry->GetHippyNativeInitEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); + int64_t jsEngineInit = (entry->GetHippyJsEngineInitEnd() - entry->GetHippyJsEngineInitStart()).ToMilliseconds(); + int64_t runApplication = (entry->GetHippyRunApplicationEnd() - entry->GetHippyRunApplicationStart()).ToMilliseconds(); + int64_t domCreate = (entry->GetHippyDomEnd() - entry->GetHippyDomStart()).ToMilliseconds(); + int64_t firstFrame = (entry->GetHippyFirstFrameEnd() - entry->GetHippyFirstFrameStart()).ToMilliseconds(); + dic[@"0.FP"] = @(totalFPTime); + dic[@"1.NativeInit"] = @(nativeInit); + dic[@"2.JsEngineInit"] = @(jsEngineInit); + dic[@"3.RunApplication"] = @(runApplication); + dic[@"4.DomCreate"] = @(domCreate); + dic[@"5.FirstFrame"] = @(firstFrame); + + auto bundle_info_array = entry->GetBundleInfoArray(); + for (size_t i = 0; i < bundle_info_array.size(); ++i) { + auto& info = bundle_info_array[i]; + auto url = StringViewUtils::ToStdString(StringViewUtils::ConvertEncoding(info.url_, string_view::Encoding::Utf8).utf8_value()); + NSString *urlStr = [NSString stringWithCString:url.c_str() encoding:[NSString defaultCStringEncoding]]; + int64_t exeTime = (info.execute_source_end_ - info.execute_source_start_).ToMilliseconds(); + [dic setObject:@(exeTime) forKey:urlStr.lastPathComponent]; + } + return dic; + } + return @{}; +} + +- (NSDictionary *)getFCPPerformanceData { + std::shared_ptr scope = self.javaScriptExecutor.pScope; + if (!scope) { + return nil; + } + auto domManager = scope->GetDomManager().lock(); + auto performance = scope->GetPerformance(); + if (domManager && performance) { + auto entry = performance->PerformanceNavigation(hippy::kPerfNavigationHippyInit); + if (!entry) { + return nil; + } + int64_t fcpTime = (entry->GetHippyFirstContentfulPaintEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); + return @{ @"FCP" : @(fcpTime) }; + } + return nil; +} + @end diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/HippyRootView.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/HippyRootView.java index 585aa321c64..0406f170eef 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/HippyRootView.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/HippyRootView.java @@ -63,7 +63,7 @@ public void onViewAdded(View child) { firstViewAdded = true; NativeRender nativeRenderer = NativeRendererManager.getNativeRenderer(getContext()); if (nativeRenderer != null) { - nativeRenderer.onFirstPaint(); + nativeRenderer.onFirstPaint(getId()); } } } diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/FrameworkProxy.java b/renderer/native/android/src/main/java/com/tencent/renderer/FrameworkProxy.java index 2093b63c536..3db8b468ede 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/FrameworkProxy.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/FrameworkProxy.java @@ -53,7 +53,7 @@ public interface FrameworkProxy { int getEngineId(); - void onFirstPaint(); + void onFirstPaint(int rootId); void onFirstContentfulPaint(); diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/NativeRender.java b/renderer/native/android/src/main/java/com/tencent/renderer/NativeRender.java index 64dfbffe267..f4e5256f91a 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/NativeRender.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/NativeRender.java @@ -97,7 +97,7 @@ public interface NativeRender extends RenderExceptionHandler, RenderLogHandler { VirtualNode createVirtualNode(int rootId, int id, int pid, int index, @NonNull String className, @Nullable Map props); - void onFirstPaint(); + void onFirstPaint(int rootId); void onFirstContentfulPaint(); diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java b/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java index 8e97cc2b838..f7c5a81517a 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/NativeRenderer.java @@ -373,10 +373,10 @@ public View getRootView(@NonNull View view) { } @Override - public void onFirstPaint() { + public void onFirstPaint(int rootId) { FrameworkProxy frameworkProxy = getFrameworkProxy(); if (frameworkProxy != null) { - frameworkProxy.onFirstPaint(); + frameworkProxy.onFirstPaint(rootId); } } diff --git a/renderer/native/ios/renderer/HippyRootView.mm b/renderer/native/ios/renderer/HippyRootView.mm index f140a9a869f..29b4987d2ae 100644 --- a/renderer/native/ios/renderer/HippyRootView.mm +++ b/renderer/native/ios/renderer/HippyRootView.mm @@ -424,7 +424,7 @@ - (void)insertHippySubview:(UIView *)subview atIndex:(NSInteger)atIndex { if (strongSelf && !strongSelf->_contentHasAppeared) { strongSelf->_contentHasAppeared = YES; static NSString *const kHippyContentAppearCostKey = @"cost"; - [[(HippyRootView *)strongSelf.superview bridge] updatePerfRecordsOnRootContentDidAppear]; + [[(HippyRootView *)strongSelf.superview bridge] updatePerfRecordsOnRootContentDidAppear:self.hippyTag]; [[NSNotificationCenter defaultCenter] postNotificationName:HippyContentDidAppearNotification object:self.superview userInfo:@{ kHippyContentAppearCostKey : @(CACurrentMediaTime() * 1000 - strongSelf.startTimpStamp) From 0c2a5dd93a8ade1c6551bd52a6086547468c7afa Mon Sep 17 00:00:00 2001 From: wwwcg Date: Wed, 30 Oct 2024 14:19:22 +0800 Subject: [PATCH 30/52] feat(ios): waterfall component support footer view (#4098) refactor waterfall component --- docs/api/hippy-react/components.md | 3 +- docs/api/hippy-vue/external-components.md | 4 +- .../src/components/WaterfallView/index.jsx | 25 +++- .../native-demos/demo-waterfall.vue | 17 ++- .../components/native-demo/demo-waterfall.vue | 14 +- .../src/components/waterfall-view.tsx | 30 ++++- .../waterfalllist/HippyShadowWaterfallItem.h | 6 + .../HippyWaterfallItemViewManager.m | 3 + .../waterfalllist/HippyWaterfallView.h | 12 +- .../waterfalllist/HippyWaterfallView.mm | 101 +++++++++----- .../HippyWaterfallViewDataSource.h | 26 +++- .../HippyWaterfallViewDataSource.m | 126 ++++++------------ .../waterfalllist/HippyWaterfallViewManager.m | 2 + 13 files changed, 236 insertions(+), 133 deletions(-) diff --git a/docs/api/hippy-react/components.md b/docs/api/hippy-react/components.md index 1921d47a0fc..d625e1e11ed 100644 --- a/docs/api/hippy-react/components.md +++ b/docs/api/hippy-react/components.md @@ -550,7 +550,8 @@ import icon from './qb_icon_new.png'; | interItemSpacing | item 间的垂直间距 | `number` | `Android、iOS、Voltron` | | contentInset | 内容缩进 ,默认值 `{ top:0, left:0, bottom:0, right:0 }` | `Object` | `Android、iOS、Voltron` | | renderItem | 这里的入参是当前 item 的 index,在这里可以凭借 index 获取到瀑布流一个具体单元格的数据,从而决定如何渲染这个单元格。 | `(index: number) => React.ReactElement` | `Android、iOS、Voltron` | -| renderBanner | 如何渲染 Banner。 | `() => React.ReactElement` | `Android、iOS、Voltron` +| renderBanner | 如何渲染 Banner (即Header,显示在内容顶部) | `() => React.ReactElement` | `Android、iOS、Voltron` | +| renderFooter | 如何渲染 Footer(与renderBanner对应,Footer显示在内容底部) | `() => React.ReactElement` | `iOS`(3.3.2版本起支持) | | getItemStyle | 设置`WaterfallItem`容器的样式。 | `(index: number) => styleObject` | `Android、iOS、Voltron` | | getItemType | 指定一个函数,在其中返回对应条目的类型(返回Number类型的自然数,默认是0),List 将对同类型条目进行复用,所以合理的类型拆分,可以很好地提升list 性能。 | `(index: number) => number` | `Android、iOS、Voltron` | | getItemKey | 指定一个函数,在其中返回对应条目的 Key 值,详见 [React 官文](//reactjs.org/docs/lists-and-keys.html) | `(index: number) => any` | `Android、iOS、Voltron` | diff --git a/docs/api/hippy-vue/external-components.md b/docs/api/hippy-vue/external-components.md index 6c6c112713a..1ccade411be 100644 --- a/docs/api/hippy-vue/external-components.md +++ b/docs/api/hippy-vue/external-components.md @@ -280,7 +280,7 @@ export default { | columnSpacing | 瀑布流每列之前的水平间距 | `number` | `Android、iOS、Voltron` | | interItemSpacing | item 间的垂直间距 | `number` | `Android、iOS、Voltron` | | contentInset | 内容缩进 ,默认值 `{ top:0, left:0, bottom:0, right:0 }` | `Object` | `Android、iOS、Voltron` | -| containBannerView | 是否包含`bannerView`,只能有一个bannerView,`Android` 暂不支持 | `boolean` | `iOS、Voltron` | +| containBannerView | 是否包含`bannerView`,只能有一个bannerView, (`Android` 暂不支持,`iOS` 3.3.2版本起已废弃该属性,请使用`waterfall-item`组件`isHeader/isFooter`属性代替) | `boolean` | `iOS、Voltron` | | containPullHeader | 是否包含`pull-header`;`Android` 暂不支持,可以用 `ul-refresh` 组件替代 | `boolean` | `iOS、Voltron` | | containPullFooter | 是否包含 `pull-footer` | `boolean` | `Android、iOS、Voltron` | | numberOfColumns | 瀑布流列数量,Default: 2 | `number` | `Android、iOS、Voltron` | @@ -323,3 +323,5 @@ export default { | --------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -------- | | type | 指定一个函数,在其中返回对应条目的类型(返回Number类型的自然数,默认是0),List 将对同类型条目进行复用,所以合理的类型拆分,可以很好地提升 List 性能。 | `number` | `Android、iOS、Voltron` | | key | 指定一个函数,在其中返回对应条目的 Key 值,详见 [Vue 官网](//vuejs.org/v2/guide/list.html) | `string` | `Android、iOS、Voltron` | +| isHeader | 指定该Item是否为Header(即bannerView,显示在内容区顶部) | `boolean` | `iOS`(3.3.2版本起支持) | +| isFooter | 指定该Item是否为Footer(显示在内容区底部) | `boolean` | `iOS`(3.3.2版本起支持) | diff --git a/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx b/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx index 4fd51526e5b..27cac7fc5b9 100644 --- a/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx +++ b/driver/js/examples/hippy-react-demo/src/components/WaterfallView/index.jsx @@ -74,6 +74,7 @@ export default class ListExample extends React.Component { this.onHeaderPulling = this.onHeaderPulling.bind(this); this.onFooterPulling = this.onFooterPulling.bind(this); this.renderBanner = this.renderBanner.bind(this); + this.renderFooter = this.renderFooter.bind(this); this.getItemStyle = this.getItemStyle.bind(this); this.getHeaderStyle = this.getHeaderStyle.bind(this); this.onScroll = this.onScroll.bind(this); @@ -236,10 +237,10 @@ export default class ListExample extends React.Component { } onScroll(obj) { - + console.log('onScroll', obj); } - // render banner(it is not supported on Android yet) + // render banner renderBanner() { if (this.state.dataSource.length === 0) return null; return (); } + // render footer (currently only iOS support) + renderFooter() { + if (this.state.dataSource.length === 0) return null; + return ( + Footer View + ); + } + renderItem(index) { const { dataSource } = this.state; let styleUI = null; @@ -362,7 +381,9 @@ export default class ListExample extends React.Component { style={{ flex: 1 }} onScroll={this.onScroll} renderBanner={this.renderBanner} + renderFooter={this.renderFooter} renderPullHeader={this.renderPullHeader} + renderPullFooter={this.renderPullFooter} onEndReached={this.onEndReached} onFooterReleased={this.onEndReached} onHeaderReleased={this.onHeaderReleased} diff --git a/driver/js/examples/hippy-vue-demo/src/components/native-demos/demo-waterfall.vue b/driver/js/examples/hippy-vue-demo/src/components/native-demos/demo-waterfall.vue index a95b59a450a..5e2df5c8c41 100644 --- a/driver/js/examples/hippy-vue-demo/src/components/native-demos/demo-waterfall.vue +++ b/driver/js/examples/hippy-vue-demo/src/components/native-demos/demo-waterfall.vue @@ -25,17 +25,18 @@

+
+