@restforgejs/platform 5.3.5 → 5.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/bin/restforge-designer-linux +0 -0
  2. package/bin/restforge-designer.exe +0 -0
  3. package/build-info.json +2 -2
  4. package/cli/consumer-deploy.js +1 -1
  5. package/cli/consumer.js +1 -1
  6. package/cli/designer.js +3 -0
  7. package/generators/cli/fast-track.js +105 -34
  8. package/generators/lib/templates/dashboard-catalog.js +1 -1
  9. package/generators/lib/templates/db-connection-env.js +1 -1
  10. package/generators/lib/templates/dbschema-catalog.js +1 -1
  11. package/generators/lib/templates/field-validation-catalog.js +1 -1
  12. package/generators/lib/templates/mysql-template.js +1 -1
  13. package/generators/lib/templates/oracle-template.js +1 -1
  14. package/generators/lib/templates/postgres-template.js +1 -1
  15. package/generators/lib/templates/query-declarative-catalog.js +1 -1
  16. package/generators/lib/templates/sqlite-template.js +1 -1
  17. package/integrity-manifest.json +18 -18
  18. package/package.json +3 -2
  19. package/scripts/verify-integrity.js +1 -1
  20. package/server.js +1 -1
  21. package/src/components/handlers/adjust_handler.js +1 -1
  22. package/src/components/handlers/audit_handler.js +1 -1
  23. package/src/components/handlers/delete_handler.js +1 -1
  24. package/src/components/handlers/export_handler.js +1 -1
  25. package/src/components/handlers/import_handler.js +1 -1
  26. package/src/components/handlers/insert_handler.js +1 -1
  27. package/src/components/handlers/update_handler.js +1 -1
  28. package/src/components/handlers/upload_handler.js +1 -1
  29. package/src/components/handlers/workflow_handler.js +1 -1
  30. package/src/components/integrations/webhook.js +1 -1
  31. package/src/consumers/baseConsumer.js +1 -1
  32. package/src/consumers/declarativeMapper.js +1 -1
  33. package/src/consumers/handlers/apiHandler.js +1 -1
  34. package/src/consumers/handlers/consoleHandler.js +1 -1
  35. package/src/consumers/handlers/databaseHandler.js +1 -1
  36. package/src/consumers/handlers/index.js +1 -1
  37. package/src/consumers/handlers/kafkaHandler.js +1 -1
  38. package/src/consumers/index.js +1 -1
  39. package/src/consumers/messageTransformer.js +1 -1
  40. package/src/consumers/validator.js +1 -1
  41. package/src/core/db/dialect/base-dialect.js +1 -1
  42. package/src/core/db/dialect/index.js +1 -1
  43. package/src/core/db/dialect/mysql-dialect.js +1 -1
  44. package/src/core/db/dialect/oracle-dialect.js +1 -1
  45. package/src/core/db/dialect/postgres-dialect.js +1 -1
  46. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  47. package/src/core/db/flatten-helper.js +1 -1
  48. package/src/core/db/query-builder-error.js +1 -1
  49. package/src/core/db/query-builder.js +1 -1
  50. package/src/core/db/relation-helper.js +1 -1
  51. package/src/core/handlers/delete_handler.js +1 -1
  52. package/src/core/handlers/insert_handler.js +1 -1
  53. package/src/core/handlers/update_handler.js +1 -1
  54. package/src/core/models/base-model.js +1 -1
  55. package/src/core/utils/cache-manager.js +1 -1
  56. package/src/core/utils/component-engine.js +1 -1
  57. package/src/core/utils/context-builder.js +1 -1
  58. package/src/core/utils/datetime-formatter.js +1 -1
  59. package/src/core/utils/datetime-parser.js +1 -1
  60. package/src/core/utils/db.js +1 -1
  61. package/src/core/utils/logger.js +1 -1
  62. package/src/core/utils/payload-loader.js +1 -1
  63. package/src/core/utils/security-checks.js +1 -1
  64. package/src/middleware/body-options.js +1 -1
  65. package/src/middleware/cors.js +1 -1
  66. package/src/middleware/idempotency.js +1 -1
  67. package/src/middleware/rate-limiter.js +1 -1
  68. package/src/middleware/request-logger.js +1 -1
  69. package/src/middleware/security-headers.js +1 -1
  70. package/src/models/base-model-mysql.js +1 -1
  71. package/src/models/base-model-oracle.js +1 -1
  72. package/src/models/base-model-sqlite.js +1 -1
  73. package/src/models/base-model.js +1 -1
  74. package/src/pro/caching/redis-client.js +1 -1
  75. package/src/pro/caching/redis-helper.js +1 -1
  76. package/src/pro/consumers/baseConsumer.js +1 -1
  77. package/src/pro/consumers/declarativeMapper.js +1 -1
  78. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  79. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  80. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  81. package/src/pro/consumers/handlers/index.js +1 -1
  82. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  83. package/src/pro/consumers/index.js +1 -1
  84. package/src/pro/consumers/messageTransformer.js +1 -1
  85. package/src/pro/consumers/validator.js +1 -1
  86. package/src/pro/database/base-model-mysql.js +1 -1
  87. package/src/pro/database/base-model-oracle.js +1 -1
  88. package/src/pro/database/base-model-sqlite.js +1 -1
  89. package/src/pro/database/db-mysql.js +1 -1
  90. package/src/pro/database/db-oracle.js +1 -1
  91. package/src/pro/database/db-sqlite.js +1 -1
  92. package/src/pro/excel/excel-generator.js +1 -1
  93. package/src/pro/excel/excel-parser.js +1 -1
  94. package/src/pro/excel/export-service.js +1 -1
  95. package/src/pro/excel/export_handler.js +1 -1
  96. package/src/pro/excel/import-service.js +1 -1
  97. package/src/pro/excel/import-validator.js +1 -1
  98. package/src/pro/excel/import_handler.js +1 -1
  99. package/src/pro/excel/upsert-builder.js +1 -1
  100. package/src/pro/idgen/idgen-routes.js +1 -1
  101. package/src/pro/integrations/lookup-resolver.js +1 -1
  102. package/src/pro/integrations/upload-handler-v2.js +1 -1
  103. package/src/pro/integrations/upload-handler.js +1 -1
  104. package/src/pro/integrations/webhook.js +1 -1
  105. package/src/pro/locking/lock-routes.js +1 -1
  106. package/src/pro/locking/resource-lock-manager.js +1 -1
  107. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  108. package/src/pro/messaging/kafkaService.js +1 -1
  109. package/src/pro/messaging/messagehubService.js +1 -1
  110. package/src/pro/messaging/rabbitmqService.js +1 -1
  111. package/src/pro/scheduler/job-manager.js +1 -1
  112. package/src/pro/scheduler/job-routes.js +1 -1
  113. package/src/pro/scheduler/job-validator.js +1 -1
  114. package/src/pro/storage/base-storage-provider.js +1 -1
  115. package/src/pro/storage/file-metadata-helper.js +1 -1
  116. package/src/pro/storage/index.js +1 -1
  117. package/src/pro/storage/local-storage-provider.js +1 -1
  118. package/src/pro/storage/s3-storage-provider.js +1 -1
  119. package/src/pro/storage/upload-cleanup-job.js +1 -1
  120. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  121. package/src/pro/storage/upload-pending-tracker.js +1 -1
  122. package/src/pro/websocket/broadcast-helper.js +1 -1
  123. package/src/pro/websocket/index.js +1 -1
  124. package/src/pro/websocket/livesync-server.js +1 -1
  125. package/src/pro/websocket/ws-broadcaster.js +1 -1
  126. package/src/services/export-service.js +1 -1
  127. package/src/services/import-service.js +1 -1
  128. package/src/services/kafkaConsumerService.js +1 -1
  129. package/src/services/kafkaService.js +1 -1
  130. package/src/services/messagehubService.js +1 -1
  131. package/src/services/rabbitmqService.js +1 -1
  132. package/src/utils/cache-invalidation-registry.js +1 -1
  133. package/src/utils/cache-manager.js +1 -1
  134. package/src/utils/component-engine.js +1 -1
  135. package/src/utils/config-extractor.js +1 -1
  136. package/src/utils/consumerLogger.js +1 -1
  137. package/src/utils/context-builder.js +1 -1
  138. package/src/utils/dashboard-helpers.js +1 -1
  139. package/src/utils/dateHelper.js +1 -1
  140. package/src/utils/datetime-formatter.js +1 -1
  141. package/src/utils/datetime-parser.js +1 -1
  142. package/src/utils/db-bootstrap.js +1 -1
  143. package/src/utils/db-mysql.js +1 -1
  144. package/src/utils/db-oracle.js +1 -1
  145. package/src/utils/db-sqlite.js +1 -1
  146. package/src/utils/db.js +1 -1
  147. package/src/utils/demo-generator.js +1 -1
  148. package/src/utils/excel-generator.js +1 -1
  149. package/src/utils/excel-parser.js +1 -1
  150. package/src/utils/file-watcher.js +1 -1
  151. package/src/utils/id-generator.js +1 -1
  152. package/src/utils/idempotency-manager.js +1 -1
  153. package/src/utils/import-validator.js +1 -1
  154. package/src/utils/license-client.js +1 -1
  155. package/src/utils/lock-manager.js +1 -1
  156. package/src/utils/logger.js +1 -1
  157. package/src/utils/lookup-resolver.js +1 -1
  158. package/src/utils/payload-loader.js +1 -1
  159. package/src/utils/processor-response.js +1 -1
  160. package/src/utils/rabbitmq.js +1 -1
  161. package/src/utils/redis-client.js +1 -1
  162. package/src/utils/redis-helper.js +1 -1
  163. package/src/utils/request-scope.js +1 -1
  164. package/src/utils/security-checks.js +1 -1
  165. package/src/utils/service-resolver.js +1 -1
  166. package/src/utils/shutdown-coordinator.js +1 -1
  167. package/src/utils/soft-delete-dashboard-guard.js +1 -1
  168. package/src/utils/sql-table-extractor.js +1 -1
  169. package/src/utils/trusted-keys.js +1 -1
  170. package/src/utils/upload-handler.js +1 -1
  171. package/src/utils/upsert-builder.js +1 -1
  172. package/src/utils/workflow-hook-executor.js +1 -1
@@ -1 +1 @@
1
- (function(_0x3f0fa8,_0x3a53dc){const _0x76aa0d=a0_0x48ec,_0x57b800=_0x3f0fa8();while(!![]){try{const _0x43378f=-parseInt(_0x76aa0d(0x20f))/0x1*(parseInt(_0x76aa0d(0xd3))/0x2)+parseInt(_0x76aa0d(0xbe))/0x3+parseInt(_0x76aa0d(0x194))/0x4*(parseInt(_0x76aa0d(0x90))/0x5)+parseInt(_0x76aa0d(0xd7))/0x6+parseInt(_0x76aa0d(0xff))/0x7+-parseInt(_0x76aa0d(0x16d))/0x8+parseInt(_0x76aa0d(0x242))/0x9;if(_0x43378f===_0x3a53dc)break;else _0x57b800['push'](_0x57b800['shift']());}catch(_0x28e85c){_0x57b800['push'](_0x57b800['shift']());}}}(a0_0x1e46,0xa6e49));const FileUtils=require('../utils/file-utils'),{IS_DELETED_COLUMN,DELETED_AT_COLUMN,DELETED_BY_COLUMN,SOFT_DELETE_COLUMNS,isSoftDeleteEnabled}=require('../dbschema-kit/soft-delete-constants');function softDeleteVisibilityFilter(_0x354c51){const _0x390113=a0_0x48ec,_0x53bf85={'wpbGd':function(_0x55cade,_0x4969ee){return _0x55cade(_0x4969ee);},'vjuOy':'active_only','rwyXD':function(_0xfb03fd,_0x14063b){return _0xfb03fd===_0x14063b;},'TLWtJ':function(_0x2dd0de,_0x398dc0){return _0x2dd0de===_0x398dc0;},'OzMQc':_0x390113(0x215),'GltJS':_0x390113(0xc9)};if(!_0x53bf85['wpbGd'](isSoftDeleteEnabled,_0x354c51))return null;const _0x57a82f=_0x354c51['softDelete']&&_0x354c51['softDelete']['visibility']||_0x53bf85['vjuOy'];if(_0x53bf85['rwyXD'](_0x57a82f,_0x390113(0x247)))return null;return _0x53bf85['TLWtJ'](_0x57a82f,_0x53bf85['OzMQc'])?'true':_0x53bf85['GltJS'];}function assertNoFileReferenceLeftover(_0x49796c){const _0x4807c7=a0_0x48ec,_0x4b9e7c={'sKGLW':_0x4807c7(0xcd),'KjONL':function(_0x207f2a,_0x59a959){return _0x207f2a===_0x59a959;},'tHkXw':'string','oxFlz':'file:','qhNSx':function(_0x59f54,_0x182e87){return _0x59f54+_0x182e87;}},_0x1c94b0=[['datatablesQuery',_0x49796c['datatablesQuery']],[_0x4b9e7c['sKGLW'],_0x49796c[_0x4807c7(0xcd)]],['masterDetail.detailConfig.detailQuery',_0x49796c[_0x4807c7(0xc1)]&&_0x49796c[_0x4807c7(0xc1)][_0x4807c7(0x151)]&&_0x49796c[_0x4807c7(0xc1)]['detailConfig']['detailQuery']]];for(const [_0x1dce44,_0xb7f97]of _0x1c94b0){if(_0x4b9e7c['KjONL'](typeof _0xb7f97,_0x4b9e7c[_0x4807c7(0x131)])&&_0xb7f97[_0x4807c7(0x1c8)](_0x4b9e7c[_0x4807c7(0x143)]))throw new Error(_0x4b9e7c['qhNSx']('Codegen\x20invariant\x20violation:\x20'+_0x1dce44+_0x4807c7(0x113)+_0xb7f97+').\x20',_0x4807c7(0x1f5)));}}function buildValidFieldsString(_0x4199c3){const _0x3a7ccd=a0_0x48ec,_0x3b8f0e={'RDmvr':_0x3a7ccd(0x1dd)},_0x4d451b=(_0x4199c3['fieldName']||[])['slice']();if(isSoftDeleteEnabled(_0x4199c3))for(const _0x5e1f34 of SOFT_DELETE_COLUMNS){if(!_0x4d451b[_0x3a7ccd(0x8f)](_0x5e1f34))_0x4d451b[_0x3a7ccd(0xb0)](_0x5e1f34);}return _0x4d451b['map'](_0x3c11b2=>'\x27'+_0x3c11b2+'\x27')['join'](_0x3b8f0e[_0x3a7ccd(0x179)]);}function buildFormatResponseDataBody(_0x54c9af){const _0x1f6042=a0_0x48ec,_0x456d49={'keAYT':'\x20\x20\x20\x20//\x20Gunakan\x20parent\x20method\x20yang\x20sudah\x20include\x20datetime\x20formatting\x0a','skuNv':function(_0x58e0a2,_0x330201){return _0x58e0a2(_0x330201);},'fUTBk':function(_0x48b527,_0xf12c13){return _0x48b527+_0xf12c13;},'dVpzr':function(_0x3a29c1,_0x32c5f3){return _0x3a29c1+_0x32c5f3;},'qXSdW':function(_0x4ec4f1,_0x1df97f){return _0x4ec4f1+_0x1df97f;},'uOPKo':function(_0x4beec8,_0x344184){return _0x4beec8+_0x344184;},'qRSEV':'\x20\x20\x20\x20const\x20formatted\x20=\x20super.formatResponseData(data);\x0a','xDezl':_0x1f6042(0x1d2),'Veork':_0x1f6042(0x8a),'mwTCH':_0x1f6042(0x184),'yrVCc':_0x1f6042(0x1e0),'bcjUF':'\x20\x20\x20\x20return\x20formatted;'},_0x2bef8a=_0x456d49[_0x1f6042(0xe1)]+'\x20\x20\x20\x20return\x20super.formatResponseData(data);';if(!_0x456d49[_0x1f6042(0x1fc)](isSoftDeleteEnabled,_0x54c9af))return _0x2bef8a;return _0x456d49[_0x1f6042(0x168)](_0x456d49[_0x1f6042(0x144)](_0x456d49[_0x1f6042(0x144)](_0x456d49[_0x1f6042(0xac)](_0x456d49[_0x1f6042(0xac)](_0x456d49['uOPKo'](_0x456d49['keAYT']+_0x456d49[_0x1f6042(0x246)],'\x20\x20\x20\x20//\x20Soft-delete\x20middle-ground\x20(audit-parity):\x20tiga\x20kolom\x20soft-delete\x20tetap\x20di\x20validFields\x0a'),_0x1f6042(0x158)),_0x1f6042(0x20a))+_0x456d49[_0x1f6042(0x126)],_0x1f6042(0xeb)+JSON['stringify'](SOFT_DELETE_COLUMNS)+')\x20{\x0a')+_0x456d49[_0x1f6042(0x254)],_0x456d49[_0x1f6042(0x174)]),_0x456d49[_0x1f6042(0x1a1)])+_0x456d49['bcjUF'];}function buildAuditColumnsSection(_0x4c6f5d,_0x48a919){const _0x4dfc91=a0_0x48ec,_0x18a3a3={'bfKLE':_0x4dfc91(0xa1),'HNGUu':'updatedAt'};if(!(_0x4dfc91(0x173)in _0x4c6f5d))return'';const _0x542472=_0x4c6f5d['auditColumns'];if(_0x542472===![]||_0x542472===null)return'\x0a'+_0x48a919+'//\x20Tabel\x20tanpa\x20audit\x20columns:\x20disable\x20injection\x20helper\x0a'+_0x48a919+_0x4dfc91(0x23f);if(typeof _0x542472==='object'&&!Array[_0x4dfc91(0x9c)](_0x542472)){const _0x424c27=['createdAt',_0x18a3a3['bfKLE'],_0x18a3a3[_0x4dfc91(0x17b)],_0x4dfc91(0x86)],_0x3ce6a9={};_0x424c27[_0x4dfc91(0xbd)](_0x336308=>{if(_0x542472[_0x336308]!==undefined)_0x3ce6a9[_0x336308]=_0x542472[_0x336308];});const _0x459734=JSON[_0x4dfc91(0x147)](_0x3ce6a9,null,0x2)['split']('\x0a')[_0x4dfc91(0x9a)]((_0x2ffa8b,_0x394dd7)=>_0x394dd7===0x0?_0x2ffa8b:_0x48a919+_0x2ffa8b)['join']('\x0a');return'\x0a'+_0x48a919+'//\x20Custom\x20audit\x20columns\x20mapping\x20dari\x20payload\x0a'+_0x48a919+'this.auditColumns\x20=\x20'+_0x459734+';\x0a';}throw new Error('Invalid\x20auditColumns\x20value\x20for\x20'+_0x4c6f5d[_0x4dfc91(0x140)]+_0x4dfc91(0x99));}function buildSearchColumnsCode(_0x220afd){const _0x3d4e76=a0_0x48ec;if(!_0x220afd[_0x3d4e76(0x18a)]||!Array['isArray'](_0x220afd['searchColumns']))return'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20definisi\x20kolom\x20yang\x20dapat\x20dicari\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Kolom\x20yang\x20dapat\x20dicari\x0a\x20\x20\x20*/\x0a\x20\x20getSearchableColumns()\x20{\x0a\x20\x20\x20\x20return\x20'+JSON['stringify'](_0x220afd[_0x3d4e76(0x18a)],null,0x4)+';\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Build\x20search\x20WHERE\x20clause\x20berdasarkan\x20searchable\x20columns\x0a\x20\x20\x20*\x20@param\x20{string}\x20searchValue\x20-\x20Nilai\x20pencarian\x0a\x20\x20\x20*\x20@param\x20{string}\x20searchBy\x20-\x20Kolom\x20yang\x20dicari\x0a\x20\x20\x20*\x20@returns\x20{string}\x20WHERE\x20clause\x0a\x20\x20\x20*/\x0a\x20\x20buildSearchWhereClause(searchValue,\x20searchBy\x20=\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20if\x20(!searchValue\x20||\x20searchValue.trim()\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20searchableColumns\x20=\x20this.getSearchableColumns();\x0a\x20\x20\x20\x20const\x20escapedSearchValue\x20=\x20searchValue.replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20const\x20likeValue\x20=\x20`%${escapedSearchValue}%`;\x0a\x0a\x20\x20\x20\x20if\x20(searchBy\x20&&\x20searchBy\x20!==\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Cari\x20di\x20kolom\x20spesifik\x0a\x20\x20\x20\x20\x20\x20const\x20column\x20=\x20searchableColumns.find(col\x20=>\x20col.name\x20===\x20searchBy);\x0a\x20\x20\x20\x20\x20\x20if\x20(column\x20&&\x20column.searchable)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Cari\x20di\x20semua\x20kolom\x20searchable\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20searchableColumns\x0a\x20\x20\x20\x20\x20\x20.filter(col\x20=>\x20col.searchable)\x0a\x20\x20\x20\x20\x20\x20.map(col\x20=>\x20`UPPER(${col.name})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`);\x0a\x0a\x20\x20\x20\x20if\x20(conditions.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20`WHERE\x20(${conditions.join(\x27\x20OR\x20\x27)})`;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20}';}function buildFiltersCode(_0x1a9783){const _0x40a288=a0_0x48ec;if(!_0x1a9783[_0x40a288(0x1a9)]||!Array['isArray'](_0x1a9783[_0x40a288(0x1a9)]))return'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20definisi\x20filter\x20yang\x20tersedia\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Filter\x20yang\x20tersedia\x0a\x20\x20\x20*/\x0a\x20\x20getAvailableFilters()\x20{\x0a\x20\x20\x20\x20return\x20'+JSON[_0x40a288(0x147)](_0x1a9783[_0x40a288(0x1a9)],null,0x4)+_0x40a288(0xf1);}function buildDefaultScopeSQL(_0x43b2db,_0x29013c='a.'){const _0x2afadb=a0_0x48ec,_0x351489={'xuYnP':_0x2afadb(0x25a),'JgHbj':function(_0x42bbe4,_0x61b854){return _0x42bbe4===_0x61b854;},'QLmoZ':_0x2afadb(0xa2),'zHwjl':'string','cQIKh':function(_0x218095,_0x1fd251){return _0x218095===_0x1fd251;},'UKdLq':'number'};if(!_0x43b2db||typeof _0x43b2db!==_0x351489[_0x2afadb(0xad)])return'';const _0x31cc99=[];for(const [_0x282246,_0x40e46e]of Object[_0x2afadb(0x16e)](_0x43b2db)){if(_0x351489['JgHbj'](typeof _0x40e46e,_0x351489['QLmoZ']))_0x31cc99['push'](''+_0x29013c+_0x282246+'\x20=\x20'+_0x40e46e);else{if(typeof _0x40e46e===_0x351489['zHwjl'])_0x31cc99[_0x2afadb(0xb0)](''+_0x29013c+_0x282246+_0x2afadb(0x112)+_0x40e46e[_0x2afadb(0x17c)](/'/g,'\x27\x27')+'\x27');else _0x351489[_0x2afadb(0x1e8)](typeof _0x40e46e,_0x351489[_0x2afadb(0x22f)])&&_0x31cc99[_0x2afadb(0xb0)](''+_0x29013c+_0x282246+'\x20=\x20'+_0x40e46e);}}return _0x31cc99['join'](_0x2afadb(0x1eb));}function buildRequestScopeMiddleware(_0x1c73a1,_0x402eb9){const _0xebb0e3=a0_0x48ec;if(!_0x1c73a1['requestScope'])return'';const {column:_0x1921f4,source:_0x34f408,bypassRoles:_0x290116}=_0x1c73a1[_0xebb0e3(0x206)],_0x25ccbb=JSON['stringify'](_0x290116||[]),_0x590d47=(_0x402eb9||'')[_0xebb0e3(0x17c)](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x1921f4+_0xebb0e3(0x237)+_0x34f408+'\x0a//\x20Generated\x20from\x20requestScope\x20configuration\x20in\x20payload\x20JSON\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20!==\x20\x27POST\x27)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20no\x20auth\x20context\x20(endpoint\x20without\x20auth\x20middleware)\x0a\x20\x20if\x20(!req.user)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20user\x20has\x20bypass\x20role\x0a\x20\x20const\x20userRoles\x20=\x20req.user.roles\x20||\x20[];\x0a\x20\x20const\x20bypassRoles\x20=\x20'+_0x25ccbb+';\x0a\x20\x20if\x20(bypassRoles.length\x20>\x200\x20&&\x20bypassRoles.some(role\x20=>\x20userRoles.includes(role)))\x20{\x0a\x20\x20\x20\x20return\x20next();\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Read\x20scope\x20value\x20from\x20user\x20context\x0a\x20\x20const\x20scopeValue\x20=\x20'+_0x34f408+';\x0a\x20\x20if\x20(scopeValue\x20===\x20undefined\x20||\x20scopeValue\x20===\x20null)\x20{\x0a\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27Request\x20scope\x20value\x20not\x20available\x20in\x20user\x20context\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Expose\x20scope\x20info\x20for\x20route\x20handlers\x20(ownership\x20verification\x20in\x20/first,\x20/update,\x20/update-composite)\x0a\x20\x20req._requestScope\x20=\x20{\x20column:\x20\x27'+_0x1921f4+_0xebb0e3(0x1e1)+_0x1921f4+_0xebb0e3(0xa4)+_0x1921f4+_0xebb0e3(0xc6)+_0x1921f4+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE-COMPOSITE\x20/\x20UPDATE-COMPOSITE:\x20force\x20scope\x20column\x20inside\x20master\x20body.\x0a\x20\x20//\x20Master\x20is\x20wrapped\x20at\x20req.body[rootKey];\x20detail\x20rows\x20inherit\x20scope\x20transitively\x0a\x20\x20//\x20via\x20master\x20ownership\x20(no\x20direct\x20scope\x20column\x20on\x20detail\x20table).\x0a\x20\x20if\x20(endpoint\x20===\x20\x27create-composite\x27\x20||\x20endpoint\x20===\x20\x27update-composite\x27)\x20{\x0a\x20\x20\x20\x20const\x20masterBody\x20=\x20req.body[\x27'+_0x590d47+_0xebb0e3(0x10a)+_0x1921f4+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildSoftDeleteReadMiddleware(_0x16b9ee){const _0x45cac3=a0_0x48ec,_0x5f0e43=softDeleteVisibilityFilter(_0x16b9ee);if(_0x5f0e43===null)return'';const _0x8eae9=_0x16b9ee[_0x45cac3(0xd5)]&&_0x16b9ee['softDelete'][_0x45cac3(0x155)]||'active_only';return _0x45cac3(0x12a)+IS_DELETED_COLUMN+_0x45cac3(0x16f)+_0x8eae9+_0x45cac3(0x1bd)+IS_DELETED_COLUMN+'\x27,\x20value:\x20'+_0x5f0e43+_0x45cac3(0x22d);}function buildLookupOverrideCode(_0x1b7f98,_0xf9d638){const _0x24a4da=a0_0x48ec,_0x5e610b={'Fsbjz':function(_0x12bbc7,_0x5c2ed0){return _0x12bbc7+_0x5c2ed0;},'TXDly':function(_0x58a79f,_0x40bcf3){return _0x58a79f+_0x40bcf3;},'YHcGj':'WHERE\x20'},_0x2a07f4=FileUtils[_0x24a4da(0x207)](_0xf9d638[_0x24a4da(0x1b2)]||[]),_0x45253a=FileUtils[_0x24a4da(0x171)](_0x1b7f98),_0x3a2d9d=_0xf9d638[_0x24a4da(0x139)]||{'all':_0xf9d638[_0x24a4da(0x1b2)]||[]},_0x2147a8=_0xf9d638['primaryKey']||_0xf9d638[_0x24a4da(0x1b2)]&&_0xf9d638[_0x24a4da(0x1b2)][0x0]||'id',_0x49059e=_0xf9d638[_0x24a4da(0x105)]||{},_0x2ba979=_0x49059e['readableFields']||_0xf9d638['fieldName']||[],_0x229ab6=_0xf9d638['defaultScope']&&_0xf9d638['defaultScope']['lookup']?buildDefaultScopeSQL(_0xf9d638[_0x24a4da(0x228)][_0x24a4da(0x1c1)]):'',_0x304c33=((()=>{const _0x34d6dc=_0x24a4da,_0x1caad7=softDeleteVisibilityFilter(_0xf9d638);return _0x1caad7!==null?_0x5e610b[_0x34d6dc(0x1ac)](_0x5e610b['TXDly']('a.',IS_DELETED_COLUMN)+'\x20=\x20',_0x1caad7):'';})()),_0x506818=[_0x229ab6,_0x304c33]['filter'](Boolean)[_0x24a4da(0x133)]('\x20AND\x20');return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20FROM\x20clause\x20untuk\x20lookup\x20berdasarkan\x20prioritas\x20resolusi\x20sumber\x20data\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(konsisten\x20dengan\x20/read\x20dan\x20/first)\x0a\x20\x20\x20*\x20@returns\x20{string}\x20FROM\x20clause\x20dengan\x20alias\x20\x27a\x27\x0a\x20\x20\x20*/\x0a\x20\x20getLookupSource()\x20{\x0a\x20\x20\x20\x20const\x20readQuery\x20=\x20this.getReadQuery();\x0a\x20\x20\x20\x20const\x20simpleQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20if\x20(readQuery.trim()\x20!==\x20simpleQuery)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20viewName\x20atau\x20viewQuery\x20aktif\x20—\x20bungkus\x20sebagai\x20subquery\x0a\x20\x20\x20\x20\x20\x20return\x20\x27(\x27\x20+\x20readQuery\x20+\x20\x27)\x20a\x27;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20this.readSource\x20+\x20\x27\x20a\x27;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0x2a07f4+_0x24a4da(0xa3)+_0x2147a8+',\x20'+_0x2a07f4+_0x24a4da(0x1c3)+_0x2a07f4+_0x24a4da(0x1ed)+(_0x229ab6?_0x24a4da(0x1eb)+_0x229ab6:'')+(_0x304c33?_0x24a4da(0x1eb)+_0x304c33:'')+'\x20ORDER\x20BY\x20a.'+_0x2a07f4+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x2147a8+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x2a07f4+'\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupData\x20('+_0x45253a+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Dynamic\x20lookup\x20dengan\x20support\x20filtering\x20tambahan\x20dan\x20pencarian\x20multi-field\x0a\x20\x20\x20*\x20@param\x20{string}\x20search\x20-\x20Kata\x20kunci\x20pencarian\x0a\x20\x20\x20*\x20@param\x20{Object}\x20extraFilters\x20-\x20Filter\x20tambahan\x20(misal:\x20company_id)\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getLookupDataDynamic(search,\x20extraFilters\x20=\x20{})\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20custom\x20lookup\x20config\x20jika\x20ada,\x20fallback\x20ke\x20textFields\x20detection\x0a\x20\x20\x20\x20\x20\x20const\x20lookupConfig\x20=\x20'+JSON[_0x24a4da(0x147)](_0xf9d638[_0x24a4da(0x224)]||null)+_0x24a4da(0x1d7)+JSON[_0x24a4da(0x147)](_0x3a2d9d[_0x24a4da(0x216)]||[_0x2a07f4])+_0x24a4da(0x149)+(_0x229ab6?'\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0x229ab6+_0x24a4da(0xd1):'')+(_0x304c33?_0x24a4da(0x9b)+_0x304c33+_0x24a4da(0xd1):'')+_0x24a4da(0x196)+JSON['stringify'](_0x2ba979)+'.includes(key))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`a.${key}\x20=\x20$${paramIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20final\x20query\x20-\x20gunakan\x20custom\x20select\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20idField\x20=\x20lookupConfig\x20?\x20lookupConfig.idField\x20:\x20\x27'+_0x2147a8+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20textField\x20=\x20lookupConfig\x20&&\x20lookupConfig.hasCustomText\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20lookupConfig.textField\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20textFields[0];\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${idField},\x20${textField}\x20FROM\x20${this.getLookupSource()}`;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereConditions.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`\x20WHERE\x20${whereConditions.join(\x27\x20AND\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20query\x20+=\x20`\x20ORDER\x20BY\x20${lookupConfig\x20&&\x20lookupConfig.hasCustomText\x20?\x20\x272\x27\x20:\x20\x27a.\x27\x20+\x20textFields[0]}`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20DEBUG\x20DYNAMIC\x20LOOKUP\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Params:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Extra\x20filters:\x27,\x20extraFilters);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Lookup\x20config:\x27,\x20lookupConfig);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item[idField]\x20||\x20item.'+_0x2147a8+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[lookupConfig\x20&&\x20lookupConfig.hasCustomText\x20?\x20\x27display_text\x27\x20:\x20textFields[0]]\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataDynamic\x20('+_0x45253a+_0x24a4da(0x16c)+_0x2a07f4+_0x24a4da(0x1f1)+_0x2147a8+',\x20'+_0x2a07f4+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20`'+(_0x506818?'\x20WHERE\x20'+_0x506818:'')+_0x24a4da(0x214)+_0x2a07f4+_0x24a4da(0xe9)+_0x2147a8+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x2a07f4+_0x24a4da(0x226)+_0x2147a8+_0x24a4da(0x11f)+_0x2a07f4+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.'+_0x2147a8+'\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.selected\x20=\x20\x27true\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getStaticLookupData\x20('+_0x45253a+_0x24a4da(0x118)+_0x2147a8+_0x24a4da(0x1b1)+_0x2a07f4+'\x27];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Parse\x20dan\x20validasi\x20select\x20columns\x20untuk\x20support\x20SQL\x20expressions\x0a\x20\x20\x20\x20\x20\x20const\x20validTextFields\x20=\x20'+JSON[_0x24a4da(0x147)](_0x3a2d9d['textFields']||[])+_0x24a4da(0xf5)+_0x2147a8+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0x2a07f4+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x2147a8+_0x24a4da(0xa9)+_0x2a07f4+_0x24a4da(0x1c4)+(_0x229ab6?'WHERE\x20'+_0x229ab6+'\x20':'')+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Bangun\x20WHERE\x20clause\x20jika\x20ada\x20dan\x20tidak\x20kosong\x0a\x20\x20\x20\x20\x20\x20if\x20((options.where\x20&&\x20Array.isArray(options.where)\x20&&\x20options.where.length\x20>\x200)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(options.where\x20&&\x20options.where.conditions\x20&&\x20Array.isArray(options.where.conditions)\x20&&\x20options.where.conditions.length\x20>\x200))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex,\x20\x27\x27,\x20this.readableFields);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`'+(_0x229ab6?'AND\x20(':_0x5e610b['YHcGj'])+'${whereResult.sql}'+(_0x229ab6?')':'')+_0x24a4da(0x1be)+_0x2147a8+_0x24a4da(0x227)+_0x1b7f98[_0x24a4da(0x1c2)]()+'\x20LOOKUP\x20WITH\x20FILTER\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20SQL:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Parameters:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Selected\x20columns:\x27,\x20selectColumns);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Sort\x20columns:\x27,\x20options.sort_columns\x20||\x20\x27none\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Valid\x20fields\x20for\x20ordering:\x27,\x20this.validFields);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Text\x20field:\x27,\x20textField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Alias\x20field:\x27,\x20aliasField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Eksekusi\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20hasil\x20untuk\x20lookup\x20(id\x20dan\x20text)\x20-\x20gunakan\x20alias\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20textFieldName\x20=\x20aliasField\x20||\x20textField;\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x2147a8+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[textFieldName]\x20||\x20item.'+_0x2a07f4+'\x20||\x20item.name\x20||\x20item.code\x20||\x20item.description\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter\x20('+_0x45253a+_0x24a4da(0xf0);}function buildAdvancedQuerySection(_0x722914){const _0x2da8dc=a0_0x48ec,_0x48fb24=_0x722914[_0x2da8dc(0x1c6)]||{};if(Object[_0x2da8dc(0x1b5)](_0x48fb24)[_0x2da8dc(0x15e)]===0x0)return'//\x20No\x20advanced\x20queries\x20defined';return _0x2da8dc(0x250)+Object[_0x2da8dc(0x16e)](_0x48fb24)[_0x2da8dc(0x9a)](([_0x1548e2,_0x174c5e])=>_0x2da8dc(0xcf)+_0x1548e2+_0x2da8dc(0x1a2)+JSON[_0x2da8dc(0x147)](_0x174c5e))['join'](',\x0a')+'\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[queryName,\x20querySource]\x20of\x20Object.entries(queryDefinitions))\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Cek\x20apakah\x20string\x20dimulai\x20dengan\x20\x22file:\x22\x20untuk\x20menentukan\x20apakah\x20ini\x20path\x20file\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20querySource\x20===\x20\x27string\x27\x20&&\x20querySource.startsWith(\x27file:\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ambil\x20path\x20relatif\x20dari\x20querySource\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20relativePath\x20=\x20querySource.replace(\x27file:\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20filePath\x20=\x20path.join(__dirname,\x20relativePath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Attempting\x20to\x20read\x20template\x20file\x20${queryName}\x20from\x20path:\x20${filePath}`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(filePath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20fs.readFileSync(filePath,\x20\x27utf8\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20template\x20${queryName}\x20loaded\x20successfully\x20from\x20file:\x20${relativePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`SQL\x20template\x20file\x20${queryName}\x20not\x20found:\x20${filePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Jika\x20bukan\x20path\x20file,\x20gunakan\x20string\x20SQL\x20langsung\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20querySource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20template\x20${queryName}\x20loaded\x20successfully\x20from\x20SQL\x20string`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20SQL\x20template\x20${queryName}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}';}function buildQueryLoadingCode(_0x409454,_0x160766){const _0x4f41e5=a0_0x48ec,_0x1276fb={'nykFd':'${payload.tableName\x20||\x20\x22undefined_table\x22}'};if(!_0x409454)return _0x4f41e5(0xda);const _0x3833ac=_0x409454['replace'](/\$\{tableName\}/g,'${payload.tableName\x20||\x20\x22undefined_table\x22}')[_0x4f41e5(0x17c)](/\$\{this\.table\}/g,_0x1276fb['nykFd']);return'let\x20baseQuery\x20=\x20`'+_0x3833ac+_0x4f41e5(0x14c);}function buildFieldMappingCode(_0x455502){const _0x5b61d9=a0_0x48ec,_0x4edd72=_0x455502[_0x5b61d9(0x139)]||{};return _0x5b61d9(0x15a)+JSON['stringify'](_0x4edd72['textFields']||[])+',\x0a\x20\x20\x20\x20\x20\x20dateFields:\x20'+JSON['stringify'](_0x4edd72['dateFields']||[])+',\x0a\x20\x20\x20\x20\x20\x20requiredFields:\x20'+JSON['stringify'](_0x4edd72['requiredFields']||[])+_0x5b61d9(0x1b4)+(_0x4edd72['primaryTextField']||_0x5b61d9(0x107))+'\x27,\x0a\x20\x20\x20\x20\x20\x20searchableFields:\x20this.getSearchableColumns\x20?\x20this.getSearchableColumns().map(col\x20=>\x20col.name)\x20:\x20[]\x0a\x20\x20\x20\x20};\x0a\x20\x20}';}function _generateValidationConfig(_0x505b07){const _0x2ceaca=a0_0x48ec,_0x49e6d1={'CQKYL':'\x0a\x20\x20\x20\x20\x20\x20'};if(!_0x505b07||!Array['isArray'](_0x505b07)||_0x505b07[_0x2ceaca(0x15e)]===0x0)return'\x20\x20\x20\x20this.validationConfig\x20=\x20{};\x20//\x20No\x20field\x20validation\x20config\x0a';const _0x20a248=_0x505b07['map'](_0x269513=>{const _0x42c3a7=_0x2ceaca,_0x27ead1=JSON['stringify'](_0x269513[_0x42c3a7(0xf3)]||{},null,0x6)['replace'](/\n/g,_0x49e6d1[_0x42c3a7(0x12e)]);return _0x42c3a7(0x97)+_0x269513['name']+_0x42c3a7(0x22e)+_0x269513[_0x42c3a7(0x1a5)]+_0x42c3a7(0x153)+_0x27ead1+_0x42c3a7(0x114);})[_0x2ceaca(0x133)](',\x0a');return _0x2ceaca(0x1b9)+_0x20a248+'\x0a\x20\x20\x20\x20};\x0a';}function _generateValidateFieldConstraints(){const _0x656b=a0_0x48ec;return _0x656b(0xc0);}function generateCompositeMethods(_0x48c422){const _0x40fbb1=a0_0x48ec,_0x1f31f7={'oUUem':function(_0x4595b4,_0x466dc3){return _0x4595b4>_0x466dc3;},'gzepk':function(_0x2a764b,_0x43109d){return _0x2a764b>_0x43109d;},'LwJeM':function(_0x118db1,_0x3b69aa){return _0x118db1===_0x3b69aa;},'gbtRR':'generated','iVGEG':function(_0x24b59e,_0x381867){return _0x24b59e>_0x381867;},'MNdbu':'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured'},_0x193a67=_0x48c422['action']||{},_0x5dc6cd=_0x48c422[_0x40fbb1(0xc1)]&&_0x48c422['masterDetail'][_0x40fbb1(0x20b)];if(!_0x5dc6cd||!_0x193a67[_0x40fbb1(0x9f)]&&!_0x193a67['updateComposite']&&!_0x193a67[_0x40fbb1(0x1de)])return'';const _0x5b3089=_0x48c422[_0x40fbb1(0xc1)][_0x40fbb1(0x1f3)],_0x5843a1=_0x48c422[_0x40fbb1(0xc1)]['foreignKey'],_0x1cb083=_0x48c422[_0x40fbb1(0x104)]||'id';let _0x42565c='\x0a';if(_0x193a67[_0x40fbb1(0x9f)]){const _0x12ab8b=_0x48c422['masterDetail']?.[_0x40fbb1(0x151)]?.['primaryKey']||_0x5b3089['split']('.')['pop']()+_0x40fbb1(0xdf),_0x2eaee3=_0x48c422['masterDetail']?.['detailConfig']?.[_0x40fbb1(0x256)]||{},_0x12ea51=[],_0x4a5d1e=[];for(const [_0x2c40f7,_0x3f7939]of Object[_0x40fbb1(0x16e)](_0x2eaee3)){if(_0x3f7939[_0x40fbb1(0x1a5)]==='generated')_0x12ea51['push'](_0x2c40f7);else{const _0x2538f7=(_0x3f7939[_0x40fbb1(0x21c)]||'')['split']('*')['map'](_0x26660=>_0x26660['trim']());_0x4a5d1e['push']({'fieldName':_0x2c40f7,'qtyField':_0x2538f7[0x0],'priceField':_0x2538f7[0x1]});}}const _0x17099d=_0x4a5d1e[_0x40fbb1(0x9a)](_0x14cfb0=>{const _0x4d5812=_0x40fbb1;return _0x4d5812(0x22a)+_0x14cfb0[_0x4d5812(0x1b2)]+_0x4d5812(0xfd)+_0x14cfb0['qtyField']+_0x4d5812(0xab)+_0x14cfb0['priceField']+_0x4d5812(0x225)+_0x14cfb0[_0x4d5812(0x1b2)]+_0x4d5812(0xc5)+_0x14cfb0[_0x4d5812(0x23b)]+')\x20||\x200)\x20*\x20(Number(item.'+_0x14cfb0['priceField']+_0x4d5812(0x9e);})[_0x40fbb1(0x133)]('\x0a');_0x42565c+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail\x20items\x20array\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Created\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5b3089['split']('.')[_0x40fbb1(0x10e)]()+_0x40fbb1(0x1ad)+_0x48c422['tableName']+_0x40fbb1(0xfc)+_0x5b3089+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5843a1+_0x40fbb1(0x17d)+_0x5b3089+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20foreignKey\x20=\x20\x27'+_0x5843a1+_0x40fbb1(0x25e)+(_0x1f31f7['oUUem'](_0x12ea51['length'],0x0)?_0x40fbb1(0xe5)+JSON['stringify'](_0x12ea51)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x12ab8b+_0x40fbb1(0x13f)+(_0x17099d?'\x0a'+_0x17099d+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x1f31f7['gzepk'](_0x12ea51[_0x40fbb1(0x15e)],0x0)?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+_0x40fbb1(0x19f)+_0x48c422[_0x40fbb1(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5b3089+_0x40fbb1(0x8e)+_0x5843a1+_0x40fbb1(0x16b);}if(_0x193a67[_0x40fbb1(0x129)]){const _0x5e211e=_0x48c422['masterDetail']?.['detailConfig']?.[_0x40fbb1(0x104)]||_0x5b3089['split']('.')['pop']()+'_id',_0x28e395=_0x48c422['masterDetail']?.['headerCalculations']||null,_0x1b1aaa=_0x48c422[_0x40fbb1(0xc1)]?.['detailConfig']?.['autoCalculateFields']||{},_0x85b025=[],_0x5ea7c8=[];for(const [_0x3c8fcd,_0x1674bb]of Object[_0x40fbb1(0x16e)](_0x1b1aaa)){if(_0x1f31f7['LwJeM'](_0x1674bb[_0x40fbb1(0x1a5)],_0x1f31f7['gbtRR']))_0x85b025[_0x40fbb1(0xb0)](_0x3c8fcd);else{const _0x2d95f1=(_0x1674bb['formula']||'')['split']('*')['map'](_0x257f51=>_0x257f51[_0x40fbb1(0x8c)]());_0x5ea7c8['push']({'fieldName':_0x3c8fcd,'qtyField':_0x2d95f1[0x0],'priceField':_0x2d95f1[0x1]});}}const _0x28a74b=_0x5ea7c8[_0x40fbb1(0x9a)](_0x544b72=>{const _0x1b2e6a=_0x40fbb1;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x544b72['fieldName']+'\x20=\x20'+_0x544b72['qtyField']+'\x20*\x20'+_0x544b72[_0x1b2e6a(0x13d)]+_0x1b2e6a(0x225)+_0x544b72['fieldName']+'\x20=\x20(Number(item.'+_0x544b72[_0x1b2e6a(0x23b)]+')\x20||\x200)\x20*\x20(Number(item.'+_0x544b72[_0x1b2e6a(0x13d)]+')\x20||\x200);';})[_0x40fbb1(0x133)]('\x0a'),_0x8a62b5=_0x48c422[_0x40fbb1(0xc1)]?.[_0x40fbb1(0x151)]?.[_0x40fbb1(0x256)]?.[_0x40fbb1(0x164)]?.[_0x40fbb1(0x21c)]||'',_0x437912=_0x8a62b5['split']('*')['map'](_0x194189=>_0x194189['trim']()),_0x19581a=_0x48c422[_0x40fbb1(0xc1)]?.['headerCalculations']?.['total_qty']?.['source']?.['replace']('items.','')||'',_0x3fd0fd=_0x437912[0x0]||_0x19581a,_0x5d7795=_0x437912[0x1]||'unit_price';_0x42565c+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(insert/update/delete)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail_lines\x20with\x20insert/update/delete\x20arrays\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Updated\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20primary\x20key\x20value\x0a\x20\x20\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Primary\x20key\x20${this.primaryKey}\x20is\x20required\x20for\x20update`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20\x20\x20const\x20checkQuery\x20=\x20`SELECT\x20*\x20FROM\x20${this.writeSource}\x20WHERE\x20${this.primaryKey}\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20checkResult\x20=\x20await\x20client.query(checkQuery,\x20[primaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(checkResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20oldData\x20=\x20checkResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items\x20and\x20primary\x20key)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5b3089['split']('.')[_0x40fbb1(0x10e)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20update:\x20detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x48c422[_0x40fbb1(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5b3089+_0x40fbb1(0x8e)+_0x5843a1+_0x40fbb1(0x148)+_0x5b3089+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20foreignKey\x20=\x20\x27'+_0x5843a1+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x5e211e+_0x40fbb1(0x25e)+(_0x1f31f7['oUUem'](_0x85b025[_0x40fbb1(0x15e)],0x0)?'const\x20generatedFields\x20=\x20'+JSON[_0x40fbb1(0x147)](_0x85b025)+';':'')+_0x40fbb1(0xaf)+(_0x28a74b?'\x0a'+_0x28a74b+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(key\x20===\x20detailPrimaryKey)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x1f31f7[_0x40fbb1(0x1af)](_0x85b025[_0x40fbb1(0x15e)],0x0)?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+_0x40fbb1(0x189)+(_0x28a74b?'\x0a'+_0x28a74b+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x85b025['length']>0x0?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(`$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${detailTableName}\x20(${detailFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${detailPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailInsertQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Inserted\x20${insertedItems.length}\x20new\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Get\x20all\x20current\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20allItemsQuery\x20=\x20`SELECT\x20*\x20FROM\x20${detailTableName}\x20WHERE\x20${foreignKey}\x20=\x20$1\x20ORDER\x20BY\x20line_number`;\x0a\x20\x20\x20\x20\x20\x20const\x20allItemsResult\x20=\x20await\x20client.query(allItemsQuery,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20\x20\x20const\x20allItems\x20=\x20allItemsResult.rows;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Recalculate\x20header\x20totals\x20from\x20final\x20items\x0a\x20\x20\x20\x20\x20\x20'+(_0x28e395?_0x40fbb1(0x24e)+JSON['stringify'](_0x28e395)+';\x0a\x20\x20\x20\x20\x20\x20const\x20recalculatedFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20recalculatedValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20recalcPlaceholder\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(calculations.total_items)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedFields.push(`total_items\x20=\x20$${recalcPlaceholder++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(allItems.length);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(calculations.total_qty\x20&&\x20calculations.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20calculations.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20totalQty\x20=\x20allItems.reduce((sum,\x20item)\x20=>\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200),\x200);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedFields.push(`total_qty\x20=\x20$${recalcPlaceholder++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(totalQty);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20'+(_0x3fd0fd?_0x40fbb1(0x21a)+_0x3fd0fd+_0x40fbb1(0x18b)+_0x5d7795+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20sum\x20+\x20(qty\x20*\x20price);\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x200);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedFields.push(`total_amount\x20=\x20$${recalcPlaceholder++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(totalAmount);\x0a\x20\x20\x20\x20\x20\x20}':_0x1f31f7[_0x40fbb1(0xef)])+'\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(recalculatedFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20recalc\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalcPlaceholder\x20=\x20this._appendUpdateAuditColumns(recalculatedFields,\x20recalculatedValues,\x20data,\x20eventContext,\x20recalcPlaceholder);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${recalculatedFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${recalcPlaceholder}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcQuery,\x20values:\x20recalculatedValues\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcResult\x20=\x20await\x20client.query(recalcQuery,\x20recalculatedValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20Object.assign(updatedHeader,\x20recalcResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20':'')+_0x40fbb1(0x163)+_0x48c422[_0x40fbb1(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5b3089+_0x40fbb1(0x8e)+_0x5843a1+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterResult\x20=\x20await\x20ce.executeOnAfterComposite(\x27update\x27,\x20afterCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onAfterCompositeUpdate\x20failed:\x20${afterResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...updatedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20allItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20_operations:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems.length\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20updateComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}if(_0x193a67[_0x40fbb1(0x1de)]){const _0x1df7ae=_0x48c422[_0x40fbb1(0xc1)]?.['detailConfig']?.[_0x40fbb1(0xb9)]||null;let _0x2b80f7;_0x1df7ae?_0x2b80f7='const\x20detailQuery\x20=\x20`'+_0x1df7ae+'`;':_0x2b80f7='const\x20detailQuery\x20=\x20`SELECT\x20*\x20FROM\x20'+_0x5b3089+_0x40fbb1(0x116)+_0x5843a1+'\x20=\x20$1\x20ORDER\x20BY\x20line_number`;',_0x42565c+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20read\x20-\x20Read\x20header\x20with\x20detail\x20items\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Options\x20with\x20where\x20clause\x20(same\x20format\x20as\x20getData)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Records\x20with\x20detail\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20readComposite(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x0a\x20\x20\x20\x20\x20\x20if\x20(!options.where)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20let\x20whereClauseSql;\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fail-closed\x20where-field:\x20teruskan\x20error\x20terstruktur\x20apa\x20adanya.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(e.code\x20===\x20\x27INVALID_WHERE_FIELD\x27)\x20throw\x20e;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Query\x20header\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20whereClauseSql.sql;\x0a\x20\x20\x20\x20\x20\x20params\x20=\x20whereClauseSql.params;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerResults\x20=\x20await\x20db.executeQuery(headerQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(headerResults.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20each\x20header,\x20fetch\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20compositeResults\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5b3089[_0x40fbb1(0x10d)]('.')['pop']()+_0x40fbb1(0x25e)+_0x2b80f7+_0x40fbb1(0x23d);}return _0x42565c;}function generateSoftDeleteOverride(_0x485a1a){const _0x31ec88=a0_0x48ec,_0x51b0ee=_0x485a1a['primaryKey']||_0x485a1a[_0x31ec88(0x1b2)]&&_0x485a1a[_0x31ec88(0x1b2)][0x0]||'id',_0x1da563=_0x485a1a['softDelete']&&Array['isArray'](_0x485a1a[_0x31ec88(0xd5)]['reusable'])?_0x485a1a['softDelete'][_0x31ec88(0x11b)]:[];if(hasCascadeChildren(_0x485a1a))return generateSoftDeleteCascadeOverride(_0x485a1a);const _0x522b9a=Array[_0x31ec88(0x9c)](_0x485a1a[_0x31ec88(0x1b7)])?_0x485a1a['softDeleteFkChildren'][_0x31ec88(0x187)](_0x9d6895=>_0x9d6895&&_0x9d6895[_0x31ec88(0x222)]===_0x31ec88(0x1bc)&&typeof _0x9d6895['childTable']==='string'&&_0x9d6895[_0x31ec88(0x191)]&&Array[_0x31ec88(0x9c)](_0x9d6895[_0x31ec88(0xee)])&&_0x9d6895['childColumns']['length']===0x1&&typeof _0x9d6895['childColumns'][0x0]===_0x31ec88(0x198)&&typeof _0x9d6895[_0x31ec88(0x10c)]===_0x31ec88(0x198)&&_0x9d6895['parentColumn']):[],_0x24ea67=[_0x51b0ee];for(const _0x58d26b of _0x1da563){if(_0x58d26b&&_0x58d26b[_0x31ec88(0x257)]&&!_0x24ea67['includes'](_0x58d26b[_0x31ec88(0x257)]))_0x24ea67[_0x31ec88(0xb0)](_0x58d26b['field']);}for(const _0x1546f4 of _0x522b9a){if(!_0x24ea67['includes'](_0x1546f4[_0x31ec88(0x10c)]))_0x24ea67[_0x31ec88(0xb0)](_0x1546f4[_0x31ec88(0x10c)]);}const _0x3a5d27=_0x24ea67[_0x31ec88(0x133)](',\x20'),_0x201828=_0x522b9a['map']((_0x3ea401,_0x4c5878)=>{const _0x1af91a=_0x31ec88,_0x11846b=_0x3ea401['childTable'],_0x5b6320=_0x3ea401[_0x1af91a(0xee)][0x0],_0x57c3d6=_0x3ea401[_0x1af91a(0x10c)],_0x441d32=_0x3ea401[_0x1af91a(0x19b)]===!![],_0xef488b=_0x441d32?'\x20AND\x20'+IS_DELETED_COLUMN+_0x1af91a(0x81):'';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK-SD-2\x20restrict\x20#'+_0x4c5878+':\x20anak\x20\x27'+_0x11846b+'\x27.'+_0x5b6320+'\x20→\x20master.'+_0x57c3d6+_0x1af91a(0x201)+_0x441d32+_0x1af91a(0x190)+_0x57c3d6+_0x1af91a(0x1f8)+_0x11846b+'\x20WHERE\x20'+_0x5b6320+'\x20=\x20$1'+_0xef488b+_0x1af91a(0x258)+_0x11846b+_0x1af91a(0x245);})[_0x31ec88(0x133)](''),_0xccef75=_0x1da563['map'](_0x1533e3=>{const _0x1418de=_0x31ec88,_0xbd0d9e=_0x1533e3[_0x1418de(0x257)],_0x44d380=_0x1533e3['length'];return _0x1418de(0x1ae)+_0xbd0d9e+_0x1418de(0xa5)+_0x44d380+')\x20→\x20original\x20+\x20\x27##\x27\x20+\x20uuidv7()\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__orig\x20=\x20lockedRow[\x27'+_0xbd0d9e+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__orig\x20!==\x20null\x20&&\x20__orig\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__str\x20=\x20String(__orig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__str.length\x20>\x20'+_0x44d380+_0x1418de(0x233)+_0xbd0d9e+_0x1418de(0x229)+_0x44d380+_0x1418de(0xd6)+_0xbd0d9e+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(__str\x20+\x20\x27##\x27\x20+\x20uuidv7());\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x31ec88(0x133)]('');return _0x31ec88(0x1e2)+DELETED_BY_COLUMN+'\x27);\x0a\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Kunci\x20row\x20aktif\x20yang\x20cocok\x20kriteria.\x20Filter\x20is_deleted\x20=\x20FALSE\x20mencegah\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20double\x20soft-delete\x20dan,\x20bersama\x20FOR\x20UPDATE,\x20menjamin\x20satu\x20pemenang\x20saat\x20race.\x0a\x20\x20\x20\x20\x20\x20const\x20selectParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20whereBuilt\x20=\x20this.buildComplexWhereClause(criteria.where,\x20selectParams,\x201);\x0a\x20\x20\x20\x20\x20\x20const\x20lockQuery\x20=\x20\x27SELECT\x20'+_0x3a5d27+'\x20FROM\x20\x27\x20+\x20writeSource\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27\x20WHERE\x20(\x27\x20+\x20whereBuilt.sql\x20+\x20\x27)\x20AND\x20'+IS_DELETED_COLUMN+_0x31ec88(0x117)+_0x201828+_0xccef75+_0x31ec88(0x1ba)+IS_DELETED_COLUMN+_0x31ec88(0x1ee)+DELETED_AT_COLUMN+_0x31ec88(0x1ca)+DELETED_BY_COLUMN+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(deletedBy);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(lockedRow[\x27'+_0x51b0ee+_0x31ec88(0xcc)+_0x51b0ee+_0x31ec88(0x1a7);}function generateSoftDeleteCascadeOverride(_0x5060c0){const _0x3d740c=a0_0x48ec,_0x1082e5=_0x5060c0[_0x3d740c(0x18e)];return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Soft-delete\x20cascade\x20override\x20(R14\x20+\x20FK-SD-3).\x20/delete\x20men-soft-delete\x20master\x20+\x20seluruh\x0a\x20\x20\x20*\x20descendant\x20cascade\x20dalam\x20SATU\x20transaction\x20(atomic\x20all-or-nothing),\x20restrict-per-node\x20409\x20di\x0a\x20\x20\x20*\x20setiap\x20node.\x20Response\x20backward-compat\x20(master\x20depth-0).\x20updated_*\x20tidak\x20disentuh.\x0a\x20\x20\x20*\x20@param\x20{Object}\x20criteria\x20-\x20{\x20where:\x20[...]\x20}\x20mengikuti\x20format\x20/delete\x20existing\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(opsional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20{\x20success,\x20message,\x20deleted_count,\x20deleted_items\x20}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20deleteData(criteria,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0a\x0a\x20\x20\x20\x20if\x20(!criteria\x20||\x20!criteria.where)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20FK-SD-3\x20closure\x20cascade\x20(master\x20+\x20seluruh\x20descendant\x20lewat\x20edge\x20cascade\x20ke\x20anak\x0a\x20\x20\x20\x20//\x20soft-delete).\x20Map-free:\x20seluruh\x20metadata\x20descendant\x20dipersist\x20generate-time\x20di\x20RDF.\x0a\x20\x20\x20\x20const\x20__sdCascadeMeta\x20=\x20'+JSON[_0x3d740c(0x147)](_0x1082e5)+';\x0a\x0a\x20\x20\x20\x20const\x20writeSource\x20=\x20this.getTableSource(\x27write\x27);\x0a\x20\x20\x20\x20const\x20returningFields\x20=\x20this.getReturningFields();\x0a\x20\x20\x20\x20//\x20deleted_by:\x20body\x20eksplisit\x20→\x20eventContext.additionalContext.user_id\x20→\x20\x27system\x27.\x20Resolusi\x0a\x20\x20\x20\x20//\x20yang\x20SAMA\x20dipakai\x20untuk\x20master\x20DAN\x20seluruh\x20descendant\x20pada\x20cascade\x20(FK-SD-3\x20#6).\x0a\x20\x20\x20\x20const\x20deletedBy\x20=\x20this._resolveAuditUserId(criteria,\x20eventContext,\x20\x27'+DELETED_BY_COLUMN+'\x27);\x0a\x0a\x20\x20\x20\x20//\x20Kolom\x20minimum\x20untuk\x20memproses\x20sebuah\x20node:\x20pk\x20(identitas\x20visited-set/lock\x20+\x20WHERE\x20UPDATE)\x0a\x20\x20\x20\x20//\x20+\x20tiap\x20field\x20reusable\x20(baca\x20original\x20sebelum\x20mutasi)\x20+\x20parentColumn\x20tiap\x20anak\x20(nilai\x20untuk\x0a\x20\x20\x20\x20//\x20restrict-check\x20&\x20expand).\x20Dedup,\x20urutan\x20stabil.\x0a\x20\x20\x20\x20const\x20__sdSelectCols\x20=\x20(node)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20cols\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20seen\x20=\x20new\x20Set();\x0a\x20\x20\x20\x20\x20\x20const\x20add\x20=\x20(c)\x20=>\x20{\x20if\x20(c\x20&&\x20!seen.has(c))\x20{\x20seen.add(c);\x20cols.push(c);\x20}\x20};\x0a\x20\x20\x20\x20\x20\x20add(node.pk);\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20ru\x20of\x20node.reusable)\x20add(ru.field);\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20add(ch.parentColumn);\x0a\x20\x20\x20\x20\x20\x20return\x20cols.join(\x27,\x20\x27);\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Walk\x20cascade\x20rekursif\x20(worklist\x20DFS\x20+\x20visited-set\x20\x27table|pk\x27)\x20pada\x20SATU\x20client\x20→\x20atomic.\x0a\x20\x20\x20\x20//\x20Tiap\x20node:\x20(1)\x20restrict-per-node\x20409,\x20(2)\x20soft-delete\x20(mutasi\x20reusable\x20\x27##\x27+uuidv7\x20+\x0a\x20\x20\x20\x20//\x20is_deleted/deleted_at/deleted_by),\x20(3)\x20expand\x20anak\x20AKTIF\x20cascade.\x20Cycle/diamond\x20aman\x20lewat\x0a\x20\x20\x20\x20//\x20visited-set\x20+\x20filter\x20is_deleted=FALSE\x20saat\x20expand.\x20Hanya\x20baris\x20master\x20(depth-0,\x20isMaster)\x0a\x20\x20\x20\x20//\x20dikumpulkan\x20untuk\x20response\x20backward-compat.\x0a\x20\x20\x20\x20const\x20__cascadeSoftDelete\x20=\x20async\x20(client,\x20masterRows,\x20deletedBy)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20visited\x20=\x20new\x20Set();\x0a\x20\x20\x20\x20\x20\x20const\x20touched\x20=\x20new\x20Set();\x0a\x20\x20\x20\x20\x20\x20const\x20masterDeletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20work\x20=\x20masterRows.map((r)\x20=>\x20({\x20table:\x20__sdCascadeMeta.master,\x20row:\x20r,\x20isMaster:\x20true\x20}));\x0a\x20\x20\x20\x20\x20\x20while\x20(work.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20current\x20=\x20work.pop();\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20node\x20=\x20__sdCascadeMeta.nodes[current.table];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20pkVal\x20=\x20current.row[node.pk];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20visitedKey\x20=\x20current.table\x20+\x20\x27|\x27\x20+\x20pkVal;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(visited.has(visitedKey))\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20visited.add(visitedKey);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(1)\x20restrict-per-node\x20—\x20generalisasi\x20FK-SD-2\x20Phase\x2003\x20ke\x20SETIAP\x20node.\x20Anak\x20soft-delete\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x20→\x20hanya\x20row\x20AKTIF\x20(is_deleted=FALSE)\x20memblokir;\x20anak\x20non-soft-delete\x20→\x20row\x20apa\x20pun.\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ch.onDelete\x20!==\x20\x27restrict\x27)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__restrictVal\x20=\x20current.row[ch.parentColumn];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__restrictVal\x20===\x20null\x20||\x20__restrictVal\x20===\x20undefined)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__activeFilter\x20=\x20ch.childSoftDelete\x20?\x20\x27\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20FALSE\x27\x20:\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__restrictCheck\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20\x27\x20+\x20ch.childTable\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20ch.childColumn\x20+\x20\x27\x20=\x20$1\x27\x20+\x20__activeFilter\x20+\x20\x27\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__restrictVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__restrictCheck.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20restrictError\x20=\x20new\x20Error(\x22Cannot\x20delete:\x20record\x20is\x20still\x20referenced\x20by\x20\x27\x22\x20+\x20ch.childTable\x20+\x20\x22\x27\x20(onDelete:\x20restrict)\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20restrictError.statusCode\x20=\x20409;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20restrictError;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(2)\x20soft-delete\x20node:\x20mutasi\x20reusable\x20(overflow\x20guard,\x20defense\x20in\x20depth)\x20+\x20set\x20kolom\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x20soft-delete.\x20CHECK\x20konsistensi\x20terpenuhi\x20(reusable\x20termutasi\x20bersama\x20is_deleted=TRUE).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20setClauses\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20p\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20ru\x20of\x20node.reusable)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__orig\x20=\x20current.row[ru.field];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__orig\x20===\x20null\x20||\x20__orig\x20===\x20undefined)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__str\x20=\x20String(__orig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__str.length\x20>\x20ru.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27soft-delete\x20cascade:\x20column\x20\x27\x20+\x20ru.field\x20+\x20\x27\x20value\x20(\x27\x20+\x20__str.length\x20+\x20\x27\x20chars)\x20on\x20\x27\x20+\x20current.table\x20+\x20\x27\x20exceeds\x20base\x20length\x20\x27\x20+\x20ru.length\x20+\x20\x27;\x20the\x20mutation\x20suffix\x20cannot\x20be\x20appended\x20safely\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(ru.field\x20+\x20\x27\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(__str\x20+\x20\x27##\x27\x20+\x20uuidv7());\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+IS_DELETED_COLUMN+'\x20=\x20TRUE\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+DELETED_AT_COLUMN+_0x3d740c(0x1ca)+DELETED_BY_COLUMN+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(deletedBy);\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(pkVal);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Master\x20(depth-0)\x20di-UPDATE\x20ke\x20writeSource\x20(read/write\x20split-aware,\x20identik\x20jalur\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20existing)\x20+\x20RETURNING\x20untuk\x20response.\x20Descendant\x20ke\x20nama\x20tabel\x20closure\x20(qualified).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__target\x20=\x20current.isMaster\x20?\x20writeSource\x20:\x20current.table;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__returning\x20=\x20current.isMaster\x20?\x20(\x27\x20RETURNING\x20\x27\x20+\x20returningFields)\x20:\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__updateResult\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27UPDATE\x20\x27\x20+\x20__target\x20+\x20\x27\x20SET\x20\x27\x20+\x20setClauses.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20node.pk\x20+\x20\x27\x20=\x20$\x27\x20+\x20p\x20+\x20__returning,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20touched.add(current.table);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(current.isMaster\x20&&\x20__updateResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20masterDeletedItems.push(__updateResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(3)\x20expand:\x20anak\x20AKTIF\x20(is_deleted=FALSE)\x20lewat\x20edge\x20cascade\x20ke\x20anak\x20soft-delete,\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x20FOR\x20UPDATE\x20(kunci\x20sebelum\x20mutasi),\x20skip\x20parentColumn\x20NULL.\x20Enqueue\x20tiap\x20row.\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ch.onDelete\x20!==\x20\x27cascade\x27\x20||\x20ch.childSoftDelete\x20!==\x20true)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__expandVal\x20=\x20current.row[ch.parentColumn];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__expandVal\x20===\x20null\x20||\x20__expandVal\x20===\x20undefined)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__childNode\x20=\x20__sdCascadeMeta.nodes[ch.childTable];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20ORDER\x20BY\x20<childPk>\x20sebelum\x20FOR\x20UPDATE\x20→\x20urutan\x20akuisisi\x20lock\x20deterministik\x20(mitigasi\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20ringan\x20konkurensi;\x20deadlock\x20penuh\x20=\x20Phase\x2004d).\x20Hanya\x20mengubah\x20URUTAN\x20baris,\x20bukan\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20himpunan\x20hasil\x20→\x20hasil\x20cascade\x20identik.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__childRows\x20=\x20(await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20\x27\x20+\x20__sdSelectCols(__childNode)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20ch.childTable\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20ch.childColumn\x20+\x20\x27\x20=\x20$1\x20AND\x20'+IS_DELETED_COLUMN+_0x3d740c(0x123)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20FOR\x20UPDATE\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20lockResult\x20=\x20await\x20client.query(lockQuery,\x20whereBuilt.params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(lockResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tidak\x20ada\x20row\x20aktif:\x20tidak\x20ditemukan,\x20sudah\x20ter-soft-delete,\x20atau\x20kalah\x20race.\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20notFoundError\x20=\x20new\x20Error(\x27Record\x20not\x20found\x20or\x20already\x20deleted\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20notFoundError.statusCode\x20=\x20404;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20notFoundError;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Walk\x20cascade:\x20soft-delete\x20master\x20+\x20seluruh\x20descendant\x20cascade\x20dalam\x20transaksi\x20ini.\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20Restrict-per-node\x20409\x20/\x20overflow\x20→\x20throw\x20→\x20ROLLBACK\x20(atomic\x20all-or-nothing).\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20masterDeletedItems,\x20touched\x20}\x20=\x20await\x20__cascadeSoftDelete(client,\x20lockResult.rows,\x20deletedBy);\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Invalidasi\x20cache.\x20Master:\x20this.invalidateCache()\x20existing\x20(jalur\x20custom\x20tidak\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20auto-invalidate;\x20bila\x20terlewat\x20/datatables\x20&\x20/read\x20ter-cache\x20menyajikan\x20record\x20terhapus).\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20Descendant\x20lintas-tabel\x20(FK-SD-3\x20Phase\x2004c,\x20D-2-enhanced):\x20master\x20TIDAK\x20tahu\x20path\x20model\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20descendant\x20(module/endpoint\x20berasal\x20dari\x20endpoint-create,\x20bukan\x20SDF\x20closure),\x20sehingga\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20me-REPLIKASI\x20logika\x20invalidateCache()\x20untuk\x20tiap\x20tabel\x20descendant\x20tersentuh,\x20diturunkan\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20dari\x20NAMA\x20TABEL.\x20Cache\x20key\x20descendant\x20murni\x20turunan\x20tableName\x20bare\x20yang\x20dipass\x20model\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20descendant\x20ke\x20super()\x20(single-schema\x20\x27public\x27\x20Fase\x201.5,\x20terverifikasi:\x20cacheModule=\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x27default\x27);\x20closure\x20membawa\x20qualified\x20(schema.table)\x20sehingga\x20schema\x20di-strip\x20agar\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20module/endpoint\x20IDENTIK\x20dengan\x20invalidateCache()\x20descendant.\x20Post-COMMIT\x20+\x20graceful:\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20kegagalan\x20invalidasi\x20cache\x20tidak\x20membatalkan\x20soft-delete\x20(konsisten\x20BaseModel).\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x20\x20\x20\x20\x20\x20if\x20(this.cacheEnabled)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__cacheMgr\x20=\x20require(\x27@restforgejs/platform/src/utils/cache-manager\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__cacheReg\x20=\x20require(\x27@restforgejs/platform/src/utils/cache-invalidation-registry\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__prefix\x20=\x20__cacheMgr.prefix;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20__t\x20of\x20touched)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Master\x20sudah\x20di-invalidate\x20via\x20this.invalidateCache()\x20existing\x20→\x20hindari\x20dobel.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__t\x20===\x20__sdCascadeMeta.master)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Strip\x20schema\x20→\x20bentuk\x20bare\x20yang\x20dipakai\x20model\x20descendant\x20pada\x20super(tableName).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20extractCacheModule\x20atas\x20nama\x20bare\x20→\x20\x27default\x27;\x20extractCacheEndpoint\x20→\x20bare\x20itu\x20sendiri.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__bare\x20=\x20__t.indexOf(\x27.\x27)\x20>=\x200\x20?\x20__t.substring(__t.lastIndexOf(\x27.\x27)\x20+\x201)\x20:\x20__t;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__mod\x20=\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__ep\x20=\x20__bare;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20__cacheMgr.invalidatePattern(__prefix\x20+\x20__mod\x20+\x20\x27:\x27\x20+\x20__ep\x20+\x20\x27:*\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Cascade\x20processor/dashboard\x20yang\x20bergantung\x20pada\x20tabel\x20descendant\x20(registry\x20by-endpoint).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__regPatterns\x20=\x20__cacheReg.getInvalidationPatterns(__ep,\x20__prefix);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20__rp\x20of\x20__regPatterns)\x20await\x20__cacheMgr.invalidatePattern(__rp);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Graceful\x20—\x20kegagalan\x20invalidasi\x20cache\x20descendant\x20tidak\x20membatalkan\x20soft-delete.\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Successfully\x20deleted\x20\x27\x20+\x20masterDeletedItems.length\x20+\x20\x27\x20record(s)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted_count:\x20masterDeletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted_items:\x20masterDeletedItems\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}function generateDeleteMethod(_0x4ce66b){const _0x30fb88=a0_0x48ec,_0x180a15={'ZBIAK':function(_0x51f6be,_0x3d9118){return _0x51f6be(_0x3d9118);}},_0x2d7478=_0x4ce66b['action']||{},_0x4097d9=_0x4ce66b['masterDetail']&&_0x4ce66b['masterDetail']['enabled'],_0x56b4dc=_0x4ce66b['masterDetail']?.[_0x30fb88(0x219)]||![];if(!_0x2d7478[_0x30fb88(0x119)])return'';const _0xbd409c=_0x4ce66b['primaryKey']||'id';if(isSoftDeleteEnabled(_0x4ce66b))return _0x180a15[_0x30fb88(0x1df)](generateSoftDeleteOverride,_0x4ce66b);if(!_0x4097d9)return'';const _0x5e9bbe=_0x4ce66b[_0x30fb88(0xc1)][_0x30fb88(0x1f3)],_0x9883cc=_0x4ce66b[_0x30fb88(0xc1)][_0x30fb88(0x7b)];let _0x5a9059='\x0a';return _0x5a9059+=_0x30fb88(0x1e3)+(_0x56b4dc?'\x0a\x20\x20\x20\x20\x20\x20//\x20cascadeDelete\x20=\x20true:\x20DELETE\x20child\x20records\x20first,\x20then\x20header\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Deleting\x20child\x20records\x20from\x20'+_0x5e9bbe+'...\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Get\x20primary\x20key\x20value\x20untuk\x20delete\x20child\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20`SELECT\x20'+_0xbd409c+_0x30fb88(0x103)+_0xbd409c+_0x30fb88(0x146)+_0x5e9bbe+_0x30fb88(0x116)+_0x9883cc+'\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteChildResult\x20=\x20await\x20client.query(deleteChildQuery,\x20[headerPrimaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Deleted\x20${deleteChildResult.rowCount}\x20child\x20record(s)\x20from\x20'+_0x5e9bbe+_0x30fb88(0x248):'\x0a\x20\x20\x20\x20\x20\x20//\x20cascadeDelete\x20=\x20false:\x20Only\x20DELETE\x20header\x20record\x0a\x20\x20\x20\x20\x20\x20//\x20Database\x20foreign\x20key\x20constraint\x20akan\x20handle\x20validasi\x20child\x20records\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Deleting\x20header\x20record\x20(cascadeDelete\x20=\x20false)...\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderQuery\x20=\x20`DELETE\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderResult\x20=\x20await\x20client.query(deleteHeaderQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(deleteHeaderResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedData\x20=\x20deleteHeaderResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Header\x20record\x20deleted\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20')+_0x30fb88(0x1cf)+(_0x56b4dc?',\x0a\x20\x20\x20\x20\x20\x20\x20\x20deletedChildRecords:\x20deleteChildResult.rowCount':'')+'\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20deleteData:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a',_0x5a9059;}function generateSoftDeleteRestoreOverride(_0xfef180){const _0x21013e=a0_0x48ec,_0x1ad2bf={'hDmNV':_0x21013e(0x1c0)},_0x5c012a=_0xfef180['primaryKey']||_0xfef180[_0x21013e(0x1b2)]&&_0xfef180[_0x21013e(0x1b2)][0x0]||'id',_0x33dcd7=_0xfef180[_0x21013e(0xd5)]&&Array['isArray'](_0xfef180['softDelete'][_0x21013e(0x11b)])?_0xfef180['softDelete'][_0x21013e(0x11b)]:[],_0x575ace=Array['isArray'](_0xfef180[_0x21013e(0x18c)])?_0xfef180[_0x21013e(0x18c)][_0x21013e(0x187)](_0x333e83=>_0x333e83&&Array[_0x21013e(0x9c)](_0x333e83['columns'])&&_0x333e83[_0x21013e(0x235)][_0x21013e(0x15e)]>0x0&&typeof _0x333e83[_0x21013e(0x20e)]==='string'&&_0x333e83['refTable']&&Array['isArray'](_0x333e83['refColumns'])&&_0x333e83[_0x21013e(0x1b6)][_0x21013e(0x15e)]===_0x333e83[_0x21013e(0x235)]['length']):[],_0x1f26c9=[_0x5c012a];for(const _0x316321 of _0x33dcd7){if(_0x316321&&_0x316321['field']&&!_0x1f26c9[_0x21013e(0x8f)](_0x316321[_0x21013e(0x257)]))_0x1f26c9['push'](_0x316321['field']);}for(const _0x272f06 of _0x575ace){for(const _0x93181f of _0x272f06['columns']){if(_0x93181f&&!_0x1f26c9['includes'](_0x93181f))_0x1f26c9['push'](_0x93181f);}}const _0x34128d=_0x1f26c9['join'](',\x20'),_0x254207=_0x33dcd7[_0x21013e(0x9a)](_0xe37d0e=>{const _0x5f22be=_0x21013e,_0x52310f=_0xe37d0e[_0x5f22be(0x257)],_0x553906=_0xe37d0e['length'];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20reusable\x20\x27'+_0x52310f+_0x5f22be(0xa5)+_0x553906+_0x5f22be(0x251)+_0x52310f+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__cur\x20!==\x20null\x20&&\x20__cur\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__curStr\x20=\x20String(__cur);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__sepIdx\x20=\x20__curStr.lastIndexOf(\x27##\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Legacy\x20tanpa\x20\x27##\x27\x20→\x20original\x20=\x20nilai\x20apa\x20adanya\x20(strip\x20dilewati\x20di\x20bawah).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__original\x20=\x20__sepIdx\x20>=\x200\x20?\x20__curStr.substring(0,\x20__sepIdx)\x20:\x20__curStr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Konflik\x20(409):\x20original\x20kini\x20dipakai\x20record\x20aktif\x20lain\x20selain\x20row\x20ini.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__conflict\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20\x27\x20+\x20writeSource\x20+\x20\x27\x20WHERE\x20'+_0x52310f+'\x20=\x20$1\x20AND\x20'+IS_DELETED_COLUMN+_0x5f22be(0x136)+_0x5c012a+'\x20<>\x20$2\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__original,\x20lockedRow[\x27'+_0x5c012a+'\x27]]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__conflict.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20conflictError\x20=\x20new\x20Error(\x22Cannot\x20restore:\x20\x27'+_0x52310f+_0x5f22be(0xe4)+_0x52310f+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(__original);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x21013e(0x133)](''),_0x40b4ca=_0x575ace[_0x21013e(0x9a)]((_0x5f4e0e,_0x44eff7)=>{const _0x1e9c64=_0x21013e,_0x25d679=_0x5f4e0e['parentSoftDelete']===!![],_0x3ce8f8=_0x5f4e0e['refTable'],_0x213964=_0x5f4e0e[_0x1e9c64(0x235)][_0x1e9c64(0x9a)](_0x5638ab=>'lockedRow[\x27'+_0x5638ab+'\x27]')['join'](',\x20'),_0x2ba273=_0x5f4e0e['refColumns'][_0x1e9c64(0x9a)]((_0x5ec224,_0x249877)=>_0x5ec224+_0x1e9c64(0x1c9)+(_0x249877+0x1))[_0x1e9c64(0x133)](_0x1e9c64(0x1eb)),_0xc47f07=_0x25d679?'\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20FALSE':'',_0x495586=_0x25d679?_0x1e9c64(0x188):'missing';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK\x20#'+_0x44eff7+'\x20→\x20'+_0x3ce8f8+_0x1e9c64(0x11a)+_0x25d679+_0x1e9c64(0xea)+(_0x25d679?'aktif':_0x1ad2bf[_0x1e9c64(0x232)])+_0x1e9c64(0x1ec)+_0x213964+_0x1e9c64(0x1ea)+_0x3ce8f8+'\x20WHERE\x20'+_0x2ba273+_0xc47f07+_0x1e9c64(0x177)+_0x3ce8f8+'\x27\x20is\x20'+_0x495586+'\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fkError.statusCode\x20=\x20422;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20fkError;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x21013e(0x133)]('');return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Soft-delete\x20restore\x20override\x20(R20).\x20/restore\x20membalik\x20soft\x20delete\x20secara\x20atomic.\x0a\x20\x20\x20*\x20Atomic\x20(satu\x20transaction):\x20SELECT\x20FOR\x20UPDATE\x20row\x20terhapus\x20(is_deleted=TRUE)\x20→\x20strip\x20suffix\x0a\x20\x20\x20*\x20reusable\x20+\x20konflik\x20409\x20+\x20FK\x20422\x20→\x20UPDATE\x20reset\x20is_deleted/deleted_at/deleted_by\x20→\x20COMMIT\x20→\x0a\x20\x20\x20*\x20invalidateCache.\x20updated_*\x20tidak\x20disentuh.\x0a\x20\x20\x20*\x20@param\x20{Object}\x20criteria\x20-\x20{\x20where:\x20[...]\x20}\x20mengikuti\x20format\x20/delete\x20existing\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(opsional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20{\x20success,\x20message,\x20restored_count,\x20restored_items\x20}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20restoreData(criteria,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20if\x20(!criteria\x20||\x20!criteria.where)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20writeSource\x20=\x20this.getTableSource(\x27write\x27);\x0a\x20\x20\x20\x20const\x20returningFields\x20=\x20this.getReturningFields();\x0a\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Kunci\x20row\x20terhapus\x20yang\x20cocok\x20kriteria.\x20Filter\x20is_deleted\x20=\x20TRUE\x20memastikan\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20hanya\x20record\x20yang\x20benar-benar\x20ter-soft-delete\x20yang\x20dipulihkan;\x20FOR\x20UPDATE\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20menjamin\x20satu\x20pemenang\x20saat\x20restore\x20bersamaan.\x0a\x20\x20\x20\x20\x20\x20const\x20selectParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20whereBuilt\x20=\x20this.buildComplexWhereClause(criteria.where,\x20selectParams,\x201);\x0a\x20\x20\x20\x20\x20\x20const\x20lockQuery\x20=\x20\x27SELECT\x20'+_0x34128d+_0x21013e(0xc8)+IS_DELETED_COLUMN+'\x20=\x20TRUE\x20FOR\x20UPDATE\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20lockResult\x20=\x20await\x20client.query(lockQuery,\x20whereBuilt.params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(lockResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tidak\x20ada\x20row\x20terhapus:\x20tidak\x20ditemukan,\x20atau\x20record\x20aktif\x20(bukan\x20terhapus).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20notFoundError\x20=\x20new\x20Error(\x27Record\x20not\x20found\x20or\x20not\x20deleted\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20notFoundError.statusCode\x20=\x20404;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20notFoundError;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Restore\x20tiap\x20row\x20terhapus\x20(strip\x20suffix\x20→\x20konflik\x20→\x20FK\x20→\x20reset).\x0a\x20\x20\x20\x20\x20\x20const\x20restoredItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20lockedRow\x20of\x20lockResult.rows)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20setClauses\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20p\x20=\x201;\x0a'+_0x254207+_0x40b4ca+_0x21013e(0x1a0)+IS_DELETED_COLUMN+_0x21013e(0x13b)+DELETED_AT_COLUMN+_0x21013e(0x234)+DELETED_BY_COLUMN+_0x21013e(0x241)+_0x5c012a+_0x21013e(0xcc)+_0x5c012a+'\x20=\x20$\x27\x20+\x20p\x20+\x20\x27\x20RETURNING\x20\x27\x20+\x20returningFields;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateResult\x20=\x20await\x20client.query(updateQuery,\x20updateParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(updateResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20restoredItems.push(updateResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Invalidate\x20cache\x20setelah\x20COMMIT\x20(jalur\x20custom\x20wajib\x20eksplisit,\x20sama\x20seperti\x20R14).\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Successfully\x20restored\x20\x27\x20+\x20restoredItems.length\x20+\x20\x27\x20record(s)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20restored_count:\x20restoredItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20restored_items:\x20restoredItems\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}function generateRestoreMethod(_0x5171e0){const _0x3e796c=a0_0x48ec,_0x164c85={'OSNPF':function(_0x97b93f,_0x466e23){return _0x97b93f(_0x466e23);}},_0x2e66bc=_0x5171e0[_0x3e796c(0x154)]||{};if(!_0x2e66bc[_0x3e796c(0xb8)]||!_0x164c85[_0x3e796c(0xb4)](isSoftDeleteEnabled,_0x5171e0))return'';return generateSoftDeleteRestoreOverride(_0x5171e0);}function hasSoftDeleteFkParents(_0x5f24ab){const _0x38e6fc=a0_0x48ec;return Array[_0x38e6fc(0x9c)](_0x5f24ab[_0x38e6fc(0x16a)])&&_0x5f24ab[_0x38e6fc(0x16a)][_0x38e6fc(0x15e)]>0x0;}function generateSoftDeleteFkParentsCheck(_0x37a7fa){const _0x3d6e42=a0_0x48ec;if(!hasSoftDeleteFkParents(_0x37a7fa))return'';const _0xffc492=_0x37a7fa[_0x3d6e42(0x16a)]['map']((_0x14b904,_0x2261eb)=>{const _0x34e626=_0x3d6e42,_0x409c90=_0x14b904[_0x34e626(0x235)][0x0],_0xf05c85=_0x14b904['refTable'],_0x2b2470=_0x14b904[_0x34e626(0x1b6)][0x0];return _0x34e626(0xec)+_0x2261eb+'\x20\x27'+_0x409c90+'\x27\x20→\x20'+_0xf05c85+'.'+_0x2b2470+_0x34e626(0xca)+_0x409c90+_0x34e626(0xae)+_0xf05c85+_0x34e626(0x116)+_0x2b2470+_0x34e626(0x1fa)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__fkVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkRes.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__fkErr\x20=\x20new\x20Error(\x22Cannot\x20\x22\x20+\x20operation\x20+\x20\x22:\x20referenced\x20parent\x20record\x20in\x20\x27'+_0xf05c85+'\x27\x20is\x20missing\x20or\x20soft-deleted\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20__fkErr.statusCode\x20=\x20422;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20__fkErr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x3d6e42(0x133)]('');return _0x3d6e42(0x1bb)+_0xffc492+'\x0a\x20\x20}\x0a';}function createPostgresModelTemplate(_0x5e2737,_0x40ecd6,_0x52be2e){const _0x47bd57=a0_0x48ec,_0x5673ce={'gUKFg':function(_0x5063bb,_0x1c056b){return _0x5063bb(_0x1c056b);},'BamoK':function(_0x461e03,_0x3e1e07){return _0x461e03+_0x3e1e07;},'urQEq':'\x20WHERE\x20','tmpCA':_0x47bd57(0xfd),'jOOQr':',\x0a\x20\x20\x20\x20\x20\x20','NkaNG':function(_0x303cee,_0x201534){return _0x303cee(_0x201534);},'SZEJY':function(_0xed9943,_0xd310cd){return _0xed9943(_0xd310cd);},'ozbNw':_0x47bd57(0x23a),'rHBYv':'[\x27name\x27,\x20\x27nama\x27,\x20\x27code\x27,\x20\x27kode\x27,\x20\x27all\x27]','jtXYk':function(_0x428e5e,_0x19c5f3){return _0x428e5e>_0x19c5f3;},'dSmGU':_0x47bd57(0x82),'pIxTU':_0x47bd57(0xcd),'bKuPb':function(_0x257b35,_0x36bed3){return _0x257b35+_0x36bed3;},'cZAnx':function(_0x40aadc,_0x282867){return _0x40aadc(_0x282867);}};assertNoFileReferenceLeftover(_0x52be2e);const _0x5ec2be=FileUtils[_0x47bd57(0x171)](_0x40ecd6),_0x49704b=new Date()['toISOString']()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x4ae1d2=_0x5673ce[_0x47bd57(0x19e)](buildValidFieldsString,_0x52be2e),_0x27f567=_0x52be2e['_fieldProjections']||{},_0x5cde83=(_0x52be2e[_0x47bd57(0x1b2)]||[])['map'](_0x4b4fae=>'\x27'+_0x4b4fae+'\x27')[_0x47bd57(0x133)](_0x5673ce[_0x47bd57(0x1f0)]),_0x3e9434=(_0x27f567['schemaFields']||_0x52be2e['fieldName']||[])[_0x47bd57(0x9a)](_0x5392a1=>'\x27'+_0x5392a1+'\x27')['join'](_0x5673ce[_0x47bd57(0x1f0)]),_0x26905b=(_0x27f567[_0x47bd57(0xc7)]||_0x52be2e['fieldName']||[])['map'](_0x3e11e8=>'\x27'+_0x3e11e8+'\x27')[_0x47bd57(0x133)](_0x47bd57(0x1dd)),_0x2e6055=(_0x27f567['datatablesFields']||_0x27f567['schemaFields']||_0x52be2e['fieldName']||[])['map'](_0x3c614f=>'\x27'+_0x3c614f+'\x27')['join'](_0x5673ce[_0x47bd57(0x1f0)]),_0x367206=buildSearchColumnsCode(_0x52be2e),_0x591637=_0x5673ce[_0x47bd57(0xf4)](buildFiltersCode,_0x52be2e),_0x22c1c0=buildLookupOverrideCode(_0x40ecd6,_0x52be2e),_0x14ffb4=buildAdvancedQuerySection(_0x52be2e),_0x4e6172=_0x5673ce['gUKFg'](buildFieldMappingCode,_0x52be2e),_0x1e7340=buildAuditColumnsSection(_0x52be2e,_0x47bd57(0x212)),_0x4fe304=_0x5673ce[_0x47bd57(0x161)](buildFormatResponseDataBody,_0x52be2e),_0x12becb=isSoftDeleteEnabled(_0x52be2e)?_0x47bd57(0x15b)+JSON[_0x47bd57(0x147)](SOFT_DELETE_COLUMNS)+')\x20delete\x20__r[__sdCol];\x20return\x20__r;\x20})':_0x5673ce['ozbNw'],_0x245121=_0x52be2e['defaultScope']&&_0x52be2e[_0x47bd57(0x228)][_0x47bd57(0x132)]?buildDefaultScopeSQL(_0x52be2e[_0x47bd57(0x228)]['read'],''):'',_0x13d8a4=((()=>{const _0x1b4add=_0x47bd57,_0x11844d=_0x5673ce[_0x1b4add(0x19e)](softDeleteVisibilityFilter,_0x52be2e);return _0x11844d!==null?_0x5673ce['BamoK'](_0x5673ce[_0x1b4add(0xc3)]+IS_DELETED_COLUMN+_0x5673ce['tmpCA'],_0x11844d):'';})()),_0x493dbd=_0x52be2e[_0x47bd57(0x92)]||_0x52be2e[_0x47bd57(0x140)],_0x34a256=_0x52be2e['tableName'];return'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a//\x20AdvancedFilterHelper\x20dihapus\x20—\x20semua\x20filtering\x20ditangani\x20oleh\x20buildObjectFilterClause\x20dan\x20buildComplexWhereClause\x0a\x0a/**\x0a\x20*\x20'+_0x5ec2be+'\x20Model\x20-\x20Auto-generated\x20on\x20'+_0x49704b+_0x47bd57(0x1e4)+_0x40ecd6+_0x47bd57(0x93)+_0x52be2e[_0x47bd57(0x140)]+(_0x52be2e[_0x47bd57(0x92)]?'\x0a\x20*\x20View:\x20'+_0x52be2e['viewName']:'')+'\x0a\x20*\x20Fields:\x20'+(_0x52be2e[_0x47bd57(0x1b2)]?_0x52be2e[_0x47bd57(0x1b2)][_0x47bd57(0x15e)]:0x0)+'\x20fields\x0a\x20*\x20Database:\x20PostgreSQL\x0a\x20*/\x0aclass\x20'+_0x5ec2be+'Model\x20extends\x20BaseModel\x20{\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Constructor\x0a\x20\x20\x20*/\x0a\x20\x20constructor()\x20{\x0a\x20\x20\x20\x20//\x20Definisikan\x20validFields\x20-\x20semua\x20field\x20yang\x20valid\x20untuk\x20tabel\x20'+_0x40ecd6+'\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x4ae1d2+'\x0a\x20\x20\x20\x20];\x0a\x20\x20\x20\x20const\x20schemaFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x3e9434+'\x0a\x20\x20\x20\x20];\x0a\x20\x20\x20\x20const\x20readableFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x26905b+_0x47bd57(0x213)+_0x2e6055+_0x47bd57(0x169)+(_0x52be2e[_0x47bd57(0xd2)]?JSON['stringify'](_0x52be2e['datatablesWhere']):_0x5673ce[_0x47bd57(0x106)])+';\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20constructor\x20parent\x20dengan\x20nama\x20tabel,\x20validFields,\x20datatablesWhere,\x20dan\x20proyeksi\x20whitelist\x0a\x20\x20\x20\x20super(\x27'+_0x52be2e['tableName']+_0x47bd57(0x181)+(_0x52be2e[_0x47bd57(0x104)]||_0x52be2e[_0x47bd57(0x1b2)]&&_0x52be2e[_0x47bd57(0x1b2)][0x0]||'id')+_0x47bd57(0xb2)+_0x493dbd+'\x27;\x0a\x20\x20\x20\x20this.readSource\x20=\x20\x27'+_0x493dbd+_0x47bd57(0xe7)+_0x34a256+_0x47bd57(0x1b0)+_0x1e7340+_0x47bd57(0x170)+!!_0x52be2e[_0x47bd57(0xcd)]+';\x0a\x20\x20\x20\x20this.hasExportQuery\x20=\x20'+!!_0x52be2e[_0x47bd57(0x18d)]+';\x0a\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20this.advancedQueryTemplates\x20=\x20this.loadAdvancedQueryTemplates();\x0a\x20\x20\x20\x20'+(_0x52be2e['dateTimeFields']&&_0x5673ce[_0x47bd57(0x14e)](Object[_0x47bd57(0x1b5)](_0x52be2e[_0x47bd57(0x14a)])['length'],0x0)?_0x47bd57(0x192)+JSON['stringify'](_0x52be2e[_0x47bd57(0x14a)],null,0x6)+';\x0a\x20\x20\x20\x20':'')+(_0x52be2e[_0x47bd57(0x157)]&&_0x52be2e[_0x47bd57(0x157)][_0x47bd57(0x18f)]?'\x0a\x20\x20\x20\x20//\x20File\x20upload\x20fields\x20(JSONB\x20columns)\x0a\x20\x20\x20\x20this.fileFields\x20=\x20'+JSON['stringify'](Object['keys'](_0x52be2e[_0x47bd57(0x157)]['fields']))+_0x47bd57(0x1d5):'')+'\x0a'+_generateValidationConfig(_0x52be2e['fieldValidation'])+'\x0a\x20\x20\x20\x20//\x20Model\x20metadata\x0a\x20\x20\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20endpointName:\x20\x27'+_0x40ecd6+_0x47bd57(0xbf)+_0x5e2737+_0x47bd57(0x17e)+_0x52be2e[_0x47bd57(0x140)]+_0x47bd57(0x98)+_0x493dbd+'\x27,\x0a\x20\x20\x20\x20\x20\x20fieldCount:\x20'+(_0x52be2e[_0x47bd57(0x1b2)]?_0x52be2e['fieldName'][_0x47bd57(0x15e)]:0x0)+_0x47bd57(0xf6)+_0x49704b+_0x47bd57(0xd9)+JSON['stringify'](_0x52be2e[_0x47bd57(0x176)]?.['features']||[])+'\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Load\x20advanced\x20query\x20templates\x20dari\x20file\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Templates\x20SQL\x20untuk\x20advanced\x20queries\x0a\x20\x20\x20*/\x0a\x20\x20loadAdvancedQueryTemplates()\x20{\x0a\x20\x20\x20\x20const\x20templates\x20=\x20{};\x0a\x20\x20\x20\x20'+_0x14ffb4+_0x47bd57(0x1ff)+_0x40ecd6+_0x47bd57(0xf7)+_0x40ecd6+_0x47bd57(0x223)+buildQueryLoadingCode(_0x52be2e['datatablesQuery'],_0x5673ce['dSmGU'])+'\x0a\x0a\x20\x20\x20\x20//\x20Replace\x20any\x20remaining\x20placeholders\x20-\x20gunakan\x20readSource\x20untuk\x20operasi\x20read\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${tableName}/g,\x20this.readSource);\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${this.table}/g,\x20this.readSource);\x0a\x0a\x20\x20\x20\x20return\x20baseQuery;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20->\x20viewQuery\x20->\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20/read\x0a\x20\x20\x20*/\x0a\x20\x20getReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Priority\x201:\x20viewName\x20(real\x20database\x20view)\x0a\x20\x20\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20\x20\x20}\x0a'+(_0x52be2e['viewQuery']?_0x47bd57(0x25d)+buildQueryLoadingCode(_0x52be2e[_0x47bd57(0xcd)],_0x5673ce['pIxTU'])+_0x47bd57(0xe8):'\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20readSource\x20langsung\x20(semua\x20kolom\x20tersedia)\x0a\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;')+_0x47bd57(0x218)+_0x13d8a4+'\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource'+(_0x13d8a4?_0x47bd57(0x199)+_0x13d8a4+'\x27':'')+_0x47bd57(0x240)+(_0x245121?'WHERE\x20'+_0x245121:'')+_0x47bd57(0x239)+(_0x245121?_0x47bd57(0x96):_0x47bd57(0x142))+_0x47bd57(0xbb)+_0x13d8a4+_0x47bd57(0x1b3)+(_0x13d8a4?_0x5673ce['bKuPb']('\x20+\x20\x27'+_0x13d8a4,'\x27'):'')+';\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20(jika\x20ada\x20where/search)\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Build\x20ORDER\x20BY\x20clause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(sort_columns,\x20this.readableFields);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Build\x20LIMIT\x20dan\x20OFFSET\x20clause\x20(kondisional\x20berdasarkan\x20mode)\x0a\x20\x20\x20\x20\x20\x20let\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${offset}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${limit}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20untuk\x20data\x20(subquery\x20wrapping\x20untuk\x20JOIN/CTE)\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(`List\x20SQL\x20Query:\x20${query}`);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27List\x20Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20'+_0x12becb+_0x47bd57(0x91)+_0x367206+'\x0a\x0a'+_0x591637+'\x0a\x0a'+_0x22c1c0+'\x0a\x0a'+_0x4e6172+'\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20formatResponseData\x20untuk\x20'+_0x40ecd6+'\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20dari\x20database\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Data\x20yang\x20sudah\x20diformat\x20untuk\x20response\x20'+_0x40ecd6+_0x47bd57(0x12c)+_0x4fe304+_0x47bd57(0x24b)+_generateValidateFieldConstraints()+'\x0a\x20\x20'+_0x5673ce[_0x47bd57(0x137)](generateCompositeMethods,_0x52be2e)+generateDeleteMethod(_0x52be2e)+generateRestoreMethod(_0x52be2e)+_0x5673ce['SZEJY'](generateSoftDeleteFkParentsCheck,_0x52be2e)+'\x0a}\x0a\x0a//\x20Export\x20singleton\x20instance\x0amodule.exports\x20=\x20new\x20'+_0x5ec2be+'Model();';}function getEnabledActions(_0x4e9ef2){const _0x573f37=a0_0x48ec,_0x55e00c={'iUvXh':function(_0x1a9ba5,_0x56d2bf){return _0x1a9ba5!==_0x56d2bf;}};if(!_0x4e9ef2[_0x573f37(0x154)]||_0x55e00c['iUvXh'](typeof _0x4e9ef2[_0x573f37(0x154)],'object'))return[];return Object[_0x573f37(0x16e)](_0x4e9ef2['action'])[_0x573f37(0x187)](([,_0x3a8113])=>_0x3a8113)[_0x573f37(0x9a)](([_0x168c6b])=>_0x168c6b);}function buildEndpointFunctions(_0x161b25,_0x52707a,_0x1a134c,_0x324dea,_0x443dfe,_0x339752=null,_0x38b892=![]){const _0x94e8d2=a0_0x48ec,_0x30d09d={'DcIYM':function(_0x123f50,_0x140de5,_0x88b130,_0x547964,_0x4357f0){return _0x123f50(_0x140de5,_0x88b130,_0x547964,_0x4357f0);},'mWPyC':function(_0x118b02,_0x8e8193,_0x232249,_0x23f1fc,_0x3a4471,_0x5c890a){return _0x118b02(_0x8e8193,_0x232249,_0x23f1fc,_0x3a4471,_0x5c890a);},'kfqTO':function(_0x1c7aa5,_0x370f79){return _0x1c7aa5(_0x370f79);},'whymO':function(_0x18185d,_0x4ba515){return _0x18185d===_0x4ba515;}},_0x492e1a=_0x1a134c[_0x94e8d2(0x154)]||{},_0x27f562=getEnabledActions(_0x1a134c);let _0xa19e6a='';if(!_0x339752){const _0x2a8677=FileUtils[_0x94e8d2(0x1d8)](_0x52707a);_0x339752=_0x2a8677+'Model';}return _0x492e1a[_0x94e8d2(0xdd)]&&(_0xa19e6a+=_0x30d09d['DcIYM'](generateDatatablesFunction,_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a[_0x94e8d2(0x101)]&&(_0xa19e6a+=generateCreateFunction(_0x161b25,_0x52707a,_0x1a134c,_0x339752,_0x38b892)),_0x492e1a[_0x94e8d2(0x109)]&&(_0xa19e6a+=generateUpdateFunction(_0x161b25,_0x52707a,_0x1a134c,_0x339752,_0x38b892)),_0x492e1a['adjust']&&(_0xa19e6a+=generateAdjustFunction(_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a[_0x94e8d2(0x7c)]&&(_0xa19e6a+=_0x30d09d['DcIYM'](generateAggregateFunction,_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a[_0x94e8d2(0x119)]&&(_0xa19e6a+=_0x30d09d['mWPyC'](generateDeleteFunction,_0x161b25,_0x52707a,_0x1a134c,_0x339752,_0x38b892)),_0x492e1a[_0x94e8d2(0xb8)]&&_0x30d09d['kfqTO'](isSoftDeleteEnabled,_0x1a134c)&&(_0xa19e6a+=_0x30d09d[_0x94e8d2(0xb3)](generateRestoreFunction,_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a['first']&&(_0xa19e6a+=generateFirstFunction(_0x161b25,_0x52707a,_0x1a134c,_0x324dea,_0x443dfe,_0x339752)),_0x492e1a[_0x94e8d2(0x1c1)]&&(_0xa19e6a+=generateLookupFunction(_0x161b25,_0x52707a,_0x1a134c,_0x324dea,_0x443dfe,_0x339752)),_0x492e1a[_0x94e8d2(0x132)]&&(_0xa19e6a+=generateReadFunction(_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a['createComposite']&&(_0xa19e6a+=_0x30d09d[_0x94e8d2(0xb3)](generateCreateCompositeFunction,_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a['updateComposite']&&(_0xa19e6a+=generateUpdateCompositeFunction(_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a[_0x94e8d2(0x1de)]&&(_0xa19e6a+=_0x30d09d[_0x94e8d2(0xb3)](generateReadCompositeFunction,_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x492e1a[_0x94e8d2(0x13e)]&&(_0xa19e6a+=generateWorkflowFunction(_0x161b25,_0x52707a,_0x1a134c,_0x339752)),_0x30d09d['whymO'](_0x27f562['length'],0x0)&&(_0xa19e6a+=_0x94e8d2(0x17a)),_0xa19e6a;}function generateDatatablesFunction(_0x4dea6a,_0x5a91d1,_0x319506,_0x8c96eb=null){const _0x273c17=a0_0x48ec;if(!_0x8c96eb){const _0x149731=FileUtils[_0x273c17(0x1d8)](_0x5a91d1);_0x8c96eb=_0x149731+_0x273c17(0x180);}return _0x273c17(0x205)+_0x4dea6a+'/'+_0x5a91d1+_0x273c17(0xbc)+_0x5a91d1+'/datatables:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Extract\x20parameters\x20dari\x20request\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20req.body.search?.value\x20||\x20req.body.searchValue\x20||\x20req.body.search_value\x20||\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20req.body.searchBy\x20||\x20req.body.search_by\x20||\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage:\x20parseInt(req.body.length\x20||\x20req.body.pagination?.perpage\x20||\x2010,\x2010),\x0a\x20\x20\x20\x20\x20\x20start:\x20parseInt(req.body.start\x20||\x200,\x2010),\x0a\x20\x20\x20\x20\x20\x20draw:\x20req.body.draw\x20||\x20\x271\x27\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20sort_columns\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20options.sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Pass\x20format\x20DataTables\x20parameters\x20jika\x20ada\x20(fallback)\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][column]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20=\x20req.body[\x27order[0][column]\x27];\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][dir]\x27]\x20=\x20req.body[\x27order[0][dir]\x27];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20filter\x20dalam\x20format\x20filters\x20object\x0a\x20\x20\x20\x20if\x20(req.body.filters\x20&&\x20typeof\x20req.body.filters\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Filter\x20out\x20values\x20that\x20should\x20be\x20ignored\x20(\x22all\x22,\x20\x22-\x22,\x20\x22\x22,\x20null,\x20undefined)\x0a\x20\x20\x20\x20\x20\x20const\x20filteredFilters\x20=\x20{};\x0a\x20\x20\x20\x20\x20\x20Object.keys(req.body.filters).forEach(key\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20req.body.filters[key];\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ignore\x20filter\x20if\x20value\x20is\x20\x22all\x22,\x20\x22-\x22,\x20empty\x20string,\x20null,\x20or\x20undefined\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20\x22all\x22\x20&&\x20value\x20!==\x20\x22-\x22\x20&&\x20value\x20!==\x20\x22\x22\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20filteredFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Only\x20set\x20filters\x20if\x20there\x20are\x20valid\x20filters\x20remaining\x0a\x20\x20\x20\x20\x20\x20if\x20(Object.keys(filteredFilters).length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.filters\x20=\x20filteredFilters;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Applied\x20filters\x20(ignoring\x20\x22all\x22,\x20\x22-\x22,\x20empty\x20values):\x27,\x20JSON.stringify(filteredFilters,\x20null,\x202));\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27All\x20filters\x20ignored\x20due\x20to\x20\x22all\x22,\x20\x22-\x22,\x20or\x20empty\x20values\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20typeof\x20req.body.where\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x20(mendukung\x20format\x20array\x20legacy\x20dan\x20format\x20object\x20baru)\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20||\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Applied\x20where\x20conditions:\x27,\x20JSON.stringify(req.body.where,\x20null,\x202));\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Invalid\x20where\x20format,\x20ignoring\x20where\x20parameter\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20parameters\x0a\x20\x20\x20\x20if\x20(options.perPage\x20>\x201000)\x20{\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x201000;\x20//\x20Limit\x20untuk\x20mencegah\x20overload\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(options.perPage\x20<\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x2010;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x8c96eb+_0x273c17(0x160)+_0x5a91d1+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20options:\x20options,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json(result);\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x5a91d1+_0x273c17(0x141)+_0x5a91d1+_0x273c17(0x150);}function generateCreateFunction(_0x2c55bd,_0x28da9c,_0x41399f,_0x51811b=null,_0x1f9fd8=![]){const _0x5730fc=a0_0x48ec,_0x2106d0={'qKtHX':function(_0x2ccc0c,_0x36d1d8){return _0x2ccc0c(_0x36d1d8);}};if(!_0x51811b){const _0x4086b3=FileUtils['toCamelCase'](_0x28da9c);_0x51811b=_0x4086b3+'Model';}const _0x189267=isSoftDeleteEnabled(_0x41399f)?'\x0a\x20\x20\x20\x20for\x20(const\x20__sdCol\x20of\x20'+JSON['stringify'](SOFT_DELETE_COLUMNS)+_0x5730fc(0x145):'',_0x8f998c=_0x2106d0[_0x5730fc(0x13a)](hasSoftDeleteFkParents,_0x41399f)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20parent\x20soft-delete\x20wajib\x20aktif\x20untuk\x20tiap\x20kolom\x20FK\x20yang\x20diisi\x20(pre-check\x20422).\x0a\x20\x20\x20\x20await\x20'+_0x51811b+'.checkSoftDeleteFkParents(req.body,\x20\x27create\x27);\x0a':'',_0x52690c=hasSoftDeleteFkParents(_0x41399f)?_0x5730fc(0x1ef):'',_0x1589d5=_0x1f9fd8?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20INSERT\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabled\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabled\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.insert)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishInsert(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x2c55bd+_0x5730fc(0xdb)+_0x28da9c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x41399f['primaryKey']||'id')+_0x5730fc(0xfa)+_0x41399f['tableName']+_0x5730fc(0x1e7):'',_0x274c65=_0x1f9fd8?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x2c55bd+'/'+_0x28da9c+_0x5730fc(0x183)+_0x28da9c+_0x5730fc(0x23c)+_0x28da9c+'/create:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x274c65+_0x5730fc(0x1e9)+_0x51811b+_0x5730fc(0x100)+_0x51811b+'.validateData(req.body,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20sanitized\x20data\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}'+_0x189267+'\x0a'+_0x8f998c+'\x0a\x20\x20\x20\x20//\x20Event\x20lifecycle\x20variables\x0a\x20\x20\x20\x20let\x20oldData\x20=\x20null;\x0a\x20\x20\x20\x20let\x20newData\x20=\x20null;\x0a\x20\x20\x20\x20const\x20requestData\x20=\x20req.body;\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x41399f['tableName']+_0x5730fc(0x12d)+_0x51811b+'.addData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x51811b+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x28da9c+'\x20data\x20added\x20successfully:\x20${responseData.'+(_0x41399f[_0x5730fc(0x104)]||'id')+'\x20||\x20\x27new\x20record\x27}`);\x0a'+_0x1589d5+_0x5730fc(0x95)+_0x28da9c+'\x20data\x20successfully\x20added\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menambahkan\x20data\x20'+_0x28da9c+':\x27,\x20error);\x0a'+_0x52690c+_0x5730fc(0x83)+_0x28da9c+_0x5730fc(0x150);}function generateUpdateFunction(_0x474c28,_0x1e48b9,_0x165d33,_0x4df9b3=null,_0x30a8da=![]){const _0x42f474=a0_0x48ec,_0x588680={'AnRpA':function(_0x216e6d,_0x4b302b){return _0x216e6d(_0x4b302b);}};if(!_0x4df9b3){const _0x37b0d4=FileUtils['toCamelCase'](_0x1e48b9);_0x4df9b3=_0x37b0d4+'Model';}const _0x3ac6f3=_0x165d33[_0x42f474(0x1d1)]?',\x20'+JSON['stringify'](_0x165d33[_0x42f474(0x1d1)]):'',_0x57c9c8=_0x165d33[_0x42f474(0x206)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x4df9b3+_0x42f474(0x12b)+_0x1e48b9+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x423ce7=softDeleteVisibilityFilter(_0x165d33),_0x5dcd40=_0x423ce7!==null?'\x0a\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20__sdCheck\x20=\x20await\x20'+_0x4df9b3+_0x42f474(0x1e6)+IS_DELETED_COLUMN+'\x27,\x20value:\x20'+_0x423ce7+_0x42f474(0xa0)+_0x1e48b9+_0x42f474(0xfe):'',_0x54d473=isSoftDeleteEnabled(_0x165d33)?'\x0a\x20\x20\x20\x20for\x20(const\x20__sdCol\x20of\x20'+JSON[_0x42f474(0x147)](SOFT_DELETE_COLUMNS)+_0x42f474(0x145):'',_0x48367e=hasSoftDeleteFkParents(_0x165d33)?_0x42f474(0x175)+_0x4df9b3+_0x42f474(0x1db):'',_0x4a9382=_0x588680['AnRpA'](hasSoftDeleteFkParents,_0x165d33)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20parent\x20soft-delete\x20terhapus/absen\x20→\x20422\x20(shape\x20selaras\x20FK\x20restore\x20R20).\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'',_0x58a416=_0x30a8da?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20UPDATE\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabledUpdate\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabledUpdate\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.update)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishUpdate(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x474c28+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x1e48b9+_0x42f474(0x1f6)+(_0x165d33[_0x42f474(0x104)]||'id')+_0x42f474(0xfa)+_0x165d33[_0x42f474(0x140)]+_0x42f474(0x1e7):'',_0x1bbbb3=_0x30a8da?_0x42f474(0xce):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return _0x42f474(0x205)+_0x474c28+'/'+_0x1e48b9+'/update\x20-\x20Mengupdate\x20data\x20'+_0x1e48b9+'\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x1e48b9+_0x42f474(0xdc)+_0x1bbbb3+'\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x165d33['primaryKey']||'id')+_0x42f474(0xd4)+_0x57c9c8+_0x5dcd40+_0x42f474(0x1d9)+_0x4df9b3+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x4df9b3+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20sanitized\x20data\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}'+_0x54d473+'\x0a'+_0x48367e+_0x42f474(0xb1)+_0x165d33[_0x42f474(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x4df9b3+_0x42f474(0x15f)+_0x3ac6f3+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x4df9b3+_0x42f474(0x166)+_0x3ac6f3+_0x42f474(0x1d0)+_0x1e48b9+'\x20data\x20updated\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a'+_0x58a416+'\x0a\x20\x20\x20\x20//\x20Kirim\x20response\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1e48b9+'\x20data\x20successfully\x20updated\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengupdate\x20data\x20'+_0x1e48b9+_0x42f474(0xb5)+_0x4a9382+_0x42f474(0x217)+_0x1e48b9+_0x42f474(0xba)+_0x1e48b9+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function a0_0x1e46(){const _0x4c4f8d=['C3rYAw5NAwz5','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','zgf0zvrPBwvgAwvSzhm','cGOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','yc50CMLTkcK7','zK9qsM4','ANrywwS','kg1HC3rLCI1KzxrHAwWGDhjHBNnHy3rPB24P','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','zgv0ywLSq29UzMLN','ihX8icfbCNjHEs5PC0fYCMf5kgrHDgeU','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','ywn0Aw9U','DMLZAwjPBgL0Eq','y29SDw1UrM9YBwf0CW','DxbSB2fKq29UzMLN','icaGic8VicH3AgvYzs1RzxKGuJe1ksbZzwHPBMDNysb0zxiTChjVEwvRC2KGzM9YBwf0uMvZCg9UC2veyxrHoYbOyxb1CYbKyxjPihjLC3bVBNnLihb1yMXPAWO','igrLBMDHBIbHy3rPB25ZoIa','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','BgvUz3rO','lNvWzgf0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4Da','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCYbQAwTHigrPCgvYBhvRyw4kicaGigLMicHYzxn1BhqUzgf0ysaMjIbbCNjHEs5PC0fYCMf5khjLC3vSDc5KyxrHksKGEWOGicaGicbYzxn1BhqUzgf0ysa9ihjLC3vSDc5KyxrHlM1HCcGOAxrLBsWGAw5KzxGPid0+icH7cIaGicaGicaGlI4UAxrLBsWkicaGicaGicbYB3DUDw1LCMf0B3i6ig9WDgLVBNmUC3rHCNqGkYbPBMrLEcaRidekicaGicaGFsKPoWOGicaGFqOkicaGic8ViefKzcbTzxrHzgf0ysb1BNr1AYbKzwj1z2DPBMCGkgrLDMvSB3bTzw50ig9UBhKPcIaGicbPzIaOChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCPihSkicaGicaGCMvZDwX0lL9TzxrHzgf0ysa9ihSkicaGicaGicbLBMrWB2LUDdOGjW','u1PfsLK','lcbYDw5UAw5NihDPDgHVDxqGzxzLBNrZycK7cN0kcI8QkGOGkIa','cGOGicaGicaVlYaTls0Gsg9VAZOGB25bzNrLCKnVBxbVC2L0zvvWzgf0zsaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbHzNrLCKn0Eca9ienclMj1AwXKq29TCg9ZAxrLvxbKyxrLqwz0zxjdB250zxH0kgHLywrLCKrHDgeSig9SzerHDgeSihvWzgf0zwrizwfKzxiSihSkicaGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlaOGicaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlaOGicaGicaGicaGzgvSzxrLzdOGzgvSzxrLzeL0zw1ZcIaGicaGicaGFsWGEWOGicaGicaGicaGDgfIBgvoyw1LoIaN','Dg90ywXFyw1VDw50','lMLUC2vYDciGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicaGigLMicHVCgvYyxrPB25ZlNvWzgf0zsaMjIaHqxjYyxKUAxnbCNjHEsHVCgvYyxrPB25ZlNvWzgf0zsKPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGy3jLyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','zLvuqMS','cIaGicbDoWOkicaGic8VierLzMLUAxnPA2fUigrHDgf0ywjSzxnxAgvYzsbZzxn1ywKGCgf5Bg9HzaOGicaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','C29MDerLBgv0zuzRugfYzw50CW','jYWkicaGicaGicaGihbYAw1HCNLlzxK6ihrOAxmUChjPBwfYEuTLEsWkicaGicaGicaGic4UlIHLDMvUDenVBNrLEhqUywrKAxrPB25HBenVBNrLEhqGFhWGE30PcIaGicaGicaGFsK7cIaGicaGicaGy29UC3qGywz0zxjszxn1BhqGpsbHD2fPDcbJzs5LEgvJDxrLt25bzNrLCKnVBxbVC2L0zsGNAw5Zzxj0jYWGywz0zxjdDhGPoWOGicaGicaGigLMicGHywz0zxjszxn1BhqUC3vJy2vZCYKGEWOGicaGicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0igzHAwXLzdOGjhTHzNrLCLjLC3vSDc5LCNjVCN1GktSkicaGicaGicb9cIaGicaGih0kcIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNq09ntuLujYK7cIaGicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGicaVlYbjBNzHBgLKyxrLignHy2HLihnLDgvSywGGD3jPDguGB3bLCMf0Aw9UigjLCMHHC2LScIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGic4UlMLUC2vYDgvKsgvHzgvYlaOGicaGicaGifTKzxrHAwXlzxLDoIbPBNnLCNrLzeL0zw1ZcIaGicaGih07cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbJCMvHDgvdB21WB3nPDgu6jYWGzxjYB3iPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0GzMLUywXSEsb7cIaGicaGignSAwvUDc5YzwXLyxnLkcK7cIaGicb9cIaGFqO','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbpDMvYCMLKzsbNzxrtDgf0AwnmB29RDxbeyxrHihvUDhvRig1LBMDNDw5HA2fUigTVBg9TicC','nJCZnduZnKLxBefgra','zw50CMLLCW','jYb1BNr1AYbLBMrWB2LUDcbYzwfKigjLCMrHC2fYA2fUcI8VihzPC2LIAwXPDhKGy29UzMLNicGN','cIaGicaVlYbgBgfNihvUDhvRihnLBgyTzg9JDw1LBNrPBMCGqvbjicHLBMrWB2LUDcaVAw5MBYKkicaGihrOAxmUAgfZvMLLD1f1zxj5id0G','Dg9qyxnJywXdyxnL','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0k','yxvKAxrdB2X1Bw5Z','BxDuq0G','cIaGicaVlYbgsY1trc0XoIbJzwSGCgfYzw50igfRDgLMigHHBNLHihvUDhvRigTVBg9TiezlihLHBMCGzgLZzxj0ywTHBIbIB2r5icHWCMuTy2HLy2SGndiYks4kicaGigf3ywL0ia','x21LDgfKyxrH','ieXjtuLuideNlaOGicaGicaGicaGicaGif9FzMTwywXZcIaGicaGicaGicaGicK7cIaGicaGicaGicaGigLMicHFx2zRq2HLy2SUCM93CY5Szw5NDgGGpt09idaPihSkicaGicaGicaGicaGicbJB25ZDcbMA0vYCM9Yid0GBMv3ievYCM9Ykcjdyw5UB3qGCMvZDg9YztOGCMvMzxjLBMnLzcbWyxjLBNqGCMvJB3jKigLUicC','lMrLBgv0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cGOGicaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfignVBxbSzxrLzcbZDwnJzxnZzNvSBhKGD2L0AcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfigzHAwXLzdONlcbLCNjVCI5TzxnZywDLktSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFsbLBhnLihSkicaGicaGlY8GrMfSBgjHy2S6igD1BMfRyw4GBw9KzsbSyw1HihrHBNbHigv2zw50CYaODgv0yxaGChjVCgfNyxnPihjLCxvLC3rjzcb1BNr1AYbmAxzLifn5BMmPcIaGicaGihrYEsb7cIaGicaGicaGCMvZCg9UC2veyxrHid0GyxDHAxqG','uKrTDNi','cI8Vie5VigfJDgLVBNmGzw5HyMXLzcbMB3iGDgHPCYbLBMrWB2LUDaOVlYbfBMfIBguGywn0Aw9UCYbPBIbWyxLSB2fKihrVigDLBMvYyxrLigvUzhbVAw50CW','se5hvxu','CMvWBgfJzq','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','jYWkicaGicaGDgfIBgvoyw1LoIaN','laOGicaGicbMAwvSzeXHyMvSCZOG','tw9KzwW','jYWGDMfSAwrgAwvSzhmSigrHDgf0ywjSzxnxAgvYzsWGEYbYzwfKywjSzuzPzwXKCYWGC2nOzw1HrMLLBgrZlcbKyxrHDgfIBgvZrMLLBgrZih0PoWOkicaGic8VifnLDhvWihbYAw1HCNKGA2v5igrHCMKGCgf5Bg9HzcbHDgf1igzHBgXIywnRigTLigzPzwXKtMfTzsbWzxj0yw1HcIaGicb0AgLZlNbYAw1HCNLlzxKGpsaN','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','l2nYzwf0zsaTie1LBMfTyMfOA2fUigrHDgeG','icaGicaGFqO','cIaQiebWyxjHBsb7t2jQzwn0FsbJB25MAwCGlsblB25MAwD1CMfZAsb1BNr1AYbTzw5QywXHBMTHBIbTB2r1BaOGkIbaCgfYyw0GE251BwjLCN0Gy29UzMLNlNbVCNqGlsbqB3j0ihvUDhvRihnLCNzLCGOGkIbaCgfYyw0GE3n0CMLUz30Gy29UzMLNlMTLEsaTiefqssblzxKGkg9WC2LVBMfSkqOGkIbaCgfYyw0GE2jVB2XLyw59ignVBMzPzY5JB3jZic0Grw5HyMXLienpuLmGkgrLzMf1Bhq6ihrYDwuPcIaQiebWyxjHBsb7yM9VBgvHBN0Gy29UzMLNlMXVz2DPBMCGlsbfBMfIBguGCMvXDwvZDcbSB2DNAw5NicHKzwzHDwX0oIb0CNvLkqOGkIbaCMv0DxjUCYb7uhjVBwLZztX2B2LKpN0GuhjVBwLZzsb5yw5NihrPzgfRihbLCM5HAcbYzxnVBhzLigfNyxiGC2vYDMvYihrLDgfWigjLCMPHBgfUcIaQlWPHC3LUyYbMDw5JDgLVBIbLEgvJDxrLkgnVBMzPzYKGEWOGihjLDhvYBIbUzxCGuhjVBwLZzsGOCMvZB2X2zsWGCMvQzwn0ksa9pIb7cIaGicb0CNKGEWOGicaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicaGignVBNn0ihbVCNqGpsbJB25MAwCUCg9YDcb8FcaZmdaWoWOGicaGicbJB25ZDcbZzxj2zxjbzgrYzxnZid0Gy29UzMLNlNnLCNzLCKfKzhjLC3mGFhWGjZaUmc4WlJaNoYaVlYbezwzHDwX0idaUmc4WlJaGDw50DwSGyMfJA3DHCMqGy29TCgf0AwjPBgL0EqOGicaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','cIaQifrHyMXLoIa','zMLSDgvY','BwLZC2LUzYbVCIbZB2z0lwrLBgv0zwq','cGOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGzgv0ywLSrMLLBgrZlNb1C2GOycr7A2v5Fsa9icqKE2rLDgfPBfbSywnLAg9SzgvYsw5KzxGRk31GktSkicaGicaGicaGicaGzgv0ywLSvMfSDwvZlNb1C2GODMfSDwuPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGkhvWzgf0zwrFyxqSihvWzgf0zwrFyNKPigTLigrLDgfPBcbvuerbveuGDMLHigHLBhbLCGOGicaGicaGigrLDgfPBfbSywnLAg9SzgvYsw5KzxGGpsb0AgLZlL9HChbLBMrvCgrHDgvbDwrPDenVBhvTBNmOzgv0ywLSrMLLBgrZlcbKzxrHAwXwywX1zxmSigL0zw0Sigv2zw50q29UDgv4DcWGzgv0ywLSugXHy2vOB2XKzxjjBMrLEcK7cGOGicaGicaGigrLDgfPBfzHBhvLCY5WDxnOkgL0zw1Bzgv0ywLSuhjPBwfYEuTLEv0PoWOGicaGicaGignVBNn0igrLDgfPBfvWzgf0zvf1zxj5id0GyaOGicaGicaGicaGvvbeqvrficr7zgv0ywLSvgfIBgvoyw1LFqOGicaGicaGicaGu0vuicr7zgv0ywLSrMLLBgrZlMPVAw4OjYWGjYL9cIaGicaGicaGicbxsevsrsaKE2rLDgfPBfbYAw1HCNLlzxL9id0Gjcr7zgv0ywLSugXHy2vOB2XKzxjjBMrLEh0kicaGicaGicaGifjfvfvstKLorYaQcIaGicaGicaGydSkcIaGicaGicaGy29UC3qGzgv0ywLSuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgrLDgfPBfvWzgf0zvf1zxj5lcbKzxrHAwXwywX1zxmPoWOGicaGicaGigLMicHKzxrHAwXszxn1BhqUCM93CY5Szw5NDgGGpIaWksb7cIaGicaGicaGicb1CgrHDgvKsxrLBxmUChvZAcHKzxrHAwXszxn1BhqUCM93C1SWxsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicbJB25ZB2XLlMXVzYHGvxbKyxrLzcaKE3vWzgf0zwrjDgvTCY5Szw5NDgH9igrLDgfPBcbPDgvTkhmPycK7cGOGicaGicaVlYaZlIbqCM9JzxnZieLou0vsvcbVCgvYyxrPB25ZcIaGicaGigzVCIaOy29UC3qGAxrLBsbVzIbPBNnLCNrjDgvTCYKGEWOGicaGicaGic8ViefKzcbMB3jLAwDUigTLEsb0BYbPDgvTcIaGicaGicaGAxrLBvTMB3jLAwDUs2v5xsa9ihbYAw1HCNLlzxLwywX1ztSkcIaGicaGicaGlY8Gqxv0BY1Nzw5LCMf0zsbvvuLeihvUDhvRigrLDgfPBcbqsYbIAwXHignSAwvUDcb0AwrHAYbTzw55DxbWBhKkicaGicaGicaVlYaOA29UC2LZDgvUigrLBMDHBIbJCMvHDgvdB21WB3nPDguGzgfUigTVBNzLBNnPigf1Dg9hzw5LCMf0zsKkicaGicaGicbPzIaOAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9pt0GDw5KzwzPBMvKihX8igL0zw1Bzgv0ywLSuhjPBwfYEuTLEv0Gpt09ig51BgWPihSkicaGicaGicaGigL0zw1Bzgv0ywLSuhjPBwfYEuTLEv0GpsbYzxf1AxjLkcD1DwLKjYKUDJCOktSkicaGicaGicb9cG','C2vHCMnOq29SDw1UCW','ksb8FcaWoWOGicaGicaGicaGy29UC3qGChjPy2uGpsboDw1IzxiOAxrLBs4','C29MDerLBgv0zuzRq2HLy2TZ','zxHWB3j0uxvLCNK','C29MDerLBgv0zunHC2nHzgvuCMvL','zMLLBgrZ','ksdIHPiGnda5igjPBgeGBwfZAwGGzgLYzwzLCMvUC2LRyw4kicaGicaGicb7cIaGicaGicaGicbJB25ZDcbFx3jLC3rYAwn0vMfSid0GBg9JA2vKuM93wYC','y2HPBgruywjSzq','cIaGicaVlYbeyxrLvgLTzsbMAwvSzhmGy29UzMLNDxjHDgLVBGOGicaGDgHPCY5KyxrLvgLTzuzPzwXKCYa9ia','y29TCg9Uzw50CW','nZzgtwvezvi','oWOGicaGicaGignVBNn0igLUDMfSAwrgAwvSzhmGpsbBxtSkcIaGicaGicaGlY8Gq2HLy2SGC2v0AwfWigzPzwXKigrHBgfTihnLBgvJDaOGicaGicaGigzVCIaOy29UC3qGzMLLBgqGB2yGCMvXlMjVzhKUC2vSzwn0ksb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxnPihvUDhvRigzPzwXKicDPzcCkicaGicaGicaGigLMicHMAwvSzc50B0XVD2vYq2fZzsGPid09psaNAwqNksb7cIaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGFqOkicaGicaGicaGic8VifnRAxaGDMfSAwrHC2KGAMLRysbHzgeGu1fmigv4ChjLC3nPB24GzgvUz2fUiefticHHBgLHCYKkicaGicaGicaGigLMicGVxhmRyxnCCYTCDYSKl2KUDgvZDcHMAwvSzcKPihSkicaGicaGicaGicaGy29UDgLUDwu7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gu2TPCcb2ywXPzgfZAsbQAwTHigfKysbtuuWGB3bLCMf0B3jZl2z1BMn0Aw9UCYaOFhWSienptKnbvcWGzgXSkqOGicaGicaGicaGAwyGkc9CFfX8FenptKnbvhXdt0fmrvndrxXdqvnfFfDiru4VAs50zxn0kgzPzwXKksKGEWOGicaGicaGicaGicbJB250Aw51ztSkicaGicaGicaGih0kcIaGicaGicaGicaVlYbwywXPzgfZAsbUB3jTywWGzMLLBgqGBMfTzqOGicaGicaGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHMAwvSzcKPihSkicaGicaGicaGicaGAw52ywXPzezPzwXKCY5WDxnOkgzPzwXKktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGigLMicHPBNzHBgLKrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGC2vSzwn0igzPzwXKCYCScIaGicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicaUlI4OChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYb7ihzHBgLKrMLLBgrZih0GoIb7FsKScIaGicaGicaGicaGihnXBev4ChjLC3nPB25oB3rLoIaNu1fmigv4ChjLC3nPB25ZigrLBMDHBIbVCgvYyxrVCIb8FcbHDgf1ieftigfSAwfZigrPCgvYyM9SzwHRyw4NlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhDw5HA2fUig1LDgHVzcbNzxrmB29RDxbeyxrHv2L0AezPBhrLCGOGicaGicbJB25ZDcbSAxn0id0GyxDHAxqG','cIaGicaGic8ViefKzcbZzwfYy2GGy29UzgL0Aw9UCYb1BNr1AYb0zxH0igzPzwXKCWOGicaGicbPzIaOC2vHCMnOicyMihnLyxjJAc50CMLTkcKPihSkicaGicaGicbJB25ZDcbZzwfYy2HdB25KAxrPB25Zid0GDgv4DezPzwXKCY5TyxaOzMLLBgqGpt4GEWOGicaGicaGicaGCMv0DxjUigb1ChbLCIHHlIr7zMLLBgr9ksbmsuTfihvWCgvYkcqKE3bHCMfTsw5KzxGRk30PydSkicaGicaGicb9ktSkicaGicaGicb3AgvYzunVBMrPDgLVBNmUChvZAcHGkcr7C2vHCMnOq29UzgL0Aw9UCY5QB2LUkcCGt1iGjYL9kwaPoWOkicaGicaGicaVlYbbzgqGC2vHCMnOihbHCMfTzxrLCIbMB3iGzwfJAcb0zxH0igzPzwXKcIaGicaGicaGDgv4DezPzwXKCY5MB3jfywnOkcGPid0+ihSkicaGicaGicaGihbHCMfTCY5WDxnOkgaLjhTZzwfYy2GUDhjPBsGPFsvGktSkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GqwrKigv4DhjHigzPBhrLCNmkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOzxH0CMfgAwX0zxjZksKGEWOGicaGicaGigLMicH2ywX1zsaMjIa','AxrLBxm','C3rYAw5N','icSGjW','igrHDgeGC3vJy2vZC2z1BgX5ignYzwf0zwq','y2HPBgrtB2z0rgvSzxrL','jYWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIa','ywrQDxn0q29UzMLN','z1vlrMC','cGOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGzgv0ywLSrMLLBgrZlNb1C2GOA2v5ktSkicaGicaGicaGicaGzgv0ywLSvMfSDwvZlNb1C2GODMfSDwuPoWOGicaGicaGicaGicbKzxrHAwXqBgfJzwHVBgrLCNmUChvZAcHGjcr7zgv0ywLSugXHy2vOB2XKzxjjBMrLEcSRFwaPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGicaGzgv0ywLSugXHy2vOB2XKzxjjBMrLEca9ihrOAxmUx2fWCgvUzenYzwf0zuf1zgL0q29SDw1UCYHKzxrHAwXgAwvSzhmSigrLDgfPBfzHBhvLCYWGzgv0ywLSugXHy2vOB2XKzxjZlcbPDgvTlcbLDMvUDenVBNrLEhqSigrLDgfPBfbSywnLAg9SzgvYsw5KzxGPoWOkicaGicaGicbJB25ZDcbKzxrHAwXjBNnLCNrrDwvYEsa9igakicaGicaGicaGieLou0vsvcbjtLrpicr7zgv0ywLSvgfIBgvoyw1LFsaOjhTKzxrHAwXgAwvSzhmUAM9PBIGNlcaNkx0PcIaGicaGicaGicbwquXvrvmGkcr7zgv0ywLSugXHy2vOB2XKzxjZlMPVAw4OjYWGjYL9kqOGicaGicaGicaGuKvuvvjosu5hicOkicaGicaGicbGoWOkicaGicaGicbJB25ZB2XLlMXVzYGNrxHLy3v0Aw5NigrLDgfPBcbjtLnfuLq6jYWGEYbXDwvYEtOGzgv0ywLSsw5Zzxj0uxvLCNKSihzHBhvLCZOGzgv0ywLSvMfSDwvZih0PoWOGicaGicaGignVBNn0igrLDgfPBfjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHKzxrHAwXjBNnLCNrrDwvYEsWGzgv0ywLSvMfSDwvZktSkicaGicaGicbPBNnLCNrLzeL0zw1ZlNb1C2GOzgv0ywLSuMvZDwX0lNjVD3nBmf0PoWOGicaGicb9cGOGicaGicbJB25ZB2XLlMXVzYHGsw5Zzxj0zwqGjhTPBNnLCNrLzeL0zw1ZlMXLBMD0Ah0Gzgv0ywLSigL0zw0OCYLGktSkcIaGicaGic8Vic0TlsbiB29RoIbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0ic0TlqOGicaGicbPzIaOzxzLBNrdB250zxH0icyMigv2zw50q29UDgv4Dc5JB21WB25LBNrfBMDPBMuPihSkicaGicaGicbJB25ZDcb7ignVBxbVBMvUDevUz2LUztOGy2uSienVBNrLEhrcDwLSzgvYoIbdqIb9id0GzxzLBNrdB250zxH0oWOGicaGicaGignVBNn0igfMDgvYq3r4id0Gq0iUyNvPBgrdB21WB3nPDgvjBNnLCNrbzNrLCKnVBNrLEhqOAgvHzgvYrgf0ysWGAw5Zzxj0zwrizwfKzxiSigLUC2vYDgvKsxrLBxmSihSkicaGicaGicaGihrHyMXLtMfTztOGjW','cGOGicaGicaGic8ViduUifjLC2v0igTVBg9TihnVzNqTzgvSzxrLlIb1CgrHDgvKxYOGveLequSGzgLZzw50DwGGkgTVBNnPC3rLBIbsmtqPlGOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','Exjwq2m','iJOG','jYWkicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGFsK7cN0PoWOkBw9KDwXLlMv4Cg9YDhmGpsbYB3v0zxi7','cNjVDxrLCI5WB3n0kcCVDxbKyxrLlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','DhLWzq','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','zMLSDgvYCW','igXPC3qGzgf0ysCScIaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7cGO','oWOkicaGic8VifzHBgLKyxnPihbYAw1HCNKGA2v5cIaGicbPzIaOiwrHDgeU','rNnIANO','jZSkicaGicaGzgvSzxrLigHLywrLCKrHDgfBzgv0ywLSs2v5xtSkcIaGicaGic8Vic0TlsbiB29RoIbVBKjLzM9YzunVBxbVC2L0zuLUC2vYDcaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbKzxrHAwXjDgvTCYa9igrHDgfBzgv0ywLSs2v5xsb8FcbBxtSkicaGicaGicbJB25ZDcbIzwzVCMvdDhGGpsbdqI5IDwLSzenVBxbVC2L0zuLUC2vYDejLzM9YzunVBNrLEhqOAgvHzgvYrgf0ysWGzgv0ywLSsxrLBxmSihSkicaGicaGicaGihrHyMXLtMfTztOGjW','cIaGicaGicaGlY8GCMv1C2fIBguGjW','AvzhruC','jZSGlY8Gu291CMnLihvUDhvRig9WzxjHC2KGD3jPDguGkgfKzcWGDxbKyxrLlcbKzwXLDguPcG','jYWGjW','zMLLBgroyw1L','jWOGicaGicaGidOGj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u','laOGicaGicbWCMLTyxj5vgv4DezPzwXKoIaN','A2v5CW','CMvMq29SDw1UCW','C29MDerLBgv0zuzRq2HPBgrYzw4','ie1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','icaGic8ViezPzwXKihzHBgLKyxrPB24Gy29UzMLNDxjHDgLVBGOGicaGDgHPCY52ywXPzgf0Aw9Uq29UzMLNid0GEWO','cGOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','cIaGlYOQcIaGicOGrKSTu0qTmsbMB3j3yxjKigjSB2nRlIbuB2XHAYbJCMvHDguVDxbKyxrLigfUywSGEwfUzYbTzw51BMP1AYbWyxjLBNqGC29MDc1KzwXLDguGEwfUzWOGicaQihrLCMHHChvZicHPC19KzwXLDgvKpvrsvuuPigf0yxuGDgLKywSGywrHicG0mJiPlIbiyw55ysbgsYbIzxiTCgfYzw50ihnVzNqTzgvSzxrLlwvUywjSzwqkicaGkIaOCMvNAxn0CNKGC29MDerLBgv0zuzRugfYzw50CYKGEwfUzYbKAwnLAZSGrKSGBNvSBc9HyNnLBNqG4OAsihnRAxaUierPCgfUz2DPBcbYB3v0zsaVy3jLyxrLcIaGicOGzgfUic91CgrHDguGC2vIzwX1BsbHzgreyxrHl3vWzgf0zurHDgeUifbYzs1JAgvJAYbWB29SihrLCNbPC2fOicHUB24TDhjHBNnHA3nPB25HBcK6igXPAgf0cIaGicOGy2f0yxrHBIbHDg9TAwnPDhKGqMfNAwfUieiGzgKGCMvWB3j0ifbOyxnLidaYlGOGicaQiebWyxjHBsb7t2jQzwn0FsbIB2r5ic0GCMvXDwvZDcbIB2r5icHYzxeUyM9KEsKkicaGkIbaCgfYyw0GE3n0CMLUz30GB3bLCMf0Aw9Uic0Gj2nYzwf0zsCGFcaNDxbKyxrLjYaODw50DwSGCgvZyw4GzxjYB3iGndiYkqOGicaQlWOGigfZEw5JignOzwnRu29MDerLBgv0zuzRugfYzw50CYHIB2r5lcbVCgvYyxrPB24PihSkicaGigLMicGHyM9KEsb8Fcb0ExbLB2yGyM9KEsaHpt0Gj29IAMvJDcCPihjLDhvYBJSkicaGignVBNn0ihbVB2WGpsbKyI5NzxrqB29SkcK7cG','CMvZDhjPy3q','jYKUienVBMzPzY1KCML2zw4GkhrHBNbHigjVzhKGB3b0Aw9UCYKSigrPDgvYyxbRyw4GDgfUCgeklY8GC3LHCMf0igf1DgGGkhzPC2LIAwXPDhKGzMLSDgvYlcbcvuTbtIbstfmG4OcuigTHCMvUysbPDhuGDgLKywSGywrHigD1yxjKicfYzxeUDxnLCIKUcNjVDxrLCI51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGAwyGkhjLCs5TzxrOB2qGit09icDqt1nujYKGCMv0DxjUig5LEhqOktSkcIaGy29UC3qGzw5KCg9PBNqGpsbYzxeUCgf0Ac5ZDwjZDhjPBMCOmsK7cIaGAwyGkcfBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNywDNCMvNyxrLj10UAw5JBhvKzxmOzw5KCg9PBNqPksbYzxr1CM4GBMv4DcGPoWOkicbJB25ZDcbZB2z0rgvSzxrLq29UzgL0Aw9Uid0GEYbRzxK6icC','iga7cIaGicaGicaGicbWyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGlY8GrMfPBc1JBg9ZzwqGD2HLCMuTzMLLBgq6ihrLCNvZA2fUigvYCM9YihrLCNn0CNvRDhvYigfWysbHzgfUEweGkgPHBMDHBIbIDw5NA3vZcIaGicaGicaGicaVlYbQywrPihbLC2fUigDLBMvYAwSPigfNyxiGAgfUzgXLCIbIAxnHig1LBwzVCM1HDcbYzxnWB25ZicSGzgv2lwDHDguGDMfSAwrgAwvSzhmUcIaGicaGicaGicbPzIaOzs5JB2rLid09psaNsu5wquXjrf9xsevsrv9gsuvmrcCPihrOCM93igu7cIaGicaGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJB25KAxrPB25ZoIaNicSGzs5TzxnZywDLktSkicaGicaGicaGigvYCM9YlNn0yxr1C0nVzguGpsa0mda7cIaGicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8VieHHBMrSzsbZB3j0x2nVBhvTBNmGAMLRysbHzgekicaGicaGAwyGkg9WDgLVBNmUC29YDf9JB2X1Bw5ZicyMiefYCMf5lMLZqxjYyxKOB3b0Aw9UCY5ZB3j0x2nVBhvTBNmPicyMig9WDgLVBNmUC29YDf9JB2X1Bw5ZlMXLBMD0Aca+idaPihSkicaGicaGicbJB25ZDcbVCMrLCLbHCNrZid0GB3b0Aw9UCY5ZB3j0x2nVBhvTBNmUBwfWkgL0zw0Gpt4GEWOGicaGicaGicaGy29UC3qGy29SDw1Uid0GAxrLBs5JB2X1Bw47cIaGicaGicaGicbJB25ZDcbKAxjLy3rPB24GpsaOAxrLBs5KAxjLy3rPB24GFhWGj0ftqYCPlNrVvxbWzxjdyxnLkcK7cIaGicaGicaGicbPzIaOiwnVBhvTBIKGCMv0DxjUig51BgW7cIaGicaGicaGicbPzIaOixrOAxmUCMvHzgfIBgvgAwvSzhmUAw5JBhvKzxmOy29SDw1UksaMjIbJB2X1Bw4Git09icC','cNjVDxrLCI5WB3n0kcCVy3jLyxrLlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','ywrH','Bg9VA3vW','Dg9vChbLCKnHC2u','iezst00GjYaRihrOAxmUz2v0tg9VA3vWu291CMnLkcKGkYbGifDirvjfihvWCgvYkgeU','jYKGEWOGicaGicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7y29SDw1UFwa7cIaGicaGicaGicb0zxH0rMLLBgqGpsbJB2X1Bw47cIaGicaGicaGicbICMvHAZSGlY8Gz3vUywTHBIb5yw5NihbLCNrHBweGC2vIywDHAsb0zxH0igzPzwXKcIaGicaGicaGFqOkicaGicaGicaVlYbkAwTHigj1A2fUihjLy29NBML6zwqGzMLLBgqSig1HC2LOihrHBwjHAgTHBIaOBxvUz2TPBIbJB21WDxrLzcbJB2X1Bw4PcIaGicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7y29SDw1UFwa7cIaGicaGicaGDgv4DezPzwXKid0Gy29SDw1UoWOGicaGicb9cGOGicaGicaVlYbcyw5NDw4GCxvLCNKGu0vmrunuigrLBMDHBIbZDxbWB3j0igv4ChjLC3nPB25ZcIaGicaGigXLDcbXDwvYEsa9igbtruXfq1qGjhTZzwXLy3rdBgf1C2v9iezst00GjhT0AgLZlMDLDeXVB2T1CfnVDxjJzsGPFsa','jYWGDMfSDwu6igrHDgeU','ywr2yw5JzwrrDwvYAwvZ','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8kcI8VienpuLmGzgL0yw5Nyw5PigrPigXLDMvSigfWCcbVBgvOignVCNmGBwLKzgXLD2fYzsaOBgLOyxqGA29UzMLNDxjHC2KGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkcGOklY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbWyxLSB2fKihbHzgeGBwv0B2rLifbpu1qkCM91DgvYlNvZzsGOCMvXlcbYzxmSig5LEhqPid0+ihSkicbPzIaOCMvXlM1LDgHVzca9pt0Gj1bpu1qNksb7cIaGicb0CNKGEWOGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGAw1WB3j0ihjVDxrLCYaOBwvUz2D1BMfRyw4GBxvSDgLWyxj0l2zVCM0Tzgf0ysWGyNvRyw4GsLnptIKkicaGicaGAwyGkhjLCs5WyxrOlNn0yxj0C1DPDgGOjY9PBxbVCNqTjYKPihSkicaGicaGicbYzxr1CM4GBMv4DcGPoWOGicaGicb9cGOGicaGicaVlYbwywXPzgfZAsb1BxvTihvUDhvRihbHEwXVywqkicaGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDnAxnZAw5NihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlaOGicaGicaGicaGzw5KCg9PBNq6icCVyxbPlW','C3rHCNrZv2L0Aa','id0Gja','id0GtK9xkcKNktSkicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','jYWkicaGicaGicaGigHLywX0AenOzwnRoIbGAhr0CdOVlYr7zgLZCgXHEuHVC3r9oIr7Cg9YDh0VyxbPlW','Aw5MBW','ywXS','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtksdIGjqGBwfZDgvYihjLy29YzaOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','cGOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0nptu1jvcCPoWOkicaGicaGlY8Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOihDYAxrLig9WzxjHDgLVBIbIzxjOyxnPBaOGicaGicbHD2fPDcb0AgLZlMLUDMfSAwrHDgvdywnOzsGPoWOkicaGicaGCMv0DxjUihSkicaGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicaGig1LC3nHz2u6icDeyxrHihn1y2nLC3nMDwXSEsbKzwXLDgvKjYWkicaGicaGicbKyxrHoIbKzwXLDgvKrgf0yq','ktSkicaGicaGicbUzxDeyxrHid0GCMvZCg9UC2veyxrHoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDifvqrefursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','zMLLBgrqB2XPy3K','icaGigLMicHMB3jTyxr0zwqPihSk','jYKkicaGicaGica6ihbHDgGUAM9PBIH3B3jRAw5NrgLYlcaN','laOGicaGicbYzxf1zxn0u2nVCgu6ia','oWOGicaG','C29Tzq','oWOGicaGicbJB25ZDcb0zxH0rMLLBgrZid0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5ZzwfYy2HgAwvSzhmUBgvUz3rOid4GmaOGicaGicaGid8GBg9VA3vWq29UzMLNlNnLyxjJAezPzwXKCWOGicaGicaGidOG','Dg9dyw1LBenHC2u','cIaGicaVlYbdzwSGyxbHA2fOihbYAw1HCNKGA2v5igfKywXHAcbvvuLeihLHBMCGDMfSAwqGkgPPA2eGChjPBwfYEsbRzxKGywrHBgfOicDPzcCPcIaGicbJB25ZDcb1DwLKuMvNzxGGpsaVxLSWltLHlwzDEZH9lvSWltLHlwzDEZr9lvSXltvDwZaToweTzL17m30TwZG5ywjDwZaToweTzL17m30TwZaToweTzL17mtj9jc9PoWOGicaGy29UC3qGAxnwywXPzfvvsuqGpsbWCMLTyxj5s2v5id09psaNAwqNicyMihv1AwrszwDLEc50zxn0khjLCs5IB2r5w3bYAw1HCNLlzxLDktSkcIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','cIaGicbPzIaOixjLCs5IB2r5lNDOzxjLksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcbYzxf1zxn0igzVCM1HDdOGD2HLCMuGCgfYyw1LDgvYigLZihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih1DcIaGicaGicaGFsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbMB3jTyxqGD2HLCMukicaGigLMicGHqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKGjIyGixjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ifSkicaGicaGicaGicaGEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicaGif0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8Vid09psbfvKvovcbmsuzfq1Ldteu6ig9UqMvMB3jLierftevursa9pt0kicaGigXLDcbVBgreyxrHid0GBNvSBdSkicaGigXLDcbUzxDeyxrHid0GBNvSBdSkicaGignVBNn0ihjLCxvLC3reyxrHid0GCMvXlMjVzhK7cIaGicbSzxqGCMvZCg9UC2veyxrHid0GBNvSBdSkcIaGicaVlYbdzwSGyxbHA2fOigrHDgeGzxHPC3qGC2vIzwX1BsbKzwXLDguGzgfUigfTyMLSig9SzcbKyxrHihvUDhvRigv2zw50igXPzMvJEwnSzqOGicaGlY8GtwvUz2D1BMfRyw4Gu0vmrunuicOGzgfYAsb0ywjLBcb1DgfTysaODgfUCgeGzxHWBgLJAxqGC2vSzwn0ksbRyxjLBMeGzMLLBgroyw1LcIaGicaVlYbIAxnHig1LBMDHBMr1BMCGA29SB20GzgfYAsbkt0LoicHTAxmUignPDhLFBMfTzsKGEwfUzYb0AwrHAYbHzgeGzgKGDgfIzwWGDxrHBwekicaGigLMicHYzxeUyM9KEs53AgvYzsaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIbYzxeUyM9KEs53AgvYzs5Szw5NDgGGpIaWksb7cIaGicaGignVBNn0igzPCNn0q29UzgL0Aw9Uid0GCMvXlMjVzhKUD2HLCMvBmf07cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxHPC3rPBMDeyxrHid0GyxDHAxqG','lMnOzwnRu29MDerLBgv0zuzRugfYzw50CYHYzxeUyM9KEsWGj3vWzgf0zsCPoWO','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNuhjPBwfYEsbRzxKGka','laOGicaGica','CMvHzenVBxbVC2L0zq','wKjjquS','icaGih0k','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icb9ktSkicaGicaGicb3AgvYzunSyxvZzsa9ignVBMrPDgLVBNmUAM9PBIGNieforcaNktSkicaGicaGFsbLBhnLigLMicH3AgvYzs5JB25KAxrPB25Zksb7cIaGicaGicaGlY8GsgfUzgXLignVBxbSzxGGD2HLCMuGzM9YBwf0cIaGicaGicaGy29UC3qGy29UzgL0Aw9UCYa9ihDOzxjLlMnVBMrPDgLVBNmUBwfWkgnVBMrPDgLVBIa9pIb7cIaGicaGicaGicbWyxjHBxmUChvZAcHJB25KAxrPB24UDMfSDwuPoWOGicaGicaGicaGy29UC3qGB3bLCMf0B3iGpsbJB25KAxrPB24UB3bLCMf0B3iGFhWGjZ0NoWOGicaGicaGicaGCMv0DxjUigaKE2nVBMrPDgLVBI5RzxL9icr7B3bLCMf0B3j9icqKE3bHCMfTsw5KzxGRk31GoWOGicaGicaGih0PoWOGicaGicaGignVBNn0igXVz2LJid0GD2HLCMuUBg9NAwmGFhWGj0forcC7cIaGicaGicaGD2HLCMvdBgf1C2uGpsbJB25KAxrPB25ZlMPVAw4OycaKE2XVz2LJFsbGktSkicaGicaGFqOkicaGicaGAwyGkcf3AgvYzunSyxvZzsKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJBgf1C2uGzM9YBwf0jYK7cIaGicaGih0kcIaGicaGia','cIaQcIaQie1VzgvSihvUDhvRia','oIaKE3jLC3vSDc5JB21WB25LBNrZtg9HzgvKFsbJB21WB25LBNrZycK7cIaGicaGih0kicaGih0PlMnHDgnOkgvYCIa9pIb7cIaGicaGignVBNnVBguUzxjYB3iOyezHAwXLzcb0BYbSB2fKignVBxbVBMvUDcbJB25MAwD1CMf0Aw9UigzVCIa','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGjW','jYWkicaGicaGicaGignVCNjLBgf0Aw9Uswq6ignVCNjLBgf0Aw9UswqkicaGicaGicb9cIaGicaGicKUy2f0y2GOzxjYid0+ignVBNnVBguUzxjYB3iOj1TlywzRyv0Gqxn5BMmGChvIBgLZAcbLCNjVCJONlcbLCNiUBwvZC2fNzsKPoWOGicaGFqO','y1fjs2G','cIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','xtSkicaGicaGicaGic8Viezlig51BgXHyMXLoIbIAwXHigfKysbUAwXHAsbovuXmlcbWyxjLBNqGDgLKywSGzgL3ywPPyMTHBIdIHPiGC2TPCcbJzwSUcIaGicaGicaGicbPzIaOx19MA1zHBhmUzxzLCNKOkhyPid0+ihyGit09ig51BgWGjIyGDIaHpt0GDw5KzwzPBMvKksKGEWOGicaGicaGicaGicbJB25ZDcbFx2zRq2HLy2SGpsbHD2fPDcbJBgLLBNqUCxvLCNKOcIaGicaGicaGicaGicaGj1nftevdvcaXiezst00G','ieforca','icG0mJiPcIaGicaGicaGEWOGicaGicaGicaGy29UC3qGx19MA1zHBhmGpsbB','ksbmsuTfihvWCgvYkcqXkq','id0GvfjvrsCPoWOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','cIaGicaVlYbgsY1trc0XoIbWyxjLBNqGC29MDc1KzwXLDguGDgvYAgfWDxmVywjZzw4G4OAsidqYmIaOC2HHCguGC2vSyxjHCYbgsYbYzxn0B3jLifiYmcKUcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndiYksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqYmIKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDvBNbYB2nLC3nHyMXLievUDgL0EsCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','AK9puxi','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLBgvJDgvKvgfNic0GsuqGEwfUzYbKAxbPBgLOcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrtDgf0AwnmB29RDxbeyxrHkhnLBgvJDgvKvgfNksb7cIaGicb0CNKGEWOGicaGicaVlYbdAgvJAYbJywnOzsbMAxjZDcaOAwyGzw5HyMXLzcKGlsbJywnOzsb0yw5WysbZzwXLy3rLzfrHzYbRyxjLBMeGzgf0ysbZyw1HcIaGicaGignVBNn0ignHy2HLt3b0Aw9UCYa9ihSGDhLWztOGj3n0yxrPyYCGFtSkicaGicaGy29UC3qGy2fJAgvKuMvZDwX0id0GyxDHAxqGDgHPCY5NzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcaNC3rHDgLJjYK7cIaGicaGigLMicHJywnOzwrszxn1BhqPihSkicaGicaGicaVlYbbChbSEsbZzwXLy3rLzfrHzYb0BYbJywnOzwqGCMvZDwX0cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDc5TyxaOAxrLBsa9pIb7cIaGicaGicaGicbPzIaOAxrLBs5Pzca9pt0GC2vSzwn0zwruywCPihSkicaGicaGicaGicaGCMv0DxjUihSGlI4UAxrLBsWGC2vSzwn0zwq6icD0CNvLjYb9oWOGicaGicaGicaGFqOGicaGicaGicaGCMv0DxjUihSGAwq6igL0zw0UAwqSihrLEhq6igL0zw0UDgv4Dcb9oWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbJB25ZDcbXDwvYEsa9icDtruXfq1qG','l2HLywX0AgaScIaGicaGicaGicbZzxj2AwnLsw5MBZOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9l2fWAs8','zgv0ywLSvgfIBgu','id0GEYbLEgvJDxrLih07cM1VzhvSzs5LEhbVCNrZlM1VzhvSzu5HBwuGpsaN','rxHWzwn0zwqGzxHWyw5KzwqGu1fmihn0CMLUzY4Gq2HLy2SGugf5Bg9HzfbYB2nLC3nVCI5WCM9JzxnZrMLSzvjLzMvYzw5JzxmGzMXVDY4','jYWkicaGicaGicbVBgreyxrHlaOGicaGicaGihjLC3bVBNnLrgf0ysWkicaGicaGicb7cIaGicaGicaGicb0B3bPyZOGA2fMA2fdB25MAwCUDg9WAwmGFhWGBNvSBcWkicaGicaGicaGigTLEuzPzwXKoIbRywzRyunVBMzPzY5RzxLgAwvSzcb8FcaN','l2XVB2T1CcaTie1LBMrHCgf0A2fUigrHDgeG','j107cIaGicaGicaGicbPzIaOx19Yzxn0CMLJDfzHBcaHpt0GBNvSBcaMjIbFx3jLC3rYAwn0vMfSice9psb1BMrLzMLUzwqPihSkicaGicaGicaGicaGy29UC3qGx19Yzxn0CMLJDenOzwnRid0GyxDHAxqGy2XPzw50lNf1zxj5kaOGicaGicaGicaGicaGicDtruXfq1qGmsbguK9nia','zhvny1m','id0GjdeGqu5eia','igLUzM86jYWGzxjYB3iPoWOGicaGCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGzMv0y2HPBMCGzw5KCg9PBNqGAw5MB3jTyxrPB24NlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktS','C2T1tNy','igXVB2T1CcbYzxf1zxn0oIbZzwfYy2G9jhTZzwfYy2H9lcbMAwX0zxjZpwaSigv4DhjHrMLSDgvYCYK7cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbSB29RDxaGzgf0ysbKzw5Nyw4GzMLSDgvYCYb0yw1IywHHBGOGicaGy29UC3qGBgLZDca9igf3ywL0ia','q3Lez1i','cGOGicaGCMv0DxjUihrLBxbSyxrLCZSkicb9cGOGic8QkGOGicaQie92zxjYAwrLigDLDeXPC3rrDwvYEsb1BNr1AYbTzw55zxn1ywLRyw4GzgvUz2fUigTLyNv0DwHHBIa','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','icHJAgLSzfnVzNrezwXLDgu9','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg1VzgLMAwvKqM9KEsK7cGOGicaGicaGignVBNnVBguUBg9NkgbtDgf0AwmGBg9VA3vWihDPDgGGC2vSzwn0l29YzgvYihjLC3vSDhm6icr7BgLZDc5Szw5NDgH9ihjLy29YzhmGzM91BMrGktSkicaGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGicaGignVDw50oIbSAxn0lMXLBMD0AcWkicaGicaGicaGigrHDge6igXPC3qScIaGicaGicaGicbZzwXLy3rLzfrHzZOGC2vSzwn0zwruywCScIaGicaGicaGicbXDwvYEtOGBw9KAwzPzwrcB2r5laOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFsbLBhnLihSkicaGicaGicaVlYbhDw5HA2fUig1VzgvSihvUDhvRig1LBMrHCgf0A2fUigrHDgeGzgvUz2fUig1LDgHVzcbSyw1HcIaGicaGicaGy29UC3qGBgLZDca9igf3ywL0ia','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKiokaLcbUBYbXDhKGzMLLBgqGy29UzMLNDxjLzcaOC2v0igf1Dg9dywXJDwXHDgvgAwvSzhmUDg90ywXFyw1VDw50lMzVCM11BgeGB3iGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uP','cI8Vifbpu1qGl2fWAs8','CMvXDwvZDfnJB3bL','zgv0zwn0vgv4DenVBhvTBG','igjLCMrHC2fYA2fUigTYAxrLCMLHcNjVDxrLCI5WB3n0kcCVzMLYC3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','oWOkicaGic8VifzHBgLKyxnPigrHBIbZyw5PDgfZAsbOzwfKzxiGzgf0ysbKzw5Nyw4Gy29UC3rYywLUDcaODgvYBwfZDwSGAgfZAcKkicaGigLMicH0ExbLB2yG','icaGic8VicGVCMvHzcWGl2zPCNn0lcbKyxrHDgfIBgvZlcbJCMvHDguSihvWzgf0zsKGzgKGC2f0DsbJAg9RzxbVAw50lcb0yw5Wysb1yMfOiejHC2vnB2rLBc9NzxrszwfKuxvLCNKUcG','zw5HyMXLza','FhWNic0Gj3X8y29KzsbHCYbKAxnWBgf5x3rLEhqIxqOGicaGicaGih0ScIaGicaGicaGzxHHBxbSzv9JDxn0B21FBg9VA3vWoIbSB29RDxbdB25MAwCGpYb7cIaGicaGicaGicaID2HLCMuIoIbBEYaIA2v5iJOGiMnVBxbHBNLFAwqIlcaIDMfSDwuIoIaIEw91CI1JB21Wyw55lwLKiIb9xsWkicaGicaGicaGicjZzwXLy3qIoIbBBg9VA3vWq29UzMLNlMLKrMLLBgqSigXVB2T1CenVBMzPzY50zxH0rMLLBgrDlaOGicaGicaGicaGiM5VDguIoIaIvxnPBMCGzMLLBgroyw1Ltg9VA3vWignVBMzPz3vYyxrPB24IcIaGicaGicaGFsa6ig51BgWScIaGicaGicaGzxHHBxbSzv9HzhzHBMnLzdOGEWOGicaGicaGicaGiNDOzxjLiJOGEWOGicaGicaGicaGicaIBg9NAwmIoIaIt1iIlaOGicaGicaGicaGicaIy29UzgL0Aw9UCYi6ifSkicaGicaGicaGicaGicb7icjRzxKIoIaI','laOGicaGicbJB21WB25LBNrZoIa','CMvMvgfIBgu','mZm0nJHZANnyBhq','ksaMjIa','iICScIaGicaGicaGzxHHBxbSztOG','icaGia','cIaGicbDoWOGicaGy29UC3qGzgf0yxrHyMXLC0zPzwXKCYa9ifSkicaGicaG','ie9srevsiejzigeU','zgvSzxrLzf9VBMX5','Dgv4DezPzwXKCW','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','y2fZy2fKzurLBgv0zq','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGicbJB25ZDcb0B3rHBefTB3vUDca9igfSBeL0zw1ZlNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGicbJB25ZDcbXDhKGpsboDw1IzxiOAxrLBs4','AgvHzgvYq2fSy3vSyxrPB25Z','zM9YBxvSyq','z3PVrKW','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','laOGicaGicbHzgP1C3rdB25MAwC6ia','iL0kicaGicaGicb9laOGicaGicaGigv4yw1WBgvFD2L0Af9VCMrLCMLUzZOGEWOGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGzxzLBNrdB250zxH0','B25ezwXLDgu','cIaGicOVcIaGz2v0tgLZDff1zxj5kg9WDgLVBNmGpsb7FsKGEWOGicaGlY8Gtg9HzcbXDwvYEsbKyxnHCIbKzw5Nyw4GCgXHy2vOB2XKzxiGCMvWBgfJzw1LBNqkicaGia','x2XVB2T1CenVBMzPzW','cIaGicaGicaGAxrLBs4','cIaGicaGih0PktSkicaGicaGyxDHAxqGDgHPCY5ZzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcbJywnOzurHDgeSicDZDgf0AwmNktSkcIaGicaGic8VifjLDhvYBIbKzw5Nyw4GC2vSzwn0zwqGzMXHzWOGicaGicbYzxr1CM4Gzgf0ys5TyxaOAxrLBsa9pIb7cIaGicaGicaGy29UC3qGCMvZDwX0id0GEWOGicaGicaGicaGAwq6igL0zw0U','jYKGCMv0DxjUig51BgW7cIaGicaGicaGicbPzIaOzgLYzwn0Aw9Uice9psaNqvndjYaMjIbKAxjLy3rPB24Git09icDervndjYKGCMv0DxjUig51BgW7cIaGicaGicaGicbYzxr1CM4Gycr7y29SDw1UFsaKE2rPCMvJDgLVBN1GoWOGicaGicaGih0PlMzPBhrLCIHcB29SzwfUktSkcIaGicaGicaGAwyGkg9YzgvYugfYDhmUBgvUz3rOid09psaWksb7cIaGicaGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNtM8GDMfSAwqGC29YDcbJB2X1Bw5ZihbYB3zPzgvKjYK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE29YzgvYugfYDhmUAM9PBIGNlcaNkx1GoWOGicaGicb9igvSC2uGEWOGicaGicaGic8Vie9YzgvYigj5ihrLEhqGzMLLBgqGkgD1BMfRyw4GywXPyxmGAMLRysbHzgePic0GzgvMyxvSDcbIzwHHDMLVCGOGicaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE2fSAwfZrMLLBgqGFhWGDgv4DezPzwXKFwa7cIaGicaGih0kcIaGicaGignVBNnVBguUBg9NkcC9pt0GrevcvuCG','zgvMyxvSDfnJB3bL','ihzHBhvLicGNicSGx19ZDhiUBgvUz3rOicSGjYbJAgfYCYKGzxHJzwvKCYbIyxnLigXLBMD0Aca','icaGicaGicaVlYbbDxrVlwnHBgn1Bgf0zsa','cIaGicaVlYbwywXPzgfZAsbKzxrHAwWGAxrLBxmGDw50DwSGBwfZDgvYlwrLDgfPBcaOB3bZAw9UywWGDw50DwSGDxbKyxrLkqOGicaGlY8Gvw50DwSGDxbKyxrLq29TCg9ZAxrLlcbKzxrHAwWGAxrLBxmGyMvYDxbHig9IAMvJDcbKzw5Nyw4GE2LUC2vYDdOGw10SihvWzgf0ztOGw10SigrLBgv0ztOGw119cIaGicbPzIaOzgf0ys4','cGOGicaGlY8GqNvPBgqGzxzLBNrdB250zxH0ihvUDhvRignVBxbVC2L0zsbOB29RCYaOAMLRysbJB21WB25LBNqGzw5NAw5LihrLCNnLzgLHkqOGicaGBgv0igv2zw50q29UDgv4Dca9ig51BgW7cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGigv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMuScIaGicaGicaGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','ih07cGOGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGihjLCs5IB2r5lNDOzxjLid0Gw3nVzNrezwXLDgvdB25KAxrPB25DoWOGih0GzwXZzsbPzIaOqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKPihSkicaGihjLCs5IB2r5lNDOzxjLlNvUC2HPzNqOC29MDerLBgv0zunVBMrPDgLVBIK7cIaGFsbLBhnLigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKPihSkicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGigLMicHVCMLNAw5HBeXVz2LJid09psaNqu5ejYKGEWOGicaGicbYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZlNvUC2HPzNqOC29MDerLBgv0zunVBMrPDgLVBIK7cIaGicb9igvSC2uGEWOGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicbSB2DPyZOGj0forcCScIaGicaGicaGy29UzgL0Aw9UCZOGwWOGicaGicaGicaGC29MDerLBgv0zunVBMrPDgLVBIWkicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGif0kicaGicaGFtSkicaGih0kicb9cGOGig5LEhqOktSkFsK7cG','jZOGEWOGicaGicaGihr5Cgu6icC','vuTKthe','l2zPCNn0oICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGlY8GvMfSAwrHC2KGCMvXDwvZDcbIB2r5cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYboB3jTywXPEMu6igfYCMf5ideGzwXLBwvUic0+ig9IAMvJDcaOyMfJA3DHCMqGy29TCgf0AwjSzsKkicaGigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIbYzxeUyM9KEs53AgvYzs5Szw5NDgGGpt09idePihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbYzxeUyM9KEs53AgvYzvSWxtSkicaGih0kcIaGicaVlYbwywXPzgfZAsb3AgvYzsbJBgf1C2uGlsbOyxj1CYbVyMPLy3qGDhvUz2DHBcb7A2v5lcb2ywX1zx0kicaGigLMicGHCMvXlMjVzhKUD2HLCMuGFhWGDhLWzw9MihjLCs5IB2r5lNDOzxjLice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj1bYB3bLCNr5ihDOzxjLigLZihjLCxvPCMvKigfZihTRzxKSihzHBhvLFsbVyMPLy3qNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6ici','ywDNCMvNyxrLq29UzMLN','AerTtLy','ksb7cIaGicaGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDZB2z0lwrLBgv0ztOGy29SDw1Uia','id0GtLvmtcCPoWOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','y29SDw1UCW','cI8VieTHzMTHifbYB2r1y2vYifnLCNzPy2uGDw50DwSGzxzLBNqGChvIBgLZAgLUzWPSzxqGA2fMA2ftzxj2AwnLid0GBNvSBdSkDhj5ihSkicbRywzRyvnLCNzPy2uGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3nLCNzPy2vZl2THzMTHu2vYDMLJzsCPlMDLDeLUC3rHBMnLkcK7cN0Gy2f0y2GGkguPihSkicbJB25ZB2XLlMvYCM9YkcDduKLusunbtdOGs2fMA2eGC2vYDMLJzsbMywLSzwqGDg8GBg9HzcbIDxqGs2fMA2eGChvIBgLZAgLUzYbPCYbJB25MAwD1CMvKoICSiguUBwvZC2fNzsK7cIaGDgHYB3CGztSkFqOklY8Gs2fMA2eGy29UzMLNDxjHDgLVBIbKyxjPihbHEwXVywqky29UC3qGA2fMA2fdB25MAwCGpsa','jYbMCM9Tia','igrHDgeGzgvSzxrLzcbZDwnJzxnZzNvSBhLGktSk','ydSkicaGicaGAwyGkhnLyxjJAfzHBhvLicyMihnLyxjJAfzHBhvLlNrYAw0OksaHpt0GjYCPihSkicaGicaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGignVBNn0igXPA2vwywX1zsa9igaLjhTLC2nHCgvKu2vHCMnOvMfSDwv9jwa7cIaGicaGicaG','zgf0ysb8FcbBxq','Cxr5rMLLBgq','igjHCNukCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','cGOGicaGicbMB3iGkgnVBNn0igHLywrLCIbVzIbOzwfKzxjszxn1BhrZksb7cIaGicaGicaGy29UC3qGzgv0ywLSuMvZDwX0CYa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHKzxrHAwXrDwvYEsWGw2HLywrLCLT0AgLZlNbYAw1HCNLlzxLDxsK7cGOGicaGicaGignVBxbVC2L0zvjLC3vSDhmUChvZAcH7cIaGicaGicaGicaUlI5OzwfKzxiScIaGicaGicaGicbBzgv0ywLSs2v5xtOGzgv0ywLSuMvZDwX0CWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbYzxr1CM4GEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6ignVBxbVC2L0zvjLC3vSDhmUBgvUz3rOlaOGicaGicaGigrHDge6ignVBxbVC2L0zvjLC3vSDhmkicaGicaGFtSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbYzwfKq29TCg9ZAxrLoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqO','ignVBxbVC2L0zsbYzwfKihn1y2nLC3nMDwW6icr7CMvZDwX0lMnVDw50ihX8idb9ihjLy29YzcHZkwaPoWOkicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGic4UlNjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbJB21WB3nPDguGCMvHzca','DgHPCY5HDwrPDenVBhvTBNmGpsbUDwXSoWO','oWOGicaGicbJB25ZDcbJB3vUDfrVDgfSuMvZDwX0id0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5kgnVDw50vg90ywXrDwvYEsK7cIaGicaGignVBNn0ihrVDgfSuMvJB3jKCYa9ignVDw50vg90ywXszxn1BhqGjIyGy291BNruB3rHBfjLC3vSDfSWxsa/ihbHCNnLsw50kgnVDw50vg90ywXszxn1BhrBmf0UDg90ywWPidOGmdSkcIaGicaGic8ViduUie1LBMDOAxr1BMCGANvTBgfOigrHDgeGDgvYzMLSDgvYic0Gz3vUywTHBIbYzwfKu291CMnLihvUDhvRihjLywqGB3bLCMf0Aw9UCWOGicaGicbSzxqGzMLSDgvYzwrszwnVCMrZid0GDg90ywXszwnVCMrZoWOGicaGicbPzIaOD2HLCMvdBgf1C2uPihSkicaGicaGicaVlYbbBhDHExmGD3jHCcbdveuVsK9jtIbXDwvYEsbMB3iGy291BNrPBMCGD2L0AcbMAwX0zxjZcIaGicaGicaGy29UC3qGy291BNrgAwX0zxjLzff1zxj5id0GBMvLzhntDwjXDwvYEsa/cIaGicaGicaGicaNu0vmrunuienpvu5ukcOPigfZihrVDgfSiezst00GkcCGkYbIyxnLuxvLCNKGkYaNksbIyxnLx3f1zxj5icCGkYb3AgvYzunSyxvZzsa6cIaGicaGicaGicaNu0vmrunuienpvu5ukcOPigfZihrVDgfSiezst00GjYaRihrOAxmUCMvHzfnVDxjJzsaRicCGjYaRihDOzxjLq2XHDxnLoWOGicaGicaGignVBNnVBguUBg9NkcDdB3vUDcbgAwX0zxjLzcbrDwvYEtONlcbJB3vUDezPBhrLCMvKuxvLCNKPoWOGicaGicaGignVBNnVBguUBg9NkcDdB3vUDcbgAwX0zxjLzcbqyxjHBwv0zxjZoICSihDOzxjLugfYyw1ZktSkicaGicaGicbJB25ZDcbJB3vUDezPBhrLCMvKuMvZDwX0id0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5kgnVDw50rMLSDgvYzwrrDwvYEsWGD2HLCMvqyxjHBxmPoWOGicaGicaGigzPBhrLCMvKuMvJB3jKCYa9ignVDw50rMLSDgvYzwrszxn1BhqGjIyGy291BNrgAwX0zxjLzfjLC3vSDfSWxsa/ihbHCNnLsw50kgnVDw50rMLSDgvYzwrszxn1BhrBmf0UDg90ywWPidOGmdSkicaGicaGFqOkicaGicaGlY8GnI4GtwvTyNvHDcbVCMrLCIbJBgf1C2uGBwvUz2D1BMfRyw4GyNvPBgrtB3j0q29SDw1UC0nSyxvZzqOGicaGicbJB25ZDcbVCMrLCKnSyxvZzsa9ihrOAxmUyNvPBgrtB3j0q29SDw1UC0nSyxvZzsHYzxnVBhzLzfnVCNrdB2X1Bw5Zlcb0AgLZlMrHDgf0ywjSzxngAwvSzhmPoWOkicaGicaGlY8GnY4GtwvUyw1IywHRyw4GCgfNAw5HDgLVBGOGicaGicbJB25ZDcbSAw1PDenSyxvZzsa9igaGteLnsvqGjhTWzxjqywDLFsbprKztrvqGjhTZDgfYDh1GoWOkicaGicaGlY8Goc4GtwvUAMfSyw5Ryw4GCxvLCNKGzMLUywWGlsb3CMfWienurs9kt0Loihf1zxj5ihrVigf2B2LKignVBhvTBIbHBwjPz3vPDhKkicaGicaGy29UC3qGCxvLCNKGpsbUzwvKC1n1yNf1zxj5id8kicaGicaGicaNu0vmrunuicOGrLjptsaOjYaRigjHC2vrDwvYEsaRicCPigjHC2vFCxvLCNKGjYaRicH3AgvYzunSyxvZzsb8FcaNjYKGkYbVCMrLCKnSyxvZzsaRigXPBwL0q2XHDxnLidOkicaGicaGicbIyxnLuxvLCNKGkYaIiciGkYb3AgvYzunSyxvZzsaRig9YzgvYq2XHDxnLicSGBgLTAxrdBgf1C2u7cIaGicaGignVBNnVBguUBg9NkcDgAw5HBcbrDwvYEtONlcbXDwvYEsK7cIaGicaGignVBNnVBguUBg9NkcDrDwvYEsbqyxjHBwv0zxjZoICSihDOzxjLugfYyw1ZktSkicaGicaGy29UC3qGzgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsWGD2HLCMvqyxjHBxmPoWOkicaGicaGy29UC3qGCMvZDwX0id0GEWOGicaGicaGigrYyxC6ihbHCNnLsw50kg9WDgLVBNmUzhjHDYb8FcaNmsCSideWksWkicaGicaGicbYzwnVCMrZvg90ywW6ihrVDgfSuMvJB3jKCYWkicaGicaGicbYzwnVCMrZrMLSDgvYzwq6igzPBhrLCMvKuMvJB3jKCYWkicaGicaGicbKyxrHoIbKyxrHihX8ifTDcIaGicaGih07cGOGicaGicaVlYbdywnOzsb0AguGCMvZDwX0icHPzIbLBMfIBgvKkqOGicaGicbHD2fPDcb0AgLZlNnLDenHy2HLzerHDgf0ywjSzxmOB3b0Aw9UCYWGCMvZDwX0ktSkcIaGicaGihjLDhvYBIbYzxn1Bhq7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxreyxrHDgfIBgvZoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbhzxqGzgf0ysbSAxn0igrLBMDHBIbTyw51ywWGCgfNAw5HDgLVBIb1BNr1AYbLBMrWB2LUDcaVBgLZDaOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0GugfYyw1LDgvYigrHCMKGCMvXDwvZDcbSAxn0cIaGicOGqhjLDhvYBNmGE09IAMvJDh0GsgfZAwWGCxvLCNKGzgvUz2fUigzVCM1HDcbSAxn0ihbHz2LUyxrPB24kicaGkI8kicbHC3LUyYbNzxrmAxn0kg9WDgLVBNmPihSkicaGihrYEsb7cIaGicaGignVBNn0ihSkicaGicaGicbWywDLid0GBNvSBcWkicaGicaGicbWzxjqywDLid0GmtaScIaGicaGicaGB2zMC2v0id0GmcWkicaGicaGicbZzwfYy2HwywX1zsa9icCNlaOGicaGicaGihnLyxjJAej5id0Gj2nVzguNlaOGicaGicaGihnVCNrFy29SDw1UCYa9ifTDlaOGicaGicaGihDOzxjLid0GBNvSBcWkicaGicaGicbZzwXLy3qGpsbUDwXSlaOGicaGicaGigXPBwL0id0GmtaWmaOGicaGicb9id0GB3b0Aw9UCZSkcIaGicaGignVBNn0ihbHz2LUyxrLid0GCgfNzsaHpt0GBNvSBdSkcIaGicaGic8VienHy2HLoIbdAgvJAYbPzIbKyxrHigv4Axn0CYbPBIbJywnOzqOGicaGicbJB25ZDcbZy0LUzM8GpsbZB3j0x2nVBhvTBNmGjIyGC29YDf9JB2X1Bw5ZlMXLBMD0Aca+idakicaGicaGica/ihnVCNrFy29SDw1UCY5TyxaOCYa9pIbGjhTZlMnVBhvTBN06jhTZlMrPCMvJDgLVBN1Gks5QB2LUkcCSjYKkicaGicaGica6icDKzwzHDwX0jZSkicaGicaGy29UC3qGy2fJAgvjBMzVid0GyhbHz2u6jhTWywDLFsWGCgvYugfNztOKE3bLCLbHz2v9lcbZB3j0oIr7C2njBMzVFsWGC2vHCMnOoIr7C2vHCMnOvMfSDwuGFhWGj25VBMuNFsr7D2HLCMuGpYaNlcb3AgvYztP5zxmNidOGjYD9ydSkicaGicaGy29UC3qGy2fJAgvKuMvZDwX0id0GyxDHAxqGDgHPCY5NzxrdywnOzwrmAxn0kg9WDgLVBNmPoWOGicaGicbPzIaOy2fJAgvKuMvZDwX0ksb7cIaGicaGicaGy29UC29Szs5SB2COyfTdywnOzv0GseLuigzVCIbSAxn0ic0GjhTJywnOzuLUzM99ycK7cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDdSkicaGicaGFqOGicaGicbJB25ZB2XLlMXVzYHGw0nHy2HLxsbnsvntigzVCIbSAxn0ic0GjhTJywnOzuLUzM99ycK7cGOGicaGicaVlYaXlIbnzw5KyxbHDgTHBIbXDwvYEsbKyxnHCGOGicaGicbSzxqGyMfZzvf1zxj5oWOGicaGicbPzIaOC2vSzwn0icyMiefYCMf5lMLZqxjYyxKOC2vSzwn0ksaMjIbZzwXLy3qUBgvUz3rOid4GmcKGEWOGicaGicaGignVBNn0ihnLBgvJDgvKvMfSAwrdB2X1Bw5Zid0GC2vSzwn0lMzPBhrLCIHJB2WGpt4GDgHPCY5YzwfKywjSzuzPzwXKCY5PBMnSDwrLCYHJB2WPktSkicaGicaGicbPzIaOC2vSzwn0zwrwywXPzenVBhvTBNmUBgvUz3rOid4GmcKGEWOGicaGicaGicaGlY8GC2vSzwn0igfKywXHAcbSyxbPC2fUigrPigf0yxmGC3vTyMvYigHHC2LSihjLC29SDxnPicH2Awv3tMfTzsdIHPiGDMLLD1f1zxj5cIaGicaGicaGicaVlYdIHPiGDgfIBgvoyw1LksWGyNvRyw4GAMfSDxiGDgvYCgLZywGGA2uGDgfIzwWGBwvUDgfOlIbcAwXHihn1BwjLCIbIzxj1CgekicaGicaGicaGic8VihzPzxCVCxvLCNKGA29TCgXLA3mSigTVBg9TigrPCgLSAwGGzgfYAsbZDwjXDwvYEsbZDw1IzxiGDgvYC2vIDxqUcIaGicaGicaGicbJB25ZDcbYzwfKuxvLCNKGpsb0AgLZlMDLDfjLywrrDwvYEsHVChrPB25ZktSkicaGicaGicaGignVBNn0igLZvMLLD1nVDxjJzsa9ihjLywrrDwvYEs50CMLTkcKGit09icGNu0vmrunuicOGrLjptsaNicSGDgHPCY5YzwfKu291CMnLktSkicaGicaGicaGigjHC2vrDwvYEsa9igLZvMLLD1nVDxjJzqOGicaGicaGicaGica/icDtruXfq1qGjYaRihnLBgvJDgvKvMfSAwrdB2X1Bw5ZlMPVAw4OjYWGjYKGkYaNiezst00GkcCGkYbYzwfKuxvLCNKGkYaNksbYzL9YzwfKjWOGicaGicaGicaGica6icDtruXfq1qGjYaRihnLBgvJDgvKvMfSAwrdB2X1Bw5ZlMPVAw4OjYWGjYKGkYaNiezst00GjYaRihrOAxmUCMvHzfnVDxjJztSkicaGicaGicb9igvSC2uGEWOGicaGicaGicaGyMfZzvf1zxj5id0GDgHPCY5NzxrszwfKuxvLCNKOB3b0Aw9UCYK7cIaGicaGicaGFqOGicaGicb9igvSC2uGEWOGicaGicaGigjHC2vrDwvYEsa9ihrOAxmUz2v0uMvHzff1zxj5kg9WDgLVBNmPoWOGicaGicb9cGOGicaGicaVlYaXyI4Grgv0zwTZAsbHCgfRywGGCxvLCNKGBwvUz2fUzhvUzYbkt0Loigf0yxuGq1rficHWzxjSDsbZDwjXDwvYEsb3CMfWCgLUzYKkicaGicaGy29UC3qGAxndDgvrDwvYEsa9igjHC2vrDwvYEs50B0XVD2vYq2fZzsGPlNrYAw0Oks5ZDgfYDhnxAxrOkcD3AxrOjYK7cIaGicaGignVBNn0igHHC0PVAw4GpsaVxgiOAw5Uzxj8BgvMDhXYAwDODhXJCM9ZC3XMDwXSkvXZk2PVAw5CyI9PlNrLC3qOyMfZzvf1zxj5ksb8FcaVxgjQB2LUxgiVAs50zxn0kgjHC2vrDwvYEsK7cIaGicaGignVBNn0ig5LzwrZu3vICxvLCNKGpsbPC0n0zvf1zxj5ihX8igHHC0PVAw47cGOGicaGicaVlYaYlIbcDwLSzcbxsevsrsbJBgf1C2uGDw50DwSGC2vHCMnOcIaGicaGigXLDcb3AgvYzunSyxvZzsa9iga','id0GtLvmtcCPoWOkicaGicaGicb1CgrHDgvqyxjHBxmUChvZAcHSB2nRzwrsB3DBjW','mZaYndmWnNPcuvbRrW','ih0PoW','cIaGicaVlYbhzxqGy29YCMvSyxrPB24GsuqGzNjVBsbOzwfKzxiGkg9WDgLVBMfSkqOGicaGy29UC3qGy29YCMvSyxrPB25jzca9ihjLCs5OzwfKzxjZwYD4lwnVCNjLBgf0Aw9UlwLKj10GFhWGBNvSBdSk','jYaOB25ezwXLDgu6ihjLC3rYAwn0ksiPoWOGicaGicaGicaGicaGihjLC3rYAwn0rxjYB3iUC3rHDhvZq29Kzsa9idqWotSkicaGicaGicaGicaGicb0AhjVDYbYzxn0CMLJDevYCM9YoWOGicaGicaGicaGicb9cIaGicaGicaGicb9cIaGicaGicaGFq','Cvjtrvy','Aw5JBhvKzv9KzwXLDgvK','ycK7cGOGicaGicaVlYberuXfveuGAgvHzgvYihjLy29YzaOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjrDwvYEsa9igberuXfveuGrLjptsaKE3rOAxmUD3jPDgvtB3vYy2v9ifDirvjficr7D2HLCMvdBgf1C2v9ifjfvfvstKLorYaQydSkicaGicaGy29UC3qGzgvSzxrLsgvHzgvYuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgrLBgv0zuHLywrLCLf1zxj5lcbWyxjHBxmPoWOkicaGicaGAwyGkgrLBgv0zuHLywrLCLjLC3vSDc5YB3DZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNuMvJB3jKig5VDcbMB3vUzcCPoWOGicaGicb9cGOGicaGicbJB25ZDcbKzwXLDgvKrgf0ysa9igrLBgv0zuHLywrLCLjLC3vSDc5YB3DZwZbDoWOGicaGicbJB25ZB2XLlMXVzYGNsgvHzgvYihjLy29YzcbKzwXLDgvKihn1y2nLC3nMDwXSEsCPoWOGicaGica','jZSkicaGignVBNn0ihjLy29YzeLKid0GCMvXlMjVzhLBChjPBwfYEuTLEv0GFhWGCMvXlMjVzhKUAwq7cIaGicbPzIaOixjLy29YzeLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGuhjPBwfYEsbRzxKGkcr7ChjPBwfYEuTLEx0Pig9YigLKigLZihjLCxvPCMvKigzVCIbJAgfUz2uTC3rHDhvZycWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOixjLCs5IB2r5lNn0yxr1CYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj3n0yxr1CYbPCYbYzxf1AxjLzcbMB3iGy2HHBMDLlxn0yxr1CYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwq','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yw4Gz2vUzxjPyYb2ywXPzgf0Aw9UcIaGicaGicaGzM9YicHJB25ZDcbMAwvSzcbVzIb0AgLZlNzHBgLKrMLLBgrZksb7cIaGicaGicaGicbJB25ZDcb2ywX1zsa9igrHDgfBzMLLBgrDoWOkicaGicaGicaGic8VifjLCxvPCMvKigzPzwXKihzHBgLKyxrPB24GDw50DwSGAw5Zzxj0cIaGicaGicaGicbPzIaOB3bLCMf0Aw9Uid09psaNAw5Zzxj0jYaMjIaOzMLLBgqGpt09icDPzcCGFhWGzMLLBgqGpt09icDUyw1LjYb8FcbMAwvSzca9pt0Gj25HBweNksKGEWOGicaGicaGicaGicbPzIaODMfSDwuGpt09ihvUzgvMAw5Lzcb8Fcb2ywX1zsa9pt0GBNvSBcb8Fcb2ywX1zsa9pt0GjYCPihSkicaGicaGicaGicaGicbPzIaOzMLLBgqGit09icDPzcCPihSGlY8GsuqGyMLZysbHDxrVlwDLBMvYyxrLzaOGicaGicaGicaGicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkgbgAwvSzcaNjhTMAwvSzh0NigLZihjLCxvPCMvKigzVCIaKE29WzxjHDgLVBN0GB3bLCMf0Aw9UycK7cIaGicaGicaGicaGicaGicbYzxn1BhqUAxnwywXPzca9igzHBhnLoWOGicaGicaGicaGicaGih0kicaGicaGicaGicaGFqOGicaGicaGicaGFqOkicaGicaGicaGic8VifnHBML0AxPLigrHBIb2ywXPzgf0zsb2ywX1zsbQAwTHigfKyqOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGCMvZDwX0lNnHBML0AxPLzerHDgfBzMLLBgrDid0GDgHPCY5Zyw5PDgL6zuzPzwXKvMfSDwuOzMLLBgqSihzHBhvLktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGic8VieDLBMvYAwmGzw1HAwWGDMfSAwrHDgLVBGOGicaGicaGigLMicHKyxrHlMvTywLSicyMiceVxLTExhnaxsTaw15CC0bDk1WUw15CC0bDkYqVlNrLC3qOzgf0ys5LBwfPBcKPihSkicaGicaGicaGihjLC3vSDc5LCNjVCNmUChvZAcGNsw52ywXPzcbLBwfPBcbMB3jTyxqNktSkicaGicaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicaGicaGFqOGicaGicb9cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkgbwywXPzgf0Aw9UigvYCM9YoIaKE2vYCM9YlM1LC3nHz2v9ycK7cIaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicb9cGOGicaGCMv0DxjUihjLC3vSDdSkicb9cGOGic8QkGOGicaQifnHBML0AxPLigzPzwXKihzHBhvLigjLCMrHC2fYA2fUihrPCguGzMLLBgqGkgDLBMvYAwmGzMfSBgjHy2SPcIaGicOGqhbHCMfTihTZDhjPBMD9igzPzwXKtMfTzsaTie5HBweGzMLLBgqkicaGkIbaCgfYyw0GEYP9ihzHBhvLic0GtMLSywKGzMLLBgqkicaGkIbaCMv0DxjUCYb7kN0Gu2fUAxrPEMvKihzHBhvLcIaGicOVcIaGC2fUAxrPEMvgAwvSzfzHBhvLkgzPzwXKtMfTzsWGDMfSDwuPihSkicaGigLMicH0ExbLB2yGDMfSDwuGpt09icDZDhjPBMCNksb7cIaGicaGic8VifrYAw0GD2HPDgvZCgfJzqOGicaGicb2ywX1zsa9ihzHBhvLlNrYAw0OktSkcIaGicaGic8VievZy2fWzsbZCgvJAwfSignOyxjHy3rLCNmGDw50DwSGBwvUy2vNywGGAw5Qzwn0Aw9UcIaGicaGihzHBhvLid0GDMfSDwuUCMvWBgfJzsGVwZW+xs9NlcaNjYK7cGOGicaGicaVlYbuCNvUy2f0zsbQAwTHihrLCMXHBhuGCgfUAMfUzWOGicaGicbPzIaODMfSDwuUBgvUz3rOid4GmJu1ksb7cIaGicaGicaGDMfSDwuGpsb2ywX1zs5ZDwjZDhjPBMCOmcWGmJu1ktSkicaGicaGFqOGicaGFqOkicaGihjLDhvYBIb2ywX1ztSkicb9cG','BM9Kzxm','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGDxbKyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','cIaGicaGignVBNn0ignHBgn1Bgf0Aw9UCYa9ia','Dg9ju09tDhjPBMC','cIaGicaVlYbmB2fKigfKDMfUy2vKihf1zxj5ihrLBxbSyxrLCWOGicaGy29UC3qGCxvLCNLezwzPBML0Aw9UCYa9ihSk','ktOGC3rYAxaGC3vMzML4icCJiYCGkYbRB25MBgLRidqWoqOGicaGicaGihSkicaGicaGicaGignVBNn0if9Fy3vYid0GBg9JA2vKuM93wYC','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjxn5C3rLBsuIlcaIC2vUC2L0AxzLiJOGzMfSC2uGFqOGicaGicaGicaGicbDcIaGicaGicaGicb9laOGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','oWOGicaGicbPzIaOB3bLCMf0Aw9UCY5PBNnLCNqGjIyGiufYCMf5lMLZqxjYyxKOB3bLCMf0Aw9UCY5PBNnLCNqPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bYB3bLCNr5ici','vMvVCMS','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YigfKANvZDgaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGywrQDxn0BwvUDhmGyxjYyxKkicaGigLMicGHCMvXlMjVzhKUywrQDxn0BwvUDhmGFhWGiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUywrQDxn0BwvUDhmPihX8ihjLCs5IB2r5lMfKANvZDg1LBNrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNywrQDxn0BwvUDhmGyxjYyxKGAxmGCMvXDwLYzwqGyw5Kig11C3qGBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','yxv0B0nHBgn1Bgf0zuzPzwXKCW','zMLLBgq','ieXjtuLuideNlaOGicaGicaGicaGicaGifTFx3jLC3rYAwn0vMfSxqOGicaGicaGicaGicaPoWOGicaGicaGicaGicbPzIaOx19Yzxn0CMLJDenOzwnRlNjVD3mUBgvUz3rOid4GmcKGEWOGicaGicaGicaGicaGignVBNn0ihjLC3rYAwn0rxjYB3iGpsbUzxCGrxjYB3iOiKnHBM5VDcbKzwXLDgu6ihjLy29YzcbPCYbZDgLSBcbYzwzLCMvUy2vKigj5icC','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEWOGicaGicbJB25ZDcbKzxrHAwXZid0GyNvPBgreDxbSAwnHDgvezxrHAwXZkgvYCM9YktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrQDxn0Aw5Nia','B2jQzwn0','r2vzA0W','yMLcqM8','icaGic8VifbYAw9YAxr5idi6ihzPzxDrDwvYEsaODMLYDhvHBcb2Awv3igrHCMKGCgf5Bg9HzcKkicaGia','jZSkicaGicaG','zM9YzwLNBKTLEq','ywDNCMvNyxrL','zgLmCgC','iJOGEWOGicaGicaGicaGicaIzMLLBgqXiJOGiNzHBhvLmsiScIaGicaGicaGicaGicjMAwvSzdiIoIaIDMfSDwuYiIWkicaGicaGicaGicaGiG','jYWGDMfSDwu6ia','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkhjLCs5IB2r5ktSkcIaGicaGignVBNnVBguUBg9NkgbmB29RDxaGD2L0AcbMAwX0zxiGCMvZDwX0CZOGjhTSAxn0lMXLBMD0Ah0GCMvJB3jKCYbMB3vUzgaPoWOGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6igXPC3qUBgvUz3rOlaOGicaGicaGigrHDge6igXPC3qScIaGicaGicaGCxvLCNK6ihjLCs5IB2r5laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOkicaGih0GzwXZzsb7cIaGicaGic8ViezVCM1HDcbSyw1Higf0yxuGCMvXDwvZDcb0yw5WysbxsevsrsbJBgf1C2uGDgv0yxbPigrLBMDHBIbtruXfq1qkicaGicaGy29UC29Szs5SB2COj1vZAw5NigXLz2fJEsbMB3jTyxqGD2L0AcbZzwXLy3rLzf90ywCGB3iGC2vSzwn0lw9UBhKGCMvXDwvZDcCPoWOkicaGicaGy29UC3qGC2vSzwn0zwruywCGpsbYzxeUyM9KEs5ZzwXLy3rLzf90ywCGFhWGjYC7cIaGicaGignVBNnVBguUBg9Nkga','id0GrKfmu0u','zgf0yxrHyMXLC1f1zxj5','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','DxbKyxrLzej5','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','DhjPBq','q3fWzKG','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','Aw5JBhvKzxm','mteWnZv3reLVChy','laOGicaGicaGihrVDgfSuMvJB3jKCZOGzMLSDgvYzwrszwnVCMrZlaOGicaGicaGihrVDgfSvw5MAwX0zxjLzdOGDg90ywXszwnVCMrZcIaGicaGih07cGOGicaGicbPzIaOCgfNAw5HDguPihSkicaGicaGicbYzxn1BhqUCgfNzsa9ihbHz2u7cIaGicaGicaGCMvZDwX0lNbLCLbHz2uGpsbWzxjqywDLoWOGicaGicb9cGOGicaGicaVlYbdywnOztOGu3rVCMuGCMvZDwX0igLUignHy2HLcIaGicaGigf3ywL0ihrOAxmUC2v0q2fJAgvKtgLZDcHVChrPB25ZlcbYzxn1BhqPoWOGicaGicbJB25ZB2XLlMXVzYHGw0nHy2HLxsbtrvqGzM9YigXPC3qGlsaKE2nHy2HLsw5MB31GktSkcIaGicaGihjLDhvYBIbYzxn1Bhq7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmAxn0oICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbnzw1Iyw5NDw4Gv0HfuKuGy2XHDxnLigrHCMKGzMLSDgvYig9IAMvJDaOGicaQiebWyxjHBsb7t2jQzwn0FsbMAwX0zxjZic0Gt2jQzwn0igzPBhrLCIbKzw5Nyw4GzM9YBwf0ihTJB2X1Bw46ihzHBhvLFqOGicaQiebYzxr1CM5ZihTZDhjPBMD9ifDirvjfignSyxvZzsbtuuWGyxrHDsbLBxb0EsbZDhjPBMCkicaGkI8kicbIDwLSze9IAMvJDezPBhrLCKnSyxvZzsHMAwX0zxjZksb7cIaGicbPzIaOiwzPBhrLCNmGFhWGDhLWzw9MigzPBhrLCNmGit09icDVyMPLy3qNihX8ie9IAMvJDc5RzxLZkgzPBhrLCNmPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGy29UC3qGy29UzgL0Aw9UCYa9ifTDoWOkicaGigzVCIaOy29UC3qGw2nVBhvTBIWGDMfSDwvDig9Mie9IAMvJDc5LBNrYAwvZkgzPBhrLCNmPksb7cIaGicaGic8VifzHBgLKyxnPigTVBg9TigHHCNvZigfKysbKywXHBsb2ywXPzezPzwXKCWOGicaGicbPzIaODgHPCY52ywXPzezPzwXKCY5PBMnSDwrLCYHJB2X1Bw4PicyMihzHBhvLice9psbUDwXSicyMihzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09icCNksb7cIaGicaGicaGlY8GrxnJyxbLihzHBhvLihvUDhvRig1LBMnLz2fOifnrtcbPBMPLy3rPB24kicaGicaGicbJB25ZDcbLC2nHCgvKvMfSDwuGpsb2ywX1zs50B1n0CMLUzYGPlNjLCgXHy2uOlYCVzYWGiICNiIK7cIaGicaGicaGy29UzgL0Aw9UCY5WDxnOkgaKE2nVBhvTBN0GpsaNjhTLC2nHCgvKvMfSDwv9j2aPoWOGicaGicb9cIaGicb9cGOGicaGCMv0DxjUignVBMrPDgLVBNmUBgvUz3rOid4Gmca/ignVBMrPDgLVBNmUAM9PBIGNieforcaNksa6icCNoWOGih0kcG','DMLLD05HBwu','ihLHBMCGBwv3yxjPC2KGzNvUz3nPlwz1BMDZAsbKyxjPiejHC2vnB2rLBaOGkIbuywjSztOG','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaXks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','D2HLCMvdBgf1C2uGkZ0GycbbtKqGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydS','icaGicaGjW','jYWkicaGicaGDMLLD05HBwu6icC','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','BwfW','cIaGicaGic8VifnVzNqTzgvSzxrLihzPC2LIAwXPDhKGC2nVCguGkfiXnsKkicaGicaGD2HLCMvdB25KAxrPB25ZlNb1C2GOya','AxnbCNjHEq','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifrVBgfRigzVCM1HDcbHzhzHBMnLzcaOy29UzgL0Aw9UCY9SB2DPyYKkicaGigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZihX8ihjLCs5IB2r5lNDOzxjLlMXVz2LJksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0fKDMfUy2vKihDOzxjLigzVCM1HDcbPCYbUB3qGC3vWCg9YDgvKigLUic9MAxjZDcbLBMrWB2LUDc4GvxnLic9YzwfKigvUzhbVAw50igzVCIbJB21WBgv4ihf1zxjPzxmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbHzgeGzgKGCMvHzgfIBgvgAwvSzhmkicaGignVBNn0ihzHBgLKrMLLBgrZid0G','ksb8FcaWktS','y3jLyxrLq29TCg9ZAxrL','ih0kicaGicaGicbDcIaGicaGih0PoWOGicaGicbPzIaOiv9FC2rdAgvJAY5ZDwnJzxnZihX8icfFx3nKq2HLy2SUzgf0ysb8FcbFx3nKq2HLy2SUzgf0ys5Szw5NDgGGpt09idaPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicaGig1LC3nHz2u6icC','y3jLyxrLzej5','yM9VBgvHBG','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLyxjJAcaTieTHDgeGA3vUy2KGCgvUy2fYAwfUcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGicaGDhj5ihSkicaGicaGy29UC3qGCxvLCNKGpsaNu0vmrunuia','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGlY8GuKvbrcbVCgvYyxrPB25ZoIbPBMPLy3qGC2nVCguGAw50BYbYzxeUyM9KEs53AgvYzqOGigLMicHBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNCMvHzc1JB21WB3nPDguNxs5PBMnSDwrLCYHLBMrWB2LUDcKPihSkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbBC2nVCgvdB25KAxrPB25DoWOGicaGFsbLBhnLigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxeUyM9KEs53AgvYzs51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGih0GzwXZzsbPzIaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksb7cIaGicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGicaGAwyGkg9YAwDPBMfStg9NAwmGpt09icDbtKqNksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCY51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGicaGFsbLBhnLihSkicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicaGigXVz2LJoIaNqu5ejYWkicaGicaGicaGignVBMrPDgLVBNm6ifSkicaGicaGicaGicaGC2nVCgvdB25KAxrPB24ScIaGicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGicaGxqOGicaGicaGih07cIaGicaGih0kicaGih0kicb9cGOGic8VierftevurtOGChjLCgvUzcbZy29WzsbJB25KAxrPB24GDg8GD2HLCMuGyxjYyxKkicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNksb7cIaGicbPzIaOCMvXlMjVzhKUD2HLCMuPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUDw5ZAgLMDcHZy29WzunVBMrPDgLVBIK7cIaGicaGih0kicaGih0kicb9cGOGic8ViensrufursaVieferdOGzM9Yy2uGC2nVCguGy29SDw1UihzHBhvLcIaGAwyGkgvUzhbVAw50id09psaNywrKjYb8FcbLBMrWB2LUDca9pt0Gj2nYzwf0zsCPihSkicaGihjLCs5IB2r5wYC','jYaOyMfZzsbSzw5NDgGG','lMDLDerHDgeOEWOGicaGicaGicaGD2HLCMu6ifT7igTLEtOGzMLYC3rdB25KAxrPB24UA2v5lcb2ywX1ztOGzMLYC3rdB25KAxrPB24UDMfSDwuGFv0kicaGicaGicb9ktSkcIaGicaGicaGAwyGkcfLEgLZDgLUz0rHDgeUC3vJy2vZCYb8FcaHzxHPC3rPBMDeyxrHlMrHDgeGFhWGzxHPC3rPBMDeyxrHlMrHDgeUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicaGig1LC3nHz2u6icC','jZSkcIaGicaGic8VienVBMzPz3vYyxrPB24GB3b0Aw9UCWOGicaGicbJB25ZDcbSB2DNAw5Nrw5HyMXLzca9ignVBMzPzY5SB2DNAw5Nice9psbMywXZztSkicaGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGicbSB2DNzxiUAw5MBYH7cIaGicaGicaGzxzLBNq6icDTB2r1BgvFC3rHCNrPBMCNlaOGicaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicaGihbVCNqScIaGicaGicaGy29YCZOGChjVy2vZCY5LBNyUq09su19ftKfcteveice9psaNzMfSC2uNlaOGicaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGicbSB2DNAw5NoIbSB2DNAw5Nrw5HyMXLzcWkicaGicaGicbHCgLlzxK6igfWAuTLEvjLCxvPCMvKcIaGicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGicaVlYbdt1jtig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbdt1jtx0voqujmruqGzgfUienpuLnFt1jjr0LouYbKAsaUzw52kqOGicaGicbHChaUDxnLkgnVCNnnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cGOGicaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGicbHChaUDxnLkhnLy3vYAxr5sgvHzgvYCY5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GsLnptIbWyxjZAw5Nig1PzgrSzxDHCMuGzgvUz2fUigvYCM9YigHHBMrSAw5NcIaGicaGigfWCc51C2uOyM9KEvbHCNnLCI5QC29UkhSkicaGicaGicbSAw1PDdOGjZeWBwiNlaOGicaGicaGihzLCMLMEtOGkhjLCsWGCMvZlcbIDwySigvUy29KAw5Nksa9pIb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGzw1WDhKGyNvMzMvYcIaGicaGicaGicbPzIaOyNvMlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGicaGicbYzxr1CM47cIaGicaGicaGicb9cGOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGsLnptI5WyxjZzsHIDwyPoWOGicaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGsLnptIbqyxjZzsbfCNjVCIbMCM9Ticr7CMvXlMLWFtOGjhTLCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKiePtt04GCgf5Bg9HzcCScIaGicaGicaGicaGicaGBwvZC2fNztOGj1rOzsbWyxLSB2fKihnLBNqGAxmGBM90igeGDMfSAwqGsLnptIbMB3jTyxqNlaOGicaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2uScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbku09ojYK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9ksK7cGOGicaGicaVlYbvuKWTzw5JB2rLzcbWyxjZAw5Nig1PzgrSzxDHCMukicaGicaGyxbWlNvZzsHIB2r5ugfYC2vYlNvYBgvUy29KzwqOEWOGicaGicaGigv4DgvUzgvKoIb0CNvLlaOGicaGicaGigXPBwL0oIaNmtbTyICkicaGicaGFsKPoWOkicaGicaGlY8GuMvXDwvZDcbSB2DNAw5Nig1PzgrSzxDHCMuGkfbPBM8TyMfZzwqPcIaGicaGigLMicHSB2DNAw5Nrw5HyMXLzcKGEWOGicaGicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGicaGicaVlYbhzw5LCMf0zsbYzxf1zxn0ieLecIaGicaGicaGicbYzxeUAwqGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lwLKj10GFhWGDxvPzhy3kcK7cIaGicaGicaGicbYzxmUC2v0kcDylvjLCxvLC3qTsuqNlcbYzxeUAwqPoWOkicaGicaGicaGic8VienYzwf0zsbZy29WzwqGBg9Nz2vYihvUDhvRihjLCxvLC3qGAw5PcIaGicaGicaGicbYzxeUBg9Nid0Gy3jLyxrLuMvXDwvZDeXVz2DLCIH7cIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKlaOGicaGicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGicaGihbHDgG6ihjLCs5WyxrOlaOGicaGicaGicaGicbPCdOGCMvXlMLWcIaGicaGicaGicb9ktSkcIaGicaGicaGicaVlYbdyxb0DxjLihn0yxj0ihrPBwukicaGicaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicaGicaGlY8Gtg9NihjLC3bVBNnLigTLDgLRysbZzwXLC2fPcIaGicaGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicaGicaGy29UC3qGw3nLy29UzhmSig5HBM9ZzwnVBMrZxsa9ihbYB2nLC3mUAhj0Aw1Lkhn0yxj0vgLTzsK7cIaGicaGicaGicaGignVBNn0igr1CMf0Aw9UtxmGpsbWyxjZzuzSB2f0kcHZzwnVBMrZicOGmtaWmcaRig5HBM9ZzwnVBMrZic8Gmwu2ks50B0zPEgvKkdiPktSkicaGicaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGicaGicb9ktSkcIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8ViefqssblzxKGDMfSAwrHDgLVBIbTAwrKBgv3yxjLicHJB25ZDgfUDc10Aw1LignVBxbHCMLZB24PcIaGicaGigLMicHHCgLlzxLszxf1AxjLzcKGEWOGicaGicaGignVBNn0ignYExb0BYa9ihjLCxvPCMuOj2nYExb0BYCPoWOGicaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicaGigfWCc51C2uOjY9HCgKNlcaOCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicaGigLMicGHyxbPs2v5ksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbJB25ZDcbWCM92AwrLzeTLEsa9iej1zMzLCI5MCM9TkgfWAuTLEsK7cIaGicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGicaHy3j5ChrVlNrPBwLUz1nHzMvfCxvHBcHLEhbLy3rLzeTLEsWGChjVDMLKzwrlzxKPksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifjHDguGBgLTAxrPBMCGBwLKzgXLD2fYzsaOC3rVCMu6ig1LBw9YEsb1BNr1AYbZAw5NBguGBw9KzsWGuMvKAxmGDw50DwSGy2X1C3rLCIbTB2rLkqOGicaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicaGigfWCc51C2uOjY9HCgKNlcbYyxrLtgLTAxrLCI5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GswrLBxbVDgvUy3KGBwLKzgXLD2fYzsaOChjVDgvJDhmGBxv0yxrPB24Gzw5KCg9PBNrZigzYB20GzhvWBgLJyxrLigv4zwn1DgLVBIKkicaGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicaGigfWCc51C2uOjY9HCgKNlcbPzgvTCg90zw5JEu1PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkicaGicaGFqOkicaGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGicaGyxbWlNvZzsGNl2fWAsCSigjVzhLpChrPB25ZtwLKzgXLD2fYzs5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8Gqxv0BY1SB2fKihbSDwDPBIaOAMLRysbHzgePcIaGicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','jY50B0XVD2vYq2fZzsGPksb7cIaGicaGicaGicbJB250Aw51ztSGlY8GChjPBwfYEsbRzxKGC3vKywGGywrHcIaGicaGicaGFqOkicaGicaGicaVlYbdAgvJAYbQAwTHigfKysbtuuWGzxHWCMvZC2LVBIbKzw5Nyw4GywXPyxmGkg1LBMDNDw5HA2fUieftkqOGicaGicaGignVBNn0igfSAwfZuMvNzxGGpsbUzxCGuMvNrxHWkcCOlISPxfXZk2fZxfXZkYHCxhCRksqNlcaNAsCPoWOGicaGicaGignVBNn0igfSAwfZtwf0y2GGpsbJB2X1Bw4UBwf0y2GOywXPyxnszwDLEcK7cIaGicaGicaGAwyGkgfSAwfZtwf0y2GPihSkicaGicaGicaGignVBNn0igv4ChjLC3nPB24GpsbHBgLHC01HDgnOwZfDlNrYAw0OktSkicaGicaGicaGignVBNn0igfSAwfZid0GywXPyxnnyxrJAfSYxs50CMLTkcK7cIaGicaGicaGicbZzwXLy3rdBgf1C2uGkZ0GycWGjhTLEhbYzxnZAw9UFsbbuYaKE2fSAwfZFwa7cIaGicaGicaGicb0zxH0rMLLBgqGpsbHBgLHCZSkicaGicaGicaGigfSAwfZrMLLBgqGpsbHBgLHCZSkicaGicaGicaGigjYzwfRoYaVlYbNDw5HA2fUihLHBMCGCgvYDgfTysbZzwjHz2fPihrLEhqGzMLLBgqkicaGicaGicb9cGOGicaGicaGic8VienOzwnRigPPA2eGC2LTCgXLigzPzwXKig5HBwukicaGicaGicbPzIaODMfSAwruzxH0rMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGFhWGy29SDw1Uid09psaN','r0fSBM8','icOG','CvHtzfC','EhvzBLa','j107cIaGicaGicaGicaVlYbqzw1Py3uGpsbRB2XVBsbgsYbOywrPCIbUB24TBNvSBdSGBNvSBc91BMrLzMLUzwqG4OAsihnRAxaGkezlig51BgXHyMXLlcb0ywSGywrHihbHCMvUDcKUcIaGicaGicaGicbPzIaOx19MA1zHBcaHpt0GBNvSBcaMjIbFx2zRvMfSice9psb1BMrLzMLUzwqPihSkicaGicaGicaGicaGy29UC3qGx19MA1jLCYa9igf3ywL0ihbVB2WUCxvLCNKOcIaGicaGicaGicaGicaGj1nftevdvcaXiezst00G','cGOGicaGicbJB25ZDcbKzxrHAwXpCgvYyxrPB25Zid0Gzgf0yvTKzxrHAwXlzxLDihX8ihT9oWOGicaGicbJB25ZDcb7igLUC2vYDdOGAw5Zzxj0sxrLBxmGpsbBxsWGDxbKyxrLoIb1CgrHDgvjDgvTCYa9ifTDlcbKzwXLDgu6igrLBgv0zuL0zw1Zid0Gw10GFsa9igrLDgfPBe9WzxjHDgLVBNm7cGOGicaGicbJB25ZDcbKzwXLDgvKsxrLBxmGpsbBxtSkicaGicaGy29UC3qGDxbKyxrLzeL0zw1Zid0Gw107cIaGicaGignVBNn0igLUC2vYDgvKsxrLBxmGpsbBxtSkcIaGicaGic8VideUifbYB2nLC3mGrevmrvrfig9WzxjHDgLVBNmGzMLYC3qkicaGicaGzM9YicHJB25ZDcbPDgvTig9MigrLBgv0zuL0zw1Zksb7cIaGicaGicaGAwyGkcfPDgvTw2rLDgfPBfbYAw1HCNLlzxLDksb7cIaGicaGicaGicb0AhjVDYbUzxCGrxjYB3iOye1PC3nPBMCGjhTKzxrHAwXqCMLTyxj5s2v5FsbPBIbKzwXLDguGB3bLCMf0Aw9UycK7cIaGicaGicaGFqOkicaGicaGicbJB25ZDcbKzwXLDgvrDwvYEsa9igberuXfveuGrLjptsaKE2rLDgfPBfrHyMXLtMfTzx0Gv0HfuKuGjhTKzxrHAwXqCMLTyxj5s2v5Fsa9icqXifjfvfvstKLorYaQydSkicaGicaGicbJB25ZDcbKzwXLDgvszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgvSzxrLuxvLCNKSifTPDgvTw2rLDgfPBfbYAw1HCNLlzxLDxsK7cGOGicaGicaGigLMicHKzwXLDgvszxn1BhqUCM93CY5Szw5NDgGGpIaWksb7cIaGicaGicaGicbKzwXLDgvKsxrLBxmUChvZAcHKzwXLDgvszxn1BhqUCM93C1SWxsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicbJB25ZB2XLlMXVzYHGrgvSzxrLzcaKE2rLBgv0zwrjDgvTCY5Szw5NDgH9igrLDgfPBcbPDgvTkhmPycK7cGOGicaGicaVlYaYlIbqCM9JzxnZifvqrefursbVCgvYyxrPB25ZcIaGicaGigzVCIaOy29UC3qGAxrLBsbVzIb1CgrHDgvjDgvTCYKGEWOGicaGicaGigLMicGHAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsKGEWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbnAxnZAw5Nicr7zgv0ywLSuhjPBwfYEuTLEx0GAw4GDxbKyxrLig9WzxjHDgLVBMaPoWOGicaGicaGih0k','ChvZAa','cIaGicaVlYbfDMvUDcbSAwzLy3LJBguGDMfYAwfIBgvZcIaGicbSzxqGB2XKrgf0ysa9ig51BgW7cIaGicbSzxqGBMv3rgf0ysa9ig51BgW7cIaGicbJB25ZDcbYzxf1zxn0rgf0ysa9ihjLCs5IB2r5oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGOGicaGlY8Gpt09ieLUDgvNCMf0zwqGvhjHBNnHy3rPB24GzgvUz2fUiev2zw50ieXPzMvJEwnSzsa9pt0kicaGic8Vig9SzerHDgeGzMv0y2GGkYbVBKjLzM9YzsaRig1HAw4GB3bLCMf0Aw9UicSGB25bzNrLCIbKAwvRC2vRDxnPigrHBgfTihnHDhuGDhjHBNnHy3rPB24GC2nVCgukicaGic8VigrPigrHBgfTig1VzgvSlMv4zwn1DgvuCMfUC2fJDgLVBLDPDgHfDMvUDhmOkqOGicaGAwyGkgnVBxbVBMvUDevUz2LUzsaMjIbdB250zxH0qNvPBgrLCIKGEWOGicaGicaVlYbhDw5HA2fUigLUDgvNCMf0zwqGDhjHBNnHy3rPB24GBw9KzwWGzgvUz2fUigv2zw50igXPzMvJEwnSzqOGicaGicb0CNKGEWOGicaGicaGignVBNn0igv2zw50q29UDgv4Dca9ihSkicaGicaGicaGignVBxbVBMvUDevUz2LUztOGy29TCg9Uzw50rw5NAw5LlaOGicaGicaGicaGq29UDgv4Dej1AwXKzxi6ienVBNrLEhrcDwLSzgvYlaOGicaGicaGicaGDgfIBgvoyw1LoIaN','jZSkcIaGicaVlYbtzxr1Ccb2Awv3tMfTzsb1BNr1AYbVCgvYyxnPihjLywqGAMLRysbIzxjIzwrHigrHCMKGDgfIBgvoyw1LcIaGicb0AgLZlNzPzxDoyw1Lid0GjW','rgnjwu0','t1nouey','oICSigvYCM9YktSk','l2nOyw5Nzs1ZDgf0DxmGlsbdAgfUz2uGC3rHDhvZia','cIaGicbJB25ZDcbYzxn1BhqGpsbHD2fPDca','CMvZDg9Yzq','zgv0ywLSuxvLCNK','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzgf0ywjHC2uGzxjYB3jZcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEYaVlYbqB3n0z3jLu1fmihvUAxf1zsb2Aw9SyxrPB24kicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIK7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeDxbSAwnHDguGzw50CNKNlaOGicaGicaGig1LC3nHz2u6icDbihjLy29Yzcb3AxrOihrOAxmGDMfSDwuGywXYzwfKEsbLEgLZDhmNlaOGicaGicaGic4UlIHKzxrHAwXZid8GEYbKzxrHAwXZih0GoIb7FsKScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLihvWzgf0Aw5Nia','cIaGicaGih0kcIaGicaGic8VidmUifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicaGigXLDcb3AgvYzvbHCMfTCYa9ifTDoWOGicaGicbPzIaOD2HLCMuGjIyGkefYCMf5lMLZqxjYyxKOD2HLCMuPihX8icH3AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOD2HLCMuUy29UzgL0Aw9UCYKPksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbSzxqGCgfYyw1Zid0Gw107cIaGicaGicaGicbSzxqGCgfYyw1jBMrLEca9ide7cIaGicaGicaGicbJB25ZDcb3AgvYzvjLC3vSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOD2HLCMuSihbHCMfTCYWGCgfYyw1jBMrLEcWGjYCSihrOAxmUCMvHzgfIBgvgAwvSzhmPoWOGicaGicaGicaGAwyGkhDOzxjLuMvZDwX0lNnXBcKGEWOGicaGicaGicaGicbPzIaOD2HLCMvdBgf1C2uPihSkicaGicaGicaGicaGicb3AgvYzunSyxvZzsaRpsaNieforcaOjYaRihDOzxjLuMvZDwX0lNnXBcaRicCPjZSkicaGicaGicaGicaGFsbLBhnLihSkicaGicaGicaGicaGicb3AgvYzunSyxvZzsa9icDxsevsrsaNicSGD2HLCMvszxn1BhqUC3fSoWOGicaGicaGicaGicb9cIaGicaGicaGicaGihDOzxjLugfYyw1Zid0GD2HLCMvszxn1BhqUCgfYyw1ZoWOGicaGicaGicaGFqOGicaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaGic8ViezHAwWTy2XVC2vKihDOzxjLlwzPzwXKoIb0zxj1C2THBIbLCNjVCIb0zxjZDhj1A3r1CIbHCgeGywrHBNLHicHQyw5Nyw4GyNvUz2T1CWOGicaGicaGicaGlY8GAMfKAsbWzxnHBIbNzw5LCMLRksbHz2fYigHHBMrSzxiGyMLZysbTzw1MB3jTyxqGCMvZCg9UCYaRigrLDI1NyxrLihzHBgLKrMLLBgrZlGOGicaGicaGicaGAwyGkguUy29Kzsa9pt0Gj0LovKfmsurFv0HfuKvFrKLfteqNksb0AhjVDYbLoWOGicaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYa0lIbnzw5NAgL0Dw5NihrVDgfSigrHDgeGA2vZzwX1CNvOyw4GkhrHBNbHigzPBhrLCIKkicaGicaGy29UC3qGy291BNruB3rHBff1zxj5id0GBMvLzhntDwjXDwvYEqOGicaGicaGid8Gj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicGNicSGyMfZzvf1zxj5icSGjYKGyMfZzv9XDwvYEq','l2rHDgf0ywjSzxmGlsbeyxrHihvUDhvRierHDgfuywjSzxmkCM91DgvYlNbVC3qOjY9KyxrHDgfIBgvZjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','zM9YrwfJAa','mJa2ntm1ouPIwgDbta','jYWkicaGicaGBw9KDwXLtMfTztOGjW','cIaGlYOQcIaGicOGvMfSAwrHDguGzMLLBgqGzgvUz2fUignVBNn0CMfPBNrZcIaGicOGqhbHCMfTihTZDhjPBMD9igzPzwXKtMfTzsaTie5HBweGzMLLBgqkicaGkIbaCgfYyw0GEYP9ihzHBhvLic0GtMLSywKGzMLLBgqkicaGkIbaCgfYyw0GE3n0CMLUz30GB3bLCMf0Aw9Uic0Gt3bLCMf0Aw9UicHPBNnLCNqVDxbKyxrLkqOGicaQiebYzxr1CM5ZihTpyMPLy3r9ifzHBgLKyxrPB24GCMvZDwX0ihT2ywXPzcWGzxjYB3jZlcb3yxjUAw5NCYWGC2fUAxrPEMvKFqOGicaQlWOGigfZEw5JihzHBgLKyxrLrMLLBgrdB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbVCgvYyxrPB24GpsaNAw5Zzxj0jYKGEWOGicaGy29UC3qGy29UzMLNid0GDgHPCY52ywXPzgf0Aw9Uq29UzMLNw2zPzwXKtMfTzv07cIaGicbPzIaOiwnVBMzPzYKGEWOGicaGicbYzxr1CM4GE3zHBgLKoIb0CNvLlcbZyw5PDgL6zwq6ihzHBhvLlcbLCNjVCNm6ifTDlcb3yxjUAw5NCZOGw119oWOGicaGFqOkicaGignVBNn0ihjLC3vSDca9ihSkicaGicaGDMfSAwq6ihrYDwuScIaGicaGigvYCM9YCZOGw10ScIaGicaGihDHCM5PBMDZoIbBxsWkicaGicaGC2fUAxrPEMvKoIb2ywX1zqOGicaGFtSkcIaGicbJB25ZDcbJB25ZDhjHAw50CYa9ignVBMzPzY5JB25ZDhjHAw50CYb8Fcb7FtSkicaGignVBNn0igzPzwXKvhLWzsa9ignVBMzPzY50ExbLihX8icDZDhjPBMCNoWOkicaGic8VideUienOzwnRihjLCxvPCMvKcIaGicbPzIaOy29UC3rYywLUDhmUCMvXDwLYzwqGjIyGkhzHBhvLid09psb1BMrLzMLUzwqGFhWGDMfSDwuGpt09ig51BgWGFhWGDMfSDwuGpt09icCNksKGEWOGicaGicaVlYbtA2LWoIbHDxrVr2vUzxjHDguGyxrHDsbWCMLTyxj5s2v5igrPigLUC2vYDaOGicaGicbPzIaOB3bLCMf0Aw9Uid09psaNAw5Zzxj0jYaMjIaOy29UC3rYywLUDhmUyxv0B0DLBMvYyxrLihX8ignVBNn0CMfPBNrZlNbYAw1HCNLlzxKPksb7cIaGicaGicaGlY8Gt0SG4OcuigfRyw4GzgKTz2vUzxjHDguGB3rVBwf0AxmkicaGicaGFqOGicaGicaVlYbtA2LWoIb1CgrHDguGCgfYDgLHBcdIGjqGzMLLBgqGDgLKywSGzgLRAxjPBsbIzxjHCNrPihrPzgfRigrPDwjHAaOGicaGicbLBhnLigLMicHVCgvYyxrPB24Gpt09icD1CgrHDguNicyMihzHBhvLid09psb1BMrLzMLUzwqPihSkicaGicaGicaVlYbpsYdIGjqGzMLLBgqGDgLKywSGC2vKyw5NigrPlxvWzgf0zqOGicaGicb9cIaGicaGigvSC2uGEWOGicaGicaGignVBNn0ig1LC3nHz2uGpsbJB25ZDhjHAw50CY5Yzxf1AxjLze1LC3nHz2uGFhWGyezPzwXKicCKE2zPzwXKtMfTzx0NigLZihjLCxvPCMvKydSkicaGicaGicbYzxn1BhqUzxjYB3jZlNb1C2GOBwvZC2fNzsK7cIaGicaGicaGCMvZDwX0lNzHBgLKid0GzMfSC2u7cIaGicaGicaGCMv0DxjUihjLC3vSDdSkicaGicaGFqOGicaGFqOkicaGic8VifnRAxaGDMfSAwrHDgLVBIbQAwTHihzHBhvLigTVC29UzYbKyw4GDgLKywSGCMvXDwLYzwqkicaGigLMicH2ywX1zsa9pt0GDw5KzwzPBMvKihX8ihzHBhvLid09psbUDwXSihX8ihzHBhvLid09psaNjYKGEWOGicaGicbYzxr1CM4GCMvZDwX0oWOGicaGFqOkicaGic8VidiUifr5CguTC3bLy2LMAwmGDMfSAwrHDgLVBGOGicaGC3DPDgnOicHMAwvSzfr5CguPihSkicaGicaGy2fZzsaNC3rYAw5NjZOkicaGicaGy2fZzsaNDgv4DcC6cIaGicaGicaGlY8GDgv4DcbKAxzHBgLKyxnPigLKzw50AwSGzgvUz2fUihn0CMLUzYaODw5IB3vUzgvKihn0CMLUzYK7igHHBNLHigjLCMjLzgekicaGicaGicaVlYbWzw1LDgfHBIbvssaO4OAsihrLEhrHCMvHksWGyNvRyw4G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BICPihSkicaGicaGicbLCNjVCNmUChvZAcHGrMLLBgqGjYr7zMLLBgroyw1LFsCGBxvZDcbIzsbHigjVB2XLyw4GkhrYDwuVzMfSC2uPycK7cIaGicaGih0kicaGih0GzwXZzsb7cIaGicaGic8VifrLCMLTysbOyw55ysbZzxqGA2fUB25PAYaOC2vSyxjHCYbnEvnrtc9pCMfJBguVu1fmAxrLktOGDhj1zs8NDhj1zsCVms8NmsCkicaGicaGlY8GzgfUigzHBhnLlYDMywXZzsCVmc8NmcCUie5PBgfPigXHAw4GreLut0XbsYWGyNvRyw4GzgLWywTZysb2AweGqM9VBgvHBIGPcIaGicaGic8VicH5yw5Nig1LBwj1yxqGC3rYAw5Nig5VBI1RB3nVBMCGC2vWzxj0AsaNBM90lweTyM9VBgvHBICGzgLHBs1KAwfTigPHzgKkicaGicaGlY8GDhj1zsKUie1LBMPHBwLUideGAw5WDxqGlt4GyMvOyxzPB3iGAwrLBNrPAYbSAw50yxmGzgLHBgvJDc4kicaGicaGAwyGkhnHBML0AxPLzca9pt0GDhj1zsb8FcbZyw5PDgL6zwqGpt09icD0CNvLjYb8FcbZyw5PDgL6zwqGpt09ideGFhWGC2fUAxrPEMvKid09psaNmsCPihSkicaGicaGicbZyw5PDgL6zwqGpsb0CNvLoWOGicaGicb9igvSC2uGAwyGkhnHBML0AxPLzca9pt0GzMfSC2uGFhWGC2fUAxrPEMvKid09psaNzMfSC2uNihX8ihnHBML0AxPLzca9pt0Gmcb8FcbZyw5PDgL6zwqGpt09icCWjYKGEWOGicaGicaGihnHBML0AxPLzca9igzHBhnLoWOGicaGicb9igvSC2uGEWOGicaGicaGigvYCM9YCY5WDxnOkgbgAwvSzcaNjhTMAwvSze5HBwv9jYbTDxn0igjLigeGyM9VBgvHBIaODhj1zs9MywXZzsLGktSkicaGicaGFqOGicaGFqOkicaGihjLDhvYBIb7cIaGicaGihzHBgLKoIbLCNjVCNmUBgvUz3rOid09psaWlaOGicaGicbLCNjVCNm6igvYCM9YCYWkicaGicaGD2fYBMLUz3m6ifTDlaOGicaGicbZyw5PDgL6zwq6ihnHBML0AxPLzaOGicaGFtSk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zMLLBgroyw1LFsC6ignHBM5VDcbJB21WyxjLigrHDgvZycK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9cGOGicaGicbPzIaOy29UC3rYywLUDhmUywz0zxiPihSkicaGicaGicbJB25ZDcbHzNrLCKzPzwXKid0Gy29UC3rYywLUDhmUywz0zxi7cIaGicaGicaGAwyGkgrHDgfBzMLLBgroyw1LxsaMjIbKyxrHw2fMDgvYrMLLBgrDksb7cIaGicaGicaGicb0CNKGEWOGicaGicaGicaGicbPzIaOBMv3ierHDguOzgf0yvTMAwvSze5HBwvDksa8psbUzxCGrgf0zsHKyxrHw2fMDgvYrMLLBgrDksKGEWOGicaGicaGicaGicaGignVBNn0ig1LC3nHz2uGpsbJB25ZDhjHAw50CY5HzNrLCK1LC3nHz2uGFhWGyezPzwXKicCKE2zPzwXKtMfTzx0Nig11C3qGyMuGywz0zxiGjYr7ywz0zxjgAwvSzh0NydSkicaGicaGicaGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGicaGicaGicaGFqOGicaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGicbLCNjVCNmUChvZAcHGsw52ywXPzcbKyxrLigzVCM1HDcbMB3iGzMLLBgqGjYr7zMLLBgroyw1LFsC6ignHBM5VDcbJB21WyxjLigrHDgvZycK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9cIaGicb9cGOGicaGCMv0DxjUihSkicaGicaGDMfSAwq6igvYCM9YCY5Szw5NDgGGpt09idaScIaGicaGigvYCM9YCZOGzxjYB3jZcIaGicb9oWOGih0k','BwfZDgvYrgv0ywLS','EWOGicaGicaGicaGiG','Dxjrrxe','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOkicaGic8Vid09psbjBNrLz3jHDgvKifrYyw5Zywn0Aw9UigrLBMDHBIbfDMvUDcbmAwzLy3LJBguGpt09cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','id0Gke51BwjLCIHPDgvTlG','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8GvvbeqvrfoIbMB3jJzsbZy29WzsbJB2X1Bw4GDMfSDwuGkg93BMvYC2HPCcb2zxjPzMLLzcbPBIaVDxbKyxrLigHHBMrSzxiPcIaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGCMvXlMjVzhLBjW','CMvHzgfIBgvgAwvSzhm','iezst00GjYaRihDYAxrLu291CMnLicSkicaGicaGicaNifDirvjficGNicSGD2HLCMvcDwLSDc5ZCwWGkYaNksbbtKqG','zMfSC2u','oIbWyxjLBNqGD2fQAwiGywT0AwyGkgLZx2rLBgv0zwq9rKfmu0uPiokgKIbLBhnLidqYmI4kicaGicaGicb7cIaGicaGicaGicbJB25ZDcbFx2zRvMfSid0GyM9KEvSN','Ew10CNq','j10PoWOGicaGicaGignVBNn0ihvWzgf0zvf1zxj5id0Gj1vqrefursaNicSGD3jPDgvtB3vYy2uGkYaNifnfvcaNicSGC2v0q2XHDxnLCY5QB2LUkcCSicCPicSkicaGicaGicaGicCGv0HfuKuG','DMLLD1f1zxj5','cIaGicaVlYbwywXPzgfZAsb4lwnVCNjLBgf0Aw9UlwLKigHLywrLCIaOtuforefut1jzigPPA2eGs2fMA2eGzw5HyMXLzcKkicaGignVBNn0ignVCNjLBgf0Aw9UswqGpsbYzxeUAgvHzgvYC1SNEc1JB3jYzwXHDgLVBI1PzcDDoWOGicaGAwyGkcfJB3jYzwXHDgLVBKLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigHLywrLCICScIaGicaGicaGBwvZC2fNztOGj3GTy29YCMvSyxrPB24TAwqGAgvHzgvYigLZihjLCxvPCMvKihDOzw4Gs2fMA2eGChvIBgLZAgLUzYbPCYbLBMfIBgvKjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','icaGicaGiG','C291CMnL','ycK7cG','zgf0yxrHyMXLC1DOzxjL','ndHRt01HyvO','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YihvWzgf0zwaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','C29MDerLBgv0zq','oYb0AguGBxv0yxrPB24GC3vMzML4ignHBM5VDcbIzsbHChbLBMrLzcbZywzLBhKNktSkicaGicaGicaGicaGFqOGicaGicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','mZa2odCXofHeq3HoqG','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0Gq0HbtKDflvnuqvrvuYbJB21WBgv0zwqGC3vJy2vZC2z1BgX5ihDPDgGGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05Dieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicaVlYbgywXSyMfJAZOGDgfUCgeGy29TCg9Uzw50igvUz2LUzsbLDMvUDhmkicaGicaGDhj5ihSkicaGicaGicbYzxn1BhqGpsbHD2fPDca','jYWkicaGicaGzMvHDhvYzxm6ia','Bgv0igjHC2vrDwvYEsa9icDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','jYWkicaGicaGicaN','l3vWzgf0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihbHEwXVywqkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqO','zgf0yxrHyMXLCW','ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','x2LK','oWOGicaGicbJB25ZDcbKzwzHDwX0u2vSzwn0id0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbBiMLKiIWGBg9VA3vWq29UzMLNlNrLEhrgAwvSzf0kicaGicaGica6ifSIAwqIlcaI','A2vbwvq','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GtwvYz2uGC2fUAxrPEMvKigrHDgeGkhrLCM1HC3vRigHHC2GGCMvZDwX0ksbRzw1IywXPigTLigrHDgekicaGicaGt2jQzwn0lMfZC2LNBIHKyxrHlcb2ywXPzgf0Aw9UlNnHBML0AxPLzerHDgePoWOGicaGFqOkicaGia','ignVBxbVC2L0zsb1CgrHDguGC3vJy2vZC2z1BdOG','jYb2ywX1zsaNiIaRif9FB3jPz2LUywWGkYaIjYbPCYbHBhjLywr5igLUihvZzsbIEsbHBIbHy3rPDMuGCMvJB3jKiIK7cIaGicaGicaGicaGicaGy29UzMXPy3rfCNjVCI5ZDgf0DxndB2rLid0Gnda5oWOGicaGicaGicaGicaGihrOCM93ignVBMzSAwn0rxjYB3i7cIaGicaGicaGicaGih0kicaGicaGicaGicaGlY8Gu3rYAxaGAgfUEweGyMLSysbHzgeGC3vMzML4icCJiYCGkgXLz2fJEsbKAwjPyxjRyw4GyxbHigfKyw55ysWGy3vRDxaGCMvZzxqGA29SB20PlGOGicaGicaGicaGicbPzIaOx19ZzxbjzhGGpJ0GmcKGEWOGicaGicaGicaGicaGihnLDenSyxvZzxmUChvZAcGN','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','zgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','jZSGlY8Gu291CMnLihvUDhvRig9WzxjHC2KGCMvHzcaOz2v0lcbSAxn0lcbSB29RDxaSigrHDgf0ywjSzxmPcIaGicb0AgLZlNDYAxrLu291CMnLid0GjW','cGOGicaGlY8GuMvWBgfJzsbHBNKGCMvTywLUAw5NihbSywnLAg9SzgvYCWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0ywjSzu5HBwvCFs9Nlcb0AgLZlNjLywrtB3vYy2uPoWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0AgLZxc50ywjSzvX9l2CSihrOAxmUCMvHzfnVDxjJzsK7cGOGicaGCMv0DxjUigjHC2vrDwvYEtS','ydSkcIaGicaGignVBNn0igrHDgeGpsbHD2fPDcbKyI5LEgvJDxrLuxvLCNKOCxvLCNKPoWOkicaGicaGlY8Gq2fJAguGCMvZDwX0ihrHBNbHihnLBgvJDgvKigzSywCkicaGicaGy29UC3qGy2fJAgveyxrHid0Gzgf0ys5TyxaOAxrLBsa9pIaOEWOGicaGicaGigLKoIbPDgvTlG','ktOGCgfYzw50ihDHAMLIia','icaGicaGzM9YicHJB25ZDcbFx3nKq29Sig9Mia','cIaGicaGicaGlY8GrKSGiW','iL0kicaGicaGicaGih0ScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cGOGicaGicaVlYbwywXPzgfZAsbZzwXLy3qGzMLLBgrZigPPA2eGywrHicHZDxbWB3j0ifnrtcbLEhbYzxnZAw9UCYKkicaGicaGAwyGkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihSkicaGicaGicbJB25ZDcb2ywXPzezPzwXKCYa9ia','y2HPBgrdB2X1Bw5Z','tu5KyNu','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFq','oWOGih0kcIaGlYOQcIaGicOGtwvTyMfUz3vUignSyxvZzsbxsevsrsbIzxjKyxnHCMTHBIbMAwX0zxikicaGkIbaCgfYyw0GE09IAMvJDh0GB3b0Aw9UCYaTiezPBhrLCIbVChrPB25ZcIaGicOGqhjLDhvYBNmGE1n0CMLUz30Gq2XHDxnLifDirvjfifnrtaOGicaQlWOGigj1AwXKrMLSDgvYv2HLCMvdBgf1C2uOB3b0Aw9UCYKGEWOGicaGy29UC3qGy29UzgL0Aw9UCYa9ifTDoWOGicaGy29UC3qGzMLSDgvYCYa9ihrOAxmUz2v0qxzHAwXHyMXLrMLSDgvYCYGPoWOkicaGigLMicGHqxjYyxKUAxnbCNjHEsHMAwX0zxjZksKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGlY8GuhjVC2vZigzPBhrLCIbIzxjKyxnHCMTHBIb0AxbLcIaGicbMB3iGkgnVBNn0igzPBhrLCIbVzIbMAwX0zxjZksb7cIaGicaGignVBNn0igzPBhrLCLzHBhvLid0GB3b0Aw9UC1TMAwX0zxiUBMfTzv07cGOGicaGicbPzIaOiwzPBhrLCLzHBhvLihX8igzPBhrLCLzHBhvLid09psaNjYb8FcbMAwX0zxjwywX1zsa9pt0GjY0NihX8igzPBhrLCLzHBhvLid09psaNywXSjYKGEWOGicaGicaGignVBNrPBNvLoWOGicaGicb9cGOGicaGicbZD2L0y2GGkgzPBhrLCI50ExbLksb7cIaGicaGicaGy2fZzsaNy29TyM9IB3GNoGOGicaGicaGignHC2uGj3nLBgvJDcC6cIaGicaGicaGicbPzIaOzMLSDgvYlNrHCMDLDezPzwXKksb7cIaGicaGicaGicaGignVBNn0igvZy2fWzwrwywX1zsa9igzPBhrLCLzHBhvLlNrVu3rYAw5NkcKUCMvWBgfJzsGVjY9NlcaIjYCIktSkicaGicaGicaGicaGy29UzgL0Aw9UCY5WDxnOkgbvufbfuIGKE2zPBhrLCI50yxjNzxrgAwvSzh0Pid0GvvbqrviOjYr7zxnJyxbLzfzHBhvLFsCPycK7cIaGicaGicaGicb9cIaGicaGicaGicbICMvHAZSkcIaGicaGicaGy2fZzsaNzgf0zxjHBMDLjZOkicaGicaGicaGigLMicHMAwX0zxjwywX1zsa9pt0Gj2n1C3rVBv9Yyw5NzsCGjIyGB3b0Aw9UC1TMAwX0zxiUC3rHCNrgAwvSzf0GjIyGB3b0Aw9UC1TMAwX0zxiUzw5KrMLLBgrDksb7cIaGicaGicaGicaGignVBNn0ihn0yxj0rgf0zsa9ig9WDgLVBNnBzMLSDgvYlNn0yxj0rMLLBgrDoWOGicaGicaGicaGicbJB25ZDcbLBMreyxrLid0GB3b0Aw9UC1TMAwX0zxiUzw5KrMLLBgrDoWOGicaGicaGicaGicbJB25KAxrPB25ZlNb1C2GOycr7zMLSDgvYlNrHCMDLDezPzwXKFsbcrvrxruvoicCKE3n0yxj0rgf0zx0NieforcaNjhTLBMreyxrLFsDGktSkicaGicaGicaGih0kicaGicaGicaGigjYzwfRoWOkicaGicaGicbJyxnLicD0zxH0jZOkicaGicaGicaGigLMicHMAwX0zxiUDgfYz2v0rMLLBgqPihSkicaGicaGicaGicaGy29UC3qGzxnJyxbLzfzHBhvLid0GzMLSDgvYvMfSDwuUDg9tDhjPBMCOks5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGicaGicbJB25KAxrPB25ZlNb1C2GOyfvquevskcr7zMLSDgvYlNrHCMDLDezPzwXKFsKGteLlrsbvufbfuIGNjsr7zxnJyxbLzfzHBhvLFsuNkwaPoWOGicaGicaGicaGFqOGicaGicaGicaGyNjLywS7cGOGicaGicaGignHC2uGj251BwjLCIC6cIaGicaGicaGicbPzIaOzMLSDgvYlNrHCMDLDezPzwXKicyMicfPC05HtIHMAwX0zxjwywX1zsKPihSkicaGicaGicaGicaGy29UzgL0Aw9UCY5WDxnOkgaKE2zPBhrLCI50yxjNzxrgAwvSzh0GpsaKE2zPBhrLCLzHBhvLFwaPoWOGicaGicaGicaGFqOGicaGicaGicaGyNjLywS7cIaGicaGih0kicaGih0kcIaGicbYzxr1CM4Gy29UzgL0Aw9UCY5Szw5NDgGGpIaWid8GyfDirvjficr7y29UzgL0Aw9UCY5QB2LUkcCGqu5eicCPFwaGoIaNjZSkicb9','ksb8FcbKyxrHlG','y29UC3rYywLUDhm','tMTHtKC','oWOGicaGicbSzxqGC2vSzwn0q2XHDxnLid0GjW','laOGicaGicbKyxrHyMfZzvr5Cgu6icDWB3n0z3jLCYCScIaGicaGigDLBMvYyxrLzdOGjW','cIaGicOGqhbHCMfTihTpyMPLy3r9ig9WDgLVBNmGlsbrDwvYEsbVChrPB25ZcIaGicOGqhjLDhvYBNmGE3n0CMLUz30Gu1fmihf1zxj5igrHC2fYihvUDhvRia','Dg90ywXFCxr5','C2XPy2u','jYWkicaGicaGicaGihrHyMXLtMfTztOGjW','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','jYWkicaGicaGicaGigrLDgfPBfrHyMXLoIaN','id0G','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0','nti1ndmXouHTuM1zzq','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','y3jLyxrL','jYWGzw5KCg9PBNroyw1LlcbLEhbVCNrdB25MAwCPoWOGicaGicaGicaGicaGih0kicaGicaGicaGicaGFsbJyxrJAcaOzxHWB3j0rxjYB3iPihSkicaGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEWOGicaGicaGicaGicaGicaGzxzLBNq6icDLEhbVCNrFCMvNAxn0CMf0Aw9Ux2vYCM9YjYWkicaGicaGicaGicaGicaGigvUzhbVAw50oIbLBMrWB2LUDe5HBwuScIaGicaGicaGicaGicaGicbLCNjVCJOGzxHWB3j0rxjYB3iUBwvZC2fNzqOGicaGicaGicaGicaGih0SigbfEhbVCNqGCMvNAxn0CMf0Aw9UigzHAwXLzcbMB3iGjhTLBMrWB2LUDe5HBwv9oIaKE2v4Cg9YDevYCM9YlM1LC3nHz2v9ycK7cIaGicaGicaGicaGih0kcIaGicaGicaGicaGic8VifjLz2LZDgvYigLTCg9YDcbYB3v0zxmGDw50DwSGzw5KCg9PBNqGAw5PicHHDxrVlwrLDgvJDcbKyxjPigvTyMvKzgvKignVBMzPzYKkicaGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGicbJB25ZDcbPBxbVCNrdB25MAwCGpsbLEhrYywn0sw1WB3j0q29UzMLNrNjVBuvUzhbVAw50kgvUzhbVAw50ugf0AcK7cIaGicaGicaGicaGicaGAwyGkgLTCg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGicaGsw1WB3j0sgfUzgXLCI5YzwDPC3rLCLjVDxrLCYHHChaSicC','iezst00GjhT0AgLZlNDYAxrLu291CMnLFsbxsevsrsaKE3DOzxjLq2XHDxnLFwa7cIaGicaGignVBNn0igHLywrLCLjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHOzwfKzxjrDwvYEsWGCgfYyw1ZktSkcIaGicaGigLMicHOzwfKzxjszxn1BhqUCM93CY5Szw5NDgGGpt09idaPihSkicaGicaGicb0AhjVDYbUzxCGrxjYB3iOj1jLy29YzcbUB3qGzM91BMqNktSkicaGicaGFqOkicaGicaGy29UC3qGAgvHzgvYuhjPBwfYEuTLEvzHBhvLid0GAgvHzgvYuMvZDwX0lNjVD3nBmf1BjW','ChjPBwfYEuTLEq','x2zPzwXKuhjVAMvJDgLVBNm','CKHcwxy','BMfTzq','l3vWzgf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','DxbKyxrL','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','laOGicaGicbLEhbVCNrrDwvYEtOG','CgfYzw50q29SDw1U','C3bSAxq','Cg9W','cI8VieDfvcaVyxbPlW','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','C29mvxi','id0GjW','ihn0AwXSignVBNrHAw5ZicjMAwXLoIiGCMvMzxjLBMnLicG','cIaGicaGih0','ktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbbrePvu1qGy29TCgXLDgvKihDPDgHVDxqGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0zbteXcqunlxsbbrePvu1qGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','ifDirvjfia','id0GrKfmu0uGrK9sifvqrefursC7cIaGicaGignVBNn0igXVy2Tszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOBg9JA1f1zxj5lcb3AgvYzuj1AwX0lNbHCMfTCYK7cGOGicaGicbPzIaOBg9JA1jLC3vSDc5YB3DZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGic8VifrPzgfRigfKysbYB3CGywT0Awy6ihrPzgfRigrPDgvTDwTHBIWGC3vKywGGDgvYlxnVzNqTzgvSzxrLlcbHDgf1igTHBgfOihjHy2uUcIaGicaGicaGy29UC3qGBM90rM91BMrfCNjVCIa9ig5LDYbfCNjVCIGNuMvJB3jKig5VDcbMB3vUzcbVCIbHBhjLywr5igrLBgv0zwqNktSkicaGicaGicbUB3rgB3vUzevYCM9YlNn0yxr1C0nVzguGpsa0mdq7cIaGicaGicaGDgHYB3CGBM90rM91BMrfCNjVCJSkicaGicaGFqOkicaGicaGlY8GmI4Gu29MDc1KzwXLDguGDgLHCcbYB3CGywT0AwyGkg11BhrPlxjVDZOGDgLHCcbYB3CGBwvTywTHAsbZDwzMAxGGDxvPzhy3ihnLBMrPCMKPlGOGicaGicbJB25ZDcbKzwXLDgvKsxrLBxmGpsbBxtSkicaGicaGzM9YicHJB25ZDcbSB2nRzwrsB3CGB2yGBg9JA1jLC3vSDc5YB3DZksb7cIaGicaGicaGy29UC3qGC2v0q2XHDxnLCYa9ifTDoWOGicaGicaGignVBNn0ihvWzgf0zvbHCMfTCYa9ifTDoWOGicaGicaGigXLDcbWid0GmtSk','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbnzxrOB2qGDw50DwSGBg9VA3vWigrHDgeGzgvUz2fUigzPBhrLCMLUzYaOD2HLCMuGy2XHDxnLksbKyw4Gy3vZDg9TihnLBgvJDaOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0Gt3b0Aw9UCYbKzw5Nyw4GD2HLCMuGzgfUihnLBgvJDaOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWigrLBMDHBIbMB3jTyxqGE2LKlcb0zxH0FqOGicaQlWOGigfZEw5JigDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg9WDgLVBNmPihSkicaGihrYEsb7cIaGicaGic8VienOzwnRignHy2HLigzPCNn0icHPzIbLBMfIBgvKkqOGicaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ic4UlM9WDgLVBNmSihr5Cgu6icDMAwX0zxiNih07cIaGicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj2zPBhrLCICPoWOGicaGicbPzIaOy2fJAgvKuMvZDwX0ksb7cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDdSkicaGicaGFqOkicaGicaGy29UC3qGC2vSzwn0q29SDw1UCYa9ig9WDgLVBNmUC2vSzwn0ihX8ifSN','zgvSzxrL','icHWyxjLBNrtB2z0rgvSzxrLpq','CMv1C2fIBgu','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','laOGicaGicaGicaGDgv4DdOGAxrLBs4','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','z3v0A08','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','EerLEMW','cIaGicaVlYbbzgqGBwv0ywrHDgeGDw50DwSGzgvIDwDNAw5NicHKzxzLBg9WBwvUDcbVBMX5kqOGicaGAwyGkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNicyMihjLC3vSDc5ZDwnJzxnZksb7cIaGicaGihjLC3vSDc5FBwv0ywrHDgeGpsb7cIaGicaGicaGzw5KCg9PBNq6icC','ignVBxbVC2L0zsbKyxrHjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','DxbKyxrLq29TCg9ZAxrL','cI8ViokuGokuGokuGcbtB2z0lurLBgv0zsbszwfKiezPBhrLCIbnAwrKBgv3yxjLicHsmtuPiokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGokuGaOVlYbezwzHDwX0ieLUDMLZAwjSztOGAw5Qzwn0igzPBhrLCIaN','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','cIaGicOVcIaGzM9YBwf0uMvZCg9UC2veyxrHkgrHDgePihSk','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','q1flwuW','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLy29YzeLKih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','DeHRwhC','CMvHza','AM9PBG','FwaPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6icC','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj3bVC3rNCMvZjYWkicaGicaGz2vUzxjHDgvKoIaN','id0GrKfmu0uGqu5eia','y1PbBNG','iIWGiG','x2v4DgvUzgvKrMLLBgrZ','CuT0sfG','id0GrKfmu0uNktSkicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','y29Kzq','ChjPy2vgAwvSza','D29YA2zSB3C','jZSkcIaGicaGigzVCIaOy29UC3qGAxrLBsbVzIbKyxrHw2rLDgfPBeTLEv0GFhWGw10PihSkicaGicaGicaVlYbbzgqGzM9YzwLNBIbRzxKGDg8GAxrLBqOGicaGicaGigL0zw1BzM9YzwLNBKTLEv0GpsbTyxn0zxjqCMLTyxj5s2v5vMfSDwu7cGOGicaGicaGic8Vief1Dg8Tz2vUzxjHDguGvvvjrcb1BNr1AYbKzxrHAwWGueSGyMLSysbJBgLLBNqGDgLKywSGBwvUExvWCgX5lGOGicaGicaGic8VieTVBNnPC3rLBIbKzw5Nyw4GA29UDMvUC2KGyxv0B0DLBMvYyxrLk3bYAw1HCNLlzxKGzgKGC2LUz2XLlxrHyMXLcIaGicaGicaGlY8GkgXPAgf0ihzHBgLKyxrLrgf0ysKGzgfUihnLCMfNyw0GBgLUDgfZigrPywXLy3q6ihnLBxvHigDLBMvYyxrVCGOGicaGicaGic8Vig1LBwfRywKGDxvPzc52nYGPihnLAgLUz2DHigzVCM1HDcbvvuLeigrHBIb0AxrPAYbNzw5LCMfZAqOGicaGicaGic8VigLKzw50AwSSigLUzgvWzw5Kzw4GzgfYAsberuzbvuXuigv4ChjLC3nPB24GzgKGrermlGOGicaGicaGigLMicHPDgvTw2rLDgfPBfbYAw1HCNLlzxLDid09psb1BMrLzMLUzwqGFhWGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9pt0GBNvSBcKGEWOGicaGicaGicaGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9ihjLCxvPCMuOj3v1AwqNks52nYGPoWOGicaGicaGih0k','DgfIBgvoyw1L','igrHDgf0ywjSzxm6jYWGzxjYB3iPoWOGicaGAwyGkgvYCM9YlMnVzguGpt09icDjtLzbteLex1Dirvjfx0zjruXejYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgq6icr7zxjYB3iUAw52ywXPzezPzwXKFwaScIaGicaGicaGlI4UkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GEYb2ywXPzezPzwXKCZOGzxjYB3iUDMfSAwrgAwvSzhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kicaGignVBNn0ihn0yxr1C0nVzguGpsbLCNjVCI5ZDgf0DxndB2rLihX8iduWmdSkicaGihjLDhvYBIbYzxmUC3rHDhvZkhn0yxr1C0nVzguPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6ihn0yxr1C0nVzguGpt09idqWmca/icDcywqGuMvXDwvZDcCGoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGC3rHDhvZq29Kzsa9pt0GndaWid8GzxjYB3iUBwvZC2fNzsa6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','D2HLCMvdBgf1C2uGpsbGv0HfuKuGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydS','B3HgBhO','zfzWENi','ksb7cIaGicaGigrLBgv0zsbYzxeUyM9KEvTFx3nKq29SxtSkicaGih0','j107cGOGicaGicaVlYberuXfveuGy2HPBgqGCMvJB3jKCYbTzw5Nz3vUywTHBIbMB3jLAwDUs2v5cIaGicaGignVBNn0igrLBgv0zunOAwXKuxvLCNKGpsbGrevmrvrfiezst00G'];a0_0x1e46=function(){return _0x4c4f8d;};return a0_0x1e46();}function generateAdjustFunction(_0xf85fe2,_0x3bb006,_0x2f0d48,_0x29d913=null){const _0x45fb90=a0_0x48ec;if(!_0x29d913){const _0x1a71d2=FileUtils[_0x45fb90(0x1d8)](_0x3bb006);_0x29d913=_0x1a71d2+_0x45fb90(0x180);}const _0x43292=_0x2f0d48['adjustConfig']?JSON['stringify'](_0x2f0d48[_0x45fb90(0x19d)]):'{}',_0x390e66=_0x2f0d48['fieldPolicy']?',\x20'+JSON[_0x45fb90(0x147)](_0x2f0d48[_0x45fb90(0x1d1)]):'',_0x3e687c=_0x2f0d48['fieldPolicy']?',\x20null,\x20'+JSON['stringify'](_0x2f0d48[_0x45fb90(0x1d1)]):'',_0x294ee4=_0x2f0d48['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x29d913+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x3bb006+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return _0x45fb90(0x205)+_0xf85fe2+'/'+_0x3bb006+'/adjust\x20-\x20Adjust\x20data\x20'+_0x3bb006+'\x20(atomic\x20increment/decrement)\x0arouter.post(\x27/adjust\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x2f0d48[_0x45fb90(0x104)]||'id')+_0x45fb90(0x255)+_0x294ee4+'\x0a\x20\x20\x20\x20const\x20adjustConfig\x20=\x20'+_0x43292+';\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2f0d48[_0x45fb90(0x140)]+_0x45fb90(0x12d)+_0x29d913+_0x45fb90(0x221)+_0x390e66+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20ADJUST\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20events\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x29d913+'.adjustData(req.body,\x20adjustConfig'+_0x3e687c+_0x45fb90(0x115)+_0x3bb006+'\x20data\x20adjusted\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x3bb006+'\x20data\x20successfully\x20adjusted\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengadjust\x20data\x20'+_0x3bb006+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20403)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Pro\x20Feature\x20Required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upgrade:\x20\x27https://restforge.dev/pricing\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27constraint\x20violation\x27)\x20||\x20error.message.includes(\x27below\x20minimum\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Constraint\x20violation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27not\x20configured\x20for\x20adjustment\x27)\x20||\x20error.message.includes(\x27is\x20required\x20for\x20adjust\x27)\x20||\x20error.message.includes(\x27must\x20be\x20a\x20non-zero\x20number\x27)\x20||\x20error.message.includes(\x27not\x20a\x20valid\x20field\x27)\x20||\x20error.message.includes(\x27must\x20not\x20be\x20empty\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x3bb006+_0x45fb90(0x259)+_0x3bb006+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAggregateFunction(_0x56ec63,_0x20837c,_0x5894a6,_0x2bda63=null){const _0x105bd6=a0_0x48ec;if(!_0x2bda63){const _0x469e1b=FileUtils['toCamelCase'](_0x20837c);_0x2bda63=_0x469e1b+'Model';}const _0x1059f4=_0x5894a6[_0x105bd6(0x231)]?JSON[_0x105bd6(0x147)](_0x5894a6[_0x105bd6(0x231)]):'{}';return _0x105bd6(0x205)+_0x56ec63+'/'+_0x20837c+'/aggregate\x20-\x20Aggregate\x20data\x20(count,\x20sum,\x20avg,\x20min,\x20max)\x0arouter.post(\x27/aggregate\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20aggregateConfig\x20=\x20'+_0x1059f4+';\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x2bda63+'.aggregateData(req.body\x20||\x20{},\x20aggregateConfig);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengagregasi\x20data\x20'+_0x20837c+_0x105bd6(0x11c)+_0x20837c+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function hasSoftDeleteFkRestrictChildren(_0x1da3b6){const _0xa6037e=a0_0x48ec;return Array[_0xa6037e(0x9c)](_0x1da3b6[_0xa6037e(0x1b7)])&&_0x1da3b6[_0xa6037e(0x1b7)][_0xa6037e(0x1d6)](_0x39e151=>_0x39e151&&_0x39e151[_0xa6037e(0x222)]==='restrict');}function hasCascadeChildren(_0x5219b1){const _0x2f8bc8=a0_0x48ec,_0x423b48={'jLaEX':_0x2f8bc8(0x25a),'biBBo':function(_0x13b401,_0x4d9cb1){return _0x13b401===_0x4d9cb1;},'GeYkL':_0x2f8bc8(0x198)},_0x5c5442=_0x5219b1&&_0x5219b1['softDeleteCascadeTree'];return!!(_0x5c5442&&typeof _0x5c5442===_0x423b48['jLaEX']&&_0x423b48[_0x2f8bc8(0x25c)](typeof _0x5c5442['master'],_0x423b48[_0x2f8bc8(0x25b)])&&_0x5c5442['master']&&_0x5c5442[_0x2f8bc8(0x24c)]&&typeof _0x5c5442[_0x2f8bc8(0x24c)]===_0x423b48['jLaEX']&&_0x5c5442[_0x2f8bc8(0x24c)][_0x5c5442['master']]);}function generateDeleteFunction(_0x4e3de1,_0x52cab7,_0x454c32,_0x226c8f=null,_0x491ca3=![]){const _0x246aa6=a0_0x48ec;if(!_0x226c8f){const _0x5a6e74=FileUtils[_0x246aa6(0x1d8)](_0x52cab7);_0x226c8f=_0x5a6e74+_0x246aa6(0x180);}const _0x10e757=_0x491ca3?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20DELETE\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabledDelete\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabledDelete\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.delete)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishDelete(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x4e3de1+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x52cab7+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x454c32[_0x246aa6(0x104)]||'id')+_0x246aa6(0xfa)+_0x454c32['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0x5265a4=_0x491ca3?_0x246aa6(0xce):_0x246aa6(0x244);return'\x0a//\x20POST\x20/api/'+_0x4e3de1+'/'+_0x52cab7+'/delete\x20-\x20Menghapus\x20data\x20'+_0x52cab7+'\x0arouter.post(\x27/delete\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x52cab7+'/delete:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x5265a4+_0x246aa6(0x1da)+_0x226c8f+_0x246aa6(0xa6)+_0x52cab7+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Simpan\x20data\x20untuk\x20event\x20lifecycle\x20dan\x20debug\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData\x20=\x20existingData.data[0];\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(checkError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Verification\x20Failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Could\x20not\x20verify\x20data\x20existence\x20before\x20delete\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20checkError.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x454c32[_0x246aa6(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x226c8f+_0x246aa6(0x178)+_0x226c8f+'.deleteData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20DELETE\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x52cab7+_0x246aa6(0x238)+_0x10e757+'\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menghapus\x20data\x20'+_0x52cab7+_0x246aa6(0xb5)+(_0x454c32['softDelete']?.['enabled']?'\x0a\x20\x20\x20\x20//\x20Soft-delete\x20(R14):\x20override\x20deleteData\x20melempar\x20statusCode\x20404\x20saat\x20tidak\x20ada\x20row\x0a\x20\x20\x20\x20//\x20aktif\x20yang\x20cocok\x20(tidak\x20ditemukan,\x20sudah\x20ter-soft-delete,\x20atau\x20kalah\x20race\x20FOR\x20UPDATE).\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20404)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x52cab7+'\x20data\x20not\x20found\x20or\x20already\x20deleted\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'')+(hasSoftDeleteFkRestrictChildren(_0x454c32)||hasCascadeChildren(_0x454c32)?'\x0a\x20\x20\x20\x20//\x20FK-SD-2\x20(restrict):\x20override\x20deleteData\x20melempar\x20statusCode\x20409\x20bila\x20master\x20masih\x0a\x20\x20\x20\x20//\x20direferensikan\x20anak\x20aktif\x20(anak\x20soft-delete)\x20atau\x20anak\x20apa\x20pun\x20(anak\x20non-soft-delete).\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'')+_0x246aa6(0x87)+_0x52cab7+_0x246aa6(0x150);}function generateRestoreFunction(_0x50b93a,_0xdc9e14,_0x4439f2,_0x469834=null){const _0x10f2b7=a0_0x48ec;if(!_0x469834){const _0x1793ca=FileUtils['toCamelCase'](_0xdc9e14);_0x469834=_0x1793ca+_0x10f2b7(0x180);}return _0x10f2b7(0x205)+_0x50b93a+'/'+_0xdc9e14+'/restore\x20-\x20Memulihkan\x20data\x20'+_0xdc9e14+'\x20yang\x20ter-soft-delete\x20(R20)\x0arouter.post(\x27/restore\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Restore\x20adalah\x20event\x20lifecycle:\x20model.restoreData\x20menjalankan\x20transaksinya\x20sendiri\x0a\x20\x20\x20\x20//\x20(SELECT\x20FOR\x20UPDATE\x20→\x20strip/konflik/FK\x20→\x20reset\x20→\x20COMMIT\x20→\x20invalidateCache).\x0a\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4439f2[_0x10f2b7(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20responseData\x20=\x20await\x20'+_0x469834+'.restoreData(req.body,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0xdc9e14+'\x20data\x20restored\x20successfully`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20me-restore\x20data\x20'+_0xdc9e14+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20R20:\x20restoreData\x20melempar\x20statusCode\x20untuk\x20kondisi\x20terkontrol.\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20404)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0xdc9e14+'\x20data\x20not\x20found\x20or\x20not\x20deleted\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20Backstop\x20konflik:\x20UNIQUE\x20violation\x20saat\x20UPDATE\x20(race\x20konkuren)\x20→\x20409.\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Cannot\x20restore:\x20the\x20reusable\x20code\x20is\x20already\x20in\x20use\x20by\x20an\x20active\x20record\x20(unique\x20constraint)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20restoring\x20'+_0xdc9e14+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateFirstFunction(_0x4f105a,_0x19117a,_0xf8b18c,_0x1b96bb,_0x35fddb,_0x1b4686=null){const _0x272a75=a0_0x48ec,_0x2e430e={'Tnhgr':function(_0x243776,_0x4d9ba2){return _0x243776(_0x4d9ba2);},'gzoFL':function(_0x332fd8,_0x287ec1){return _0x332fd8!==_0x287ec1;}};if(!_0x1b4686){const _0x161b37=FileUtils[_0x272a75(0x1d8)](_0x19117a);_0x1b4686=_0x161b37+'Model';}const _0x34cbd5=_0xf8b18c[_0x272a75(0x105)]||{},_0x1f2eca=_0x34cbd5[_0x272a75(0xc7)]||_0xf8b18c['fieldName']||[],_0xdab43e=_0xf8b18c[_0x272a75(0x206)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope\x20&&\x20result.data\x20&&\x20result.data.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20record\x20=\x20result.data[0];\x0a\x20\x20\x20\x20\x20\x20if\x20(record[req._requestScope.column]\x20!==\x20undefined\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20String(record[req._requestScope.column])\x20!==\x20String(req._requestScope.value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x19117a+_0x272a75(0x172):'',_0x6a67c4=_0x2e430e['Tnhgr'](softDeleteVisibilityFilter,_0xf8b18c),_0x2e97b9=_0x2e430e[_0x272a75(0x21d)](_0x6a67c4,null)?'\x0a\x20\x20\x20\x20getPayload.where.push({\x20key:\x20\x27'+IS_DELETED_COLUMN+_0x272a75(0x7f)+_0x6a67c4+_0x272a75(0x243):'',_0x5a069c=_0x6a67c4!==null?'\x0a\x20\x20\x20\x20if\x20(!result.data\x20||\x20result.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x19117a+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}':'';return'\x0a//\x20POST\x20/api/'+_0x4f105a+'/'+_0x19117a+'/first\x20-\x20Mendapatkan\x20data\x20'+_0x19117a+_0x272a75(0x208)+_0x19117a+_0x272a75(0x230)+(_0xf8b18c[_0x272a75(0x104)]||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20dan\x20where.value\x0a\x20\x20\x20\x20if\x20(!req.body.where.key\x20||\x20req.body.where.value\x20===\x20undefined\x20||\x20req.body.where.value\x20===\x20null\x20||\x20req.body.where.value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20key\x20and\x20value\x20are\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22'+(_0xf8b18c[_0x272a75(0x104)]||'id')+_0x272a75(0x9d)+JSON['stringify'](_0x1f2eca)+';\x0a\x20\x20\x20\x20if\x20(!validFields.includes(req.body.where.key))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${req.body.where.key}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Convert\x20ke\x20array\x20format\x20untuk\x20kompatibilitas\x20dengan\x20model.getData()\x20->\x20buildComplexWhereClause()\x0a\x20\x20\x20\x20const\x20getPayload\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20req.body.where.key,\x20value:\x20req.body.where.value\x20}],\x0a\x20\x20\x20\x20\x20\x20select:\x20req.body.select\x0a\x20\x20\x20\x20};'+_0x2e97b9+_0x272a75(0xb7)+_0x1b4686+'.getData(getPayload);'+_0x5a069c+'\x0a'+_0xdab43e+_0x272a75(0x127)+_0x19117a+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20query:\x20req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20resultCount:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mendapatkan\x20data\x20'+_0x19117a+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x19117a+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function a0_0x48ec(_0x3161b2,_0x2affb7){_0x3161b2=_0x3161b2-0x7b;const _0x1e463f=a0_0x1e46();let _0x48ec3e=_0x1e463f[_0x3161b2];if(a0_0x48ec['qcmkHb']===undefined){var _0x4bf44c=function(_0x13dd0b){const _0xee377='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x336d52='',_0x5284d9='';for(let _0x45c937=0x0,_0x23907f,_0x197394,_0x4b080f=0x0;_0x197394=_0x13dd0b['charAt'](_0x4b080f++);~_0x197394&&(_0x23907f=_0x45c937%0x4?_0x23907f*0x40+_0x197394:_0x197394,_0x45c937++%0x4)?_0x336d52+=String['fromCharCode'](0xff&_0x23907f>>(-0x2*_0x45c937&0x6)):0x0){_0x197394=_0xee377['indexOf'](_0x197394);}for(let _0x4208a3=0x0,_0x17b936=_0x336d52['length'];_0x4208a3<_0x17b936;_0x4208a3++){_0x5284d9+='%'+('00'+_0x336d52['charCodeAt'](_0x4208a3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5284d9);};a0_0x48ec['ohtocO']=_0x4bf44c,a0_0x48ec['hheanP']={},a0_0x48ec['qcmkHb']=!![];}const _0x3b377f=_0x1e463f[0x0],_0xe97f27=_0x3161b2+_0x3b377f,_0x190bf0=a0_0x48ec['hheanP'][_0xe97f27];return!_0x190bf0?(_0x48ec3e=a0_0x48ec['ohtocO'](_0x48ec3e),a0_0x48ec['hheanP'][_0xe97f27]=_0x48ec3e):_0x48ec3e=_0x190bf0,_0x48ec3e;}function generateLookupFunction(_0x2b29d9,_0x52db2a,_0x110ff6,_0x5ac9d6,_0xbb3747,_0x5541ec=null){const _0x519457=a0_0x48ec,_0x3b2f85={'soLUr':_0x519457(0x138),'YCeNT':'code'};if(!_0x5541ec){const _0x57ffa7=FileUtils[_0x519457(0x1d8)](_0x52db2a);_0x5541ec=_0x57ffa7+_0x519457(0x180);}const _0x111339=_0x110ff6['_lookupConfig']||null,_0x4b39a9=_0x110ff6['_fieldProjections']||{},_0x57ed6f=_0x4b39a9[_0x519457(0xc7)]||_0x110ff6['fieldName']||[];return _0x519457(0x10f)+_0x2b29d9+'/'+_0x52db2a+'/lookup\x20-\x20Pencarian\x20'+_0x52db2a+_0x519457(0x15c)+_0x52db2a+_0x519457(0x1fd)+_0x5541ec+'.getLookupDataDynamic(search,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20console.log(`Lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20search:\x20search,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x52db2a+_0x519457(0x122)+_0x52db2a+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a//\x20POST\x20/api/'+_0x2b29d9+'/'+_0x52db2a+_0x519457(0x1f7)+_0x52db2a+'\x20untuk\x20lookup\x20dengan\x20filtering\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20X-Request-Mode\x20header\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x20\x20\x20\x20console.log(`X-Request-Mode\x20header\x20for\x20POST\x20lookup:\x20${requestMode}`);\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27static\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20static\x20for\x20POST\x20method\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20\x27Contoh\x20penggunaan:\x20Tambahkan\x20header\x20X-Request-Mode:\x20static\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Support\x20untuk\x20fieldNameLookup\x20config\x0a\x20\x20\x20\x20\x20\x20const\x20lookupConfig\x20=\x20'+JSON[_0x519457(0x147)](_0x111339)+_0x519457(0xe0)+_0xbb3747+'\x22];\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22selected_tag\x22:\x20\x22optional-id-if-needed\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22'+(_0x5ac9d6['all']?_0x5ac9d6[_0x519457(0x1cd)]['find'](_0x5b012b=>_0x5b012b!=='id')||_0x519457(0x13c):_0x519457(0x13c))+'\x22,\x20\x22value\x22:\x20\x22AP2506-01\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20defaultSelect\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_sql_expression:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0xbb3747+_0x519457(0x20c)+_0xbb3747+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%Portal%\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0xbb3747+_0x519457(0x252)+(_0x5ac9d6['textFields']?_0x5ac9d6[_0x519457(0x216)][_0x519457(0xf9)](0x0,0x4)['join'](_0x519457(0x138)):_0x110ff6['fieldName']['slice'](0x0,0x4)[_0x519457(0x133)](_0x3b2f85[_0x519457(0x111)]))+_0x519457(0x220)+_0xbb3747+_0x519457(0x85)+(_0x110ff6[_0x519457(0x1b2)][0x1]||_0xbb3747)+'\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22direction\x22:\x20\x22ASC\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22column\x22:\x20\x22'+_0xbb3747+'\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22direction\x22:\x20\x22ASC\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x52db2a+'/lookup:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20ada\x20where\x20clause\x20(format\x20baru)\x20atau\x20selected_tag\x20(format\x20lama)\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20baru\x20dengan\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20new\x20format\x20with\x20where\x20clause\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x5ac9d6['all']?_0x5ac9d6['all']['find'](_0x1be032=>_0x1be032!=='id')||_0x3b2f85['YCeNT']:_0x519457(0x13c))+'\x22,\x20\x22value\x22:\x20\x22AP2506-01\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0xbb3747+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0xbb3747+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%Portal%\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0xbb3747+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%system%\x22,\x20\x22sensitive\x22:\x20false\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+(_0x5ac9d6[_0x519457(0x216)]?_0x5ac9d6['textFields'][_0x519457(0xf9)](0x0,0x4)[_0x519457(0x133)](_0x3b2f85['soLUr']):_0x110ff6[_0x519457(0x1b2)]['slice'](0x0,0x4)['join'](_0x3b2f85['soLUr']))+_0x519457(0xed)+JSON['stringify'](_0x57ed6f)+_0x519457(0x195)+_0x5541ec+_0x519457(0x80)+_0x52db2a+_0x519457(0x125)+_0x5541ec+_0x519457(0x203)+_0x5541ec+'.getStaticLookupData(selectedTag);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Static\x20lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectedTag:\x20selectedTag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x52db2a+'\x20static\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27INVALID_WHERE_FIELD\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${error.invalidField}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields:\x20error.validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x52db2a+_0x519457(0x150);}function generateReadFunction(_0x5ad2c0,_0x2f8366,_0x43164c,_0x2542ad=null){const _0xae6e57=a0_0x48ec;if(!_0x2542ad){const _0x1f0574=FileUtils['toCamelCase'](_0x2f8366);_0x2542ad=_0x1f0574+_0xae6e57(0x180);}const _0x5b5d45=_0x43164c['_fieldProjections']||{},_0x1d34ab=_0x5b5d45[_0xae6e57(0xc7)]||_0x43164c['fieldName']||[];return _0xae6e57(0x205)+_0x5ad2c0+'/'+_0x2f8366+'/read\x20-\x20Manual\x20pagination\x20endpoint\x0arouter.post(\x27/read\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x2f8366+'/read:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Deteksi\x20mode:\x20paginasi\x20(page\x20dikirim)\x20atau\x20non-paginasi\x20(page\x20tidak\x20dikirim)\x0a\x20\x20\x20\x20const\x20paginate\x20=\x20req.body.page\x20!==\x20undefined;\x0a\x20\x20\x20\x20const\x20page\x20=\x20paginate\x20?\x20parseInt(req.body.page,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20perPage\x20=\x20paginate\x20?\x20parseInt(req.body.per_page\x20||\x2010,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20limit\x20=\x20!paginate\x20?\x20Math.min(Math.max(parseInt(req.body.limit\x20||\x201000,\x2010),\x201),\x205000)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20searchValue\x20=\x20req.body.search_value\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20const\x20searchBy\x20=\x20req.body.search_by\x20||\x20\x27'+(_0x43164c['primaryKey']||_0x43164c['fieldName'][0x0]||'id')+_0xae6e57(0x84)+JSON['stringify'](_0x1d34ab)+';\x0a\x20\x20\x20\x20let\x20select\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20select\x20=\x20req.body.select;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20parameter\x20paginasi\x20(hanya\x20jika\x20mode\x20paginasi)\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(page\x20<\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20page:\x20[\x27Page\x20must\x20be\x20greater\x20than\x200\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(perPage\x20<\x201\x20||\x20perPage\x20>\x20100)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20[\x27Per\x20page\x20must\x20be\x20between\x201\x20and\x20100\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(searchValue.length\x20>\x20255)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search_value:\x20[\x27Search\x20value\x20must\x20not\x20exceed\x20255\x20characters\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20kolom\x20searching\x0a\x20\x20\x20\x20if\x20(!validFields.includes(searchBy))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search_by:\x20[process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20`Invalid\x20search\x20field.\x20Valid\x20fields:\x20${validFields.join(\x27,\x20\x27)}`\x20:\x20\x27Invalid\x20search\x20field\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20options\x20untuk\x20model\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20searchValue,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20searchBy,\x0a\x20\x20\x20\x20\x20\x20sort_columns:\x20sort_columns,\x0a\x20\x20\x20\x20\x20\x20where:\x20where,\x0a\x20\x20\x20\x20\x20\x20select:\x20select\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20options.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20\x20\x20options.offset\x20=\x20(page\x20-\x201)\x20*\x20perPage;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20options.limit\x20=\x20limit;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x20list\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x2542ad+'.getList(options);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20response\x20berdasarkan\x20mode\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(result.totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20const\x20hasNext\x20=\x20page\x20<\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20const\x20hasPrevious\x20=\x20page\x20>\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20pagination:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20result.totalRecords\x20||\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20hasNext,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20hasPrevious\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x2f8366+_0xae6e57(0x1a8)+_0x2f8366+_0xae6e57(0x1aa);}function generateCreateCompositeFunction(_0x2d581d,_0x257a90,_0x137495,_0x55e795=null){const _0x57c4d9=a0_0x48ec,_0x53f596={'HAcpj':_0x57c4d9(0x197),'GqmdJ':'unit_price','ymtrt':_0x57c4d9(0x14f),'diLpg':'\x20(with\x20detail\x20items)'};if(!_0x55e795){const _0x2735a5=FileUtils[_0x57c4d9(0x1d8)](_0x257a90);_0x55e795=_0x2735a5+_0x57c4d9(0x180);}const _0x3d60e4=_0x137495['masterDetail']&&_0x137495['masterDetail']['enabled'],_0xd65782=_0x3d60e4?_0x137495[_0x57c4d9(0xc1)]['detailTable']:null,_0x131793=_0xd65782?_0xd65782[_0x57c4d9(0x10d)]('.')[_0x57c4d9(0x10e)]():_0x53f596['HAcpj'],_0x32ff55=_0x257a90[_0x57c4d9(0x17c)](/-/g,'_'),_0x2b3470=_0x137495[_0x57c4d9(0xc1)]?.['detailConfig']?.['autoCalculateFields']?.[_0x57c4d9(0x164)]?.['formula']||'',_0x1938d0=_0x2b3470[_0x57c4d9(0x10d)]('*')[_0x57c4d9(0x9a)](_0x1d97f6=>_0x1d97f6[_0x57c4d9(0x8c)]()),_0x2607f3=_0x137495['masterDetail']?.['headerCalculations']?.[_0x57c4d9(0xf8)]?.[_0x57c4d9(0xd0)]?.[_0x57c4d9(0x17c)]('items.','')||'',_0x3e99fd=_0x1938d0[0x0]||_0x2607f3,_0x4bcec2=_0x1938d0[0x1]||_0x53f596['GqmdJ'];return'\x0a//\x20POST\x20/api/'+_0x2d581d+'/'+_0x257a90+'/create-composite\x20-\x20Composite\x20create\x20'+(_0x3d60e4?_0x53f596[_0x57c4d9(0xcb)]:'')+_0x57c4d9(0x1bf)+_0x257a90+_0x57c4d9(0x130)+_0x32ff55+_0x57c4d9(0x94)+_0x32ff55+_0x57c4d9(0x211)+(_0x3d60e4?'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x32ff55+_0x57c4d9(0x7e)+_0x131793+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x32ff55+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}')+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20req.body.'+_0x32ff55+_0x57c4d9(0x209)+_0x55e795+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20saja\x20(exclude\x20detail\x20array)\x20untuk\x20validation\x0a\x20\x20\x20\x20\x20\x20const\x20headerDataForValidation\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20'+(_0x3d60e4?_0x57c4d9(0xe6)+_0x131793+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x55e795+_0x57c4d9(0xe2)+(_0x3d60e4?'\x0a\x20\x20\x20\x20//\x20Validasi\x20detail\x20items\x20untuk\x20master-detail\x0a\x20\x20\x20\x20if\x20(!data.'+_0x131793+_0x57c4d9(0x152)+_0x131793+_0x57c4d9(0xf2)+_0x131793+_0x57c4d9(0x8b)+_0x131793+'\x22\x20must\x20be\x20a\x20non-empty\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Auto-calculate\x20totals\x20jika\x20ada\x20konfigurasi\x0a\x20\x20\x20\x20'+(_0x137495[_0x57c4d9(0xc1)][_0x57c4d9(0x21b)]?'\x0a\x20\x20\x20\x20const\x20headerCalc\x20=\x20'+JSON[_0x57c4d9(0x147)](_0x137495['masterDetail']['headerCalculations'])+_0x57c4d9(0x182)+_0x131793+'.length;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(headerCalc.total_qty\x20&&\x20headerCalc.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20headerCalc.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20data.total_qty\x20=\x20data.'+_0x131793+'.reduce((sum,\x20item)\x20=>\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200),\x200);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20'+(_0x3e99fd?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Calculate\x20total_amount\x20as\x20sum\x20of\x20('+_0x3e99fd+_0x57c4d9(0xab)+_0x4bcec2+')\x20from\x20all\x20items\x0a\x20\x20\x20\x20\x20\x20data.total_amount\x20=\x20data.'+_0x131793+'.reduce((sum,\x20item)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20qty\x20=\x20Number(item.'+_0x3e99fd+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x4bcec2+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20sum\x20+\x20(qty\x20*\x20price);\x0a\x20\x20\x20\x20\x20\x20},\x200);\x0a\x20\x20\x20\x20}':_0x57c4d9(0x204))+'\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20console.log(\x27Calculated\x20totals:\x27,\x20{\x0a\x20\x20\x20\x20\x20\x20total_items:\x20data.total_items,\x0a\x20\x20\x20\x20\x20\x20total_qty:\x20data.total_qty,\x0a\x20\x20\x20\x20\x20\x20total_amount:\x20data.total_amount\x0a\x20\x20\x20\x20});\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x137495['tableName']+_0x57c4d9(0x88)+_0xd65782+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0x3d60e4?_0x137495[_0x57c4d9(0xc1)][_0x57c4d9(0x7b)]:'')+_0x57c4d9(0x167)+_0x55e795+'.createComposite(data,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x257a90+'\x20composite\x20create\x20successful`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x257a90+_0x57c4d9(0x19a)+(_0x3d60e4?_0x53f596[_0x57c4d9(0x7d)]:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20create\x20'+_0x257a90+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20creating\x20'+_0x257a90+_0x57c4d9(0x150);}function generateUpdateCompositeFunction(_0x56209a,_0x4595ef,_0x2969cc,_0x1d4f8c=null){const _0x46edf8=a0_0x48ec,_0x2933e7={'fOPJn':_0x46edf8(0x14f),'CyDgR':'\x20(with\x20detail\x20items)'};if(!_0x1d4f8c){const _0x5bee62=FileUtils['toCamelCase'](_0x4595ef);_0x1d4f8c=_0x5bee62+_0x46edf8(0x180);}const _0x268dbe=_0x2969cc['masterDetail']&&_0x2969cc[_0x46edf8(0xc1)]['enabled'],_0x558e5b=_0x268dbe?_0x2969cc['masterDetail']['detailTable']:null,_0x96e08d=_0x558e5b?_0x558e5b[_0x46edf8(0x10d)]('.')['pop']():_0x46edf8(0x197),_0xa75b9c=_0x4595ef[_0x46edf8(0x17c)](/-/g,'_'),_0x72431d=_0x2969cc[_0x46edf8(0x104)]||'id',_0x50ada0=_0x2969cc[_0x46edf8(0x206)]?_0x46edf8(0x1ce)+_0x1d4f8c+_0x46edf8(0xfb)+_0x72431d+_0x46edf8(0x1c5)+_0x72431d+'\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Master\x20record\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return _0x46edf8(0x205)+_0x56209a+'/'+_0x4595ef+'/update-composite\x20-\x20Composite\x20update\x20'+(_0x268dbe?_0x2933e7[_0x46edf8(0x14d)]:'')+_0x46edf8(0x1a4)+_0x4595ef+_0x46edf8(0x108)+_0xa75b9c+_0x46edf8(0x94)+_0xa75b9c+_0x46edf8(0x211)+(_0x268dbe?_0x46edf8(0xc2)+_0xa75b9c+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x72431d+'\x22:\x20\x22existing-id\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x96e08d+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0xa75b9c+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x72431d+'\x22:\x20\x22existing-id\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}')+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20req.body.'+_0xa75b9c+_0x46edf8(0x1ab)+_0x72431d+_0x46edf8(0x1dc)+_0x72431d+_0x46edf8(0xde)+_0x50ada0+'\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x1d4f8c+_0x46edf8(0xa8)+(_0x268dbe?_0x46edf8(0xe6)+_0x96e08d+';':'')+_0x46edf8(0x14b)+_0x1d4f8c+'.validateData(headerDataForValidation,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Merge\x20sanitized\x20data\x20(termasuk\x20hash\x20result)\x20kembali\x20ke\x20data\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20'+(_0x268dbe?_0x46edf8(0x22b)+_0x96e08d+_0x46edf8(0x202)+_0x96e08d+_0x46edf8(0x110)+_0x96e08d+'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x96e08d+'\x22\x20must\x20be\x20an\x20object\x20with\x20structure\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20structure:\x20insert,\x20update,\x20delete\x20harus\x20array\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20operations\x20=\x20data.'+_0x96e08d+_0x46edf8(0x253)+_0x96e08d+_0x46edf8(0x165)+_0x96e08d+'.update\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.delete\x20&&\x20!Array.isArray(operations.delete))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x96e08d+_0x46edf8(0x15d):'')+_0x46edf8(0x22c)+_0x2969cc['tableName']+_0x46edf8(0x88)+_0x558e5b+_0x46edf8(0x8e)+(_0x268dbe?_0x2969cc[_0x46edf8(0xc1)]['foreignKey']:'')+_0x46edf8(0x24d)+_0x1d4f8c+_0x46edf8(0x200)+_0x4595ef+_0x46edf8(0xe3)+_0x72431d+'=${data.'+_0x72431d+_0x46edf8(0x134)+_0x4595ef+_0x46edf8(0x24a)+(_0x268dbe?_0x2933e7[_0x46edf8(0x1fe)]:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20update\x20'+_0x4595ef+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20\x22Data\x20tidak\x20ditemukan\x22\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x4595ef+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x4595ef+_0x46edf8(0x150);}function generateReadCompositeFunction(_0xba7e85,_0x4b1c27,_0x1895cd,_0x43e0ba=null){const _0x6d5d70=a0_0x48ec;if(!_0x43e0ba){const _0x2c9605=FileUtils[_0x6d5d70(0x1d8)](_0x4b1c27);_0x43e0ba=_0x2c9605+_0x6d5d70(0x180);}const _0x14736d=JSON['stringify'](_0x1895cd[_0x6d5d70(0x1b2)]||[]);return _0x6d5d70(0x205)+_0xba7e85+'/'+_0x4b1c27+_0x6d5d70(0x124)+_0x4b1c27+'/read-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20where\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x1895cd[_0x6d5d70(0x104)]||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20model\x20readComposite\x20method\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x43e0ba+'.readComposite(req.body);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x4b1c27+_0x6d5d70(0x23e)+_0x4b1c27+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20reading\x20'+_0x4b1c27+_0x6d5d70(0x128);}function generateWorkflowFunction(_0x46aa17,_0x4d1780,_0x4685a2,_0x2ee2e6=null){const _0x2c3cc3=a0_0x48ec;if(!_0x2ee2e6){const _0x5eb449=FileUtils['toCamelCase'](_0x4d1780);_0x2ee2e6=_0x5eb449+'Model';}const _0x5e9b2e=_0x4685a2['workflow']?JSON[_0x2c3cc3(0x147)](_0x4685a2[_0x2c3cc3(0x13e)]):'{}',_0x540255=_0x4685a2['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x2ee2e6+_0x2c3cc3(0x12f)+_0x4d1780+_0x2c3cc3(0x21e):'';return _0x2c3cc3(0x205)+_0x46aa17+'/'+_0x4d1780+_0x2c3cc3(0xb6)+_0x4d1780+'\x0arouter.post(\x27/change-status\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20required\x20fields:\x20id/primary\x20key\x20dan\x20status\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x4685a2['primaryKey']||'id')+_0x2c3cc3(0x249)+_0x540255+'\x0a\x20\x20\x20\x20const\x20workflowConfig\x20=\x20'+_0x5e9b2e+';\x0a\x20\x20\x20\x20workflowConfig._project\x20=\x20\x27'+_0x46aa17+_0x2c3cc3(0xc4)+_0x4685a2['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20services:\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20req.body.updated_by\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20JWT\x20forwarding\x20(Layer\x201\x20RLS):\x20Authorization\x20header\x20dari\x20request\x20asli\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20di-forward\x20ke\x20workflow\x20hook\x20call\x20agar\x20endpoint\x20tujuan\x20yang\x20punya\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20requestScope\x20aktif\x20tetap\x20menerima\x20req.user\x20dengan\x20scope\x20yang\x20sama.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Selalu\x20di-set\x20(bukan\x20kondisional\x20pada\x20payload.requestScope)\x20karena\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20hook\x20URL\x20tujuan\x20mungkin\x20punya\x20requestScope\x20sendiri\x20walaupun\x20module\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20sumber\x20tidak.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20services\x20jika\x20tersedia\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20resolveServices\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/service-resolver\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20eventContext.services\x20=\x20resolveServices();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Service\x20resolver\x20opsional\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x2ee2e6+_0x2c3cc3(0xd8)+_0x2ee2e6+_0x2c3cc3(0x120)+_0x4d1780+'\x20status\x20changed:\x20${result.workflow.previousStatus}\x20→\x20${result.workflow.newStatus}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20`Status\x20changed\x20from\x20${result.workflow.previousStatus}\x20to\x20${result.workflow.newStatus}`,\x0a\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20workflow:\x20result.workflow,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20change-status\x20'+_0x4d1780+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Status\x20transition\x20not\x20allowed\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422\x20||\x20error.message.includes(\x27Cannot\x20change\x20status\x27)\x20||\x20error.message.includes(\x27No\x20transitions\x20defined\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Status\x20transition\x20not\x20allowed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Concurrent\x20modification\x20(optimistic\x20concurrency\x20check\x20via\x20status\x20guard\x20clause)\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27WORKFLOW_CONCURRENT_MODIFICATION\x27\x20||\x20error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Concurrent\x20modification\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validation\x20errors\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27is\x20required\x20for\x27)\x20||\x20error.message.includes(\x27is\x20not\x20a\x20valid\x20field\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hook\x20execution\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27hook\x20failed\x27)\x20||\x20error.message.includes(\x27onBefore\x27)\x20||\x20error.message.includes(\x27onAfter\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(502).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Workflow\x20hook\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Record\x20not\x20found\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x4d1780+_0x2c3cc3(0x11d);}function createPostgresSubmoduleTemplate(_0x3eae21,_0x2daa9e,_0x917ef5){const _0x1f99b9=a0_0x48ec,_0xeff299={'duMcS':function(_0x426dc3,_0x3de980){return _0x426dc3===_0x3de980;},'CqpfH':'null','GAlno':function(_0x22b3d6,_0x5f4787){return _0x22b3d6(_0x5f4787);},'gutkO':function(_0x4d17d4,_0x90ba2a){return _0x4d17d4!==_0x90ba2a;},'Fynvb':function(_0x3c3409,_0x449278){return _0x3c3409!==_0x449278;}},_0x5467d1=FileUtils[_0x1f99b9(0x171)](_0x2daa9e),_0xd8b8ac=new Date()[_0x1f99b9(0x24f)]()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x445faf=_0x917ef5[_0x1f99b9(0x139)]||{'all':_0x917ef5['fieldName']||[]},_0x1f9514=FileUtils[_0x1f99b9(0x207)](_0x917ef5['fieldName']||[]),_0x36451d=FileUtils[_0x1f99b9(0x1d8)](_0x2daa9e),_0x43f304=_0x36451d+_0x1f99b9(0x180),_0x3447aa=_0x917ef5['kafka']&&_0xeff299[_0x1f99b9(0x1f9)](_0x917ef5['kafka'][_0x1f99b9(0x20b)],!![]),_0xcdaf3e=buildEndpointFunctions(_0x3eae21,_0x2daa9e,_0x917ef5,_0x445faf,_0x1f9514,_0x43f304,_0x3447aa),_0x1ccfab=_0x3447aa?_0x1f99b9(0x236)+JSON['stringify'](_0x917ef5['kafka']||{'enabled':![]})+';\x0a':'';return _0x1f99b9(0x11e)+_0x43f304+'\x20=\x20require(\x27../../models/'+_0x3eae21+'/'+_0x2daa9e+'\x27);\x0a\x0a//\x20Issue\x20#13:\x20ekstrak\x20field\x20penyebab\x20konflik\x20dari\x20error\x20unique-violation\x20PostgreSQL.\x0a//\x20Mengembalikan\x20map\x20{\x20field:\x20[pesan]\x20}\x20atau\x20null\x20(call-site\x20meng-omit\x20`details`).\x0afunction\x20buildDuplicateDetails(error)\x20{\x0a\x20\x20if\x20(!error\x20||\x20typeof\x20error.detail\x20!==\x20\x27string\x27)\x20return\x20null;\x0a\x20\x20const\x20m\x20=\x20error.detail.match(/^Key\x20\x5c(([^)]+)\x5c)=/);\x0a\x20\x20if\x20(!m)\x20return\x20null;\x0a\x20\x20const\x20cols\x20=\x20m[1].split(\x27,\x27).map((c)\x20=>\x20c.trim().replace(/^\x22|\x22$/g,\x20\x27\x27)).filter(Boolean);\x0a\x20\x20if\x20(cols.length\x20===\x200)\x20return\x20null;\x0a\x20\x20const\x20msg\x20=\x20cols.length\x20>\x201\x0a\x20\x20\x20\x20?\x20\x27A\x20record\x20with\x20this\x20combination\x20of\x20values\x20already\x20exists\x27\x0a\x20\x20\x20\x20:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27;\x0a\x20\x20const\x20details\x20=\x20{};\x0a\x20\x20for\x20(const\x20c\x20of\x20cols)\x20details[c]\x20=\x20[msg];\x0a\x20\x20return\x20details;\x0a}\x0a'+_0x1ccfab+'\x0a\x0a//\x20Component\x20Engine\x20untuk\x20event\x20lifecycle\x20(optional)\x0alet\x20componentEngine\x20=\x20null;\x0alet\x20ContextBuilder\x20=\x20null;\x0atry\x20{\x0a\x20\x20//\x20Hanya\x20load\x20component\x20engine\x20jika\x20payload\x20memiliki\x20components\x0a\x20\x20const\x20hasComponents\x20=\x20'+JSON[_0x1f99b9(0x147)](_0x917ef5[_0x1f99b9(0x193)])+'\x20&&\x20Array.isArray('+JSON[_0x1f99b9(0x147)](_0x917ef5[_0x1f99b9(0x193)])+_0x1f99b9(0x210)+JSON[_0x1f99b9(0x147)](_0x917ef5[_0x1f99b9(0x193)])+'.length\x20>\x200;\x0a\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20componentEngine\x20=\x20require(\x27@restforgejs/platform/src/utils/component-engine\x27).componentEngine;\x0a\x20\x20\x20\x20ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a\x0a\x20\x20\x20\x20//\x20Load\x20component\x20configuration\x20dari\x20payload\x20yang\x20sedang\x20digunakan\x0a\x20\x20\x20\x20const\x20componentConfig\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x917ef5[_0x1f99b9(0x140)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20fieldName:\x20'+JSON['stringify'](_0x917ef5[_0x1f99b9(0x1b2)])+_0x1f99b9(0x10b)+(_0x917ef5[_0x1f99b9(0x18d)]?'\x27'+_0x917ef5[_0x1f99b9(0x18d)]+'\x27':_0xeff299['CqpfH'])+',\x0a\x20\x20\x20\x20\x20\x20columnFormats:\x20'+(_0x917ef5['columnFormats']?JSON['stringify'](_0x917ef5[_0x1f99b9(0x156)]):'null')+_0x1f99b9(0x17f)+(_0x917ef5['fieldLabels']?JSON['stringify'](_0x917ef5['fieldLabels']):_0xeff299[_0x1f99b9(0x8d)])+_0x1f99b9(0x20d)+JSON['stringify'](_0x917ef5['components'])+',\x0a\x20\x20\x20\x20\x20\x20importConfig:\x20'+(_0x917ef5['importConfig']?JSON[_0x1f99b9(0x147)](_0x917ef5['importConfig']):'null')+_0x1f99b9(0x21f)+(_0x917ef5[_0x1f99b9(0x19d)]?JSON[_0x1f99b9(0x147)](_0x917ef5[_0x1f99b9(0x19d)]):_0xeff299['CqpfH'])+',\x0a\x20\x20\x20\x20\x20\x20workflowConfig:\x20'+(_0x917ef5[_0x1f99b9(0x13e)]?JSON[_0x1f99b9(0x147)](_0x917ef5[_0x1f99b9(0x13e)]):_0xeff299['CqpfH'])+',\x0a\x20\x20\x20\x20\x20\x20uploadConfig:\x20'+(_0x917ef5[_0x1f99b9(0x157)]?JSON['stringify'](_0x917ef5[_0x1f99b9(0x157)]):_0xeff299['CqpfH'])+_0x1f99b9(0x1d4)+(_0x917ef5['requestScope']?JSON['stringify'](_0x917ef5['requestScope']):_0xeff299['CqpfH'])+'\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20componentEngine.loadConfigurationFromObject(componentConfig).then(result\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(result.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Component\x20configuration\x20loaded\x20for\x20'+_0x3eae21+'/'+_0x2daa9e+_0x1f99b9(0x1e5)+_0x3eae21+'/'+_0x2daa9e+':`,\x20err.message);\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a}\x20catch\x20(e)\x20{\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20//\x20Components\x20dikonfigurasi\x20tapi\x20engine\x20gagal\x20load\x20—\x20ini\x20error,\x20bukan\x20optional\x0a\x20\x20\x20\x20console.error(`CRITICAL:\x20Component\x20engine\x20failed\x20to\x20load\x20for\x20'+_0x3eae21+'/'+_0x2daa9e+'\x20but\x20components\x20are\x20configured:`,\x20e.message);\x0a\x20\x20\x20\x20throw\x20e;\x0a\x20\x20}\x0a\x20\x20//\x20Jika\x20tidak\x20ada\x20components,\x20silent\x20skip\x20wajar\x0a\x20\x20console.log(`No\x20component\x20engine\x20required\x20for\x20'+_0x3eae21+'/'+_0x2daa9e+_0x1f99b9(0x162)+_0x5467d1+'\x20Submodule\x20-\x20Auto-generated\x20on\x20'+_0xd8b8ac+'\x0a\x20*\x0a\x20*\x20Endpoints\x20untuk\x20'+_0x2daa9e+_0x1f99b9(0x159)+_0xeff299['GAlno'](getEnabledActions,_0x917ef5)[_0x1f99b9(0x133)](',\x20')+_0x1f99b9(0x186)+_0x917ef5[_0x1f99b9(0x140)]+'\x0a\x20*\x20Fields:\x20'+(_0x917ef5[_0x1f99b9(0x1b2)]?_0x917ef5[_0x1f99b9(0x1b2)]['length']:0x0)+_0x1f99b9(0x1c7)+_0x3eae21+'/'+_0x2daa9e+'\x27\x20+\x20req.path\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20spesifik\x20untuk\x20endpoint\x20tertentu\x0a\x20\x20\x20\x20\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x20//\x20menghapus\x20/\x20di\x20awal\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20get\x20membutuhkan\x20where\x20dalam\x20format\x20{key,\x20value}\x20atau\x20[{key,\x20value}]\x20(1\x20elemen)\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27first\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20must\x20be\x20a\x20single\x20condition\x20{key,\x20value}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20delete\x20membutuhkan\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27\x20&&\x20(!req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27DELETE\x20payload\x20must\x20include\x20a\x20where\x20property\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20add\x20membutuhkan\x20data\x20yang\x20valid\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27add\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Filter\x20field\x20yang\x20memiliki\x20autoGenerate\x20dari\x20required\x20check\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20autoGenerateFields\x20=\x20'+(_0x917ef5['fieldValidation']?JSON['stringify'](_0x917ef5['fieldValidation'][_0x1f99b9(0x187)](_0x2bd22c=>_0x2bd22c[_0x1f99b9(0xf3)]&&_0x2bd22c['constraints']['autoGenerate'])['map'](_0x5f1218=>_0x5f1218['name'])):'[]')+';\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20requiredFields\x20=\x20[\x27'+_0x917ef5['fieldName'][_0x1f99b9(0x187)](_0x6dd366=>_0x6dd366!=='id')['slice'](0x0,0x1)[_0x1f99b9(0x133)]('\x27,\x20\x27')+'\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20.filter(field\x20=>\x20!autoGenerateFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20missingFields\x20=\x20requiredFields.filter(field\x20=>\x20!req.body[field]\x20||\x20req.body[field]\x20===\x20\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(missingFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Required\x20field(s):\x20${missingFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20update\x20membutuhkan\x20primary\x20key\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27update\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x917ef5['primaryKey']||'id')+'\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a'+buildRequestScopeMiddleware(_0x917ef5,_0x2daa9e)+_0xeff299[_0x1f99b9(0xaa)](buildSoftDeleteReadMiddleware,_0x917ef5)+'\x0a'+_0xcdaf3e+'\x0a\x0a'+(_0xeff299[_0x1f99b9(0x121)](_0x917ef5['action']?.[_0x1f99b9(0x1cc)],![])?'//\x20Endpoint\x20info\x20—\x20self-documenting\x20API\x0arouter.get(\x27/info\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20actions\x20=\x20'+JSON[_0x1f99b9(0x147)]({'datatables':!!_0x917ef5[_0x1f99b9(0x154)]?.['datatables'],'read':!!_0x917ef5[_0x1f99b9(0x154)]?.[_0x1f99b9(0x132)],'first':!!_0x917ef5['action']?.['first'],'create':!!_0x917ef5['action']?.[_0x1f99b9(0x101)],'update':!!_0x917ef5['action']?.[_0x1f99b9(0x109)],'delete':!!_0x917ef5['action']?.[_0x1f99b9(0x119)],'lookup':!!_0x917ef5['action']?.[_0x1f99b9(0x1c1)],'export':!!_0x917ef5['action']?.['export'],'import':!!_0x917ef5[_0x1f99b9(0x154)]?.['import'],'workflow':!!_0x917ef5[_0x1f99b9(0x154)]?.[_0x1f99b9(0x13e)],'info':_0xeff299['Fynvb'](_0x917ef5[_0x1f99b9(0x154)]?.['info'],![])})+';\x0a\x0a\x20\x20\x20\x20const\x20modelInfo\x20=\x20await\x20'+_0x43f304+'.getModelInfo(actions);\x0a\x0a\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x2daa9e+'\x27,\x0a\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x3eae21+_0x1f99b9(0x135)+_0xd8b8ac+_0x1f99b9(0x19c)+_0x2daa9e+_0x1f99b9(0x1fb):'//\x20Endpoint\x20/info\x20dinonaktifkan\x20via\x20action.info\x20=\x20false')+'\x0a\x0a//\x20Health\x20check\x20endpoint\x0arouter.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20res.json({\x0a\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20endpoint:\x20\x27'+_0x2daa9e+_0x1f99b9(0x1a3);}function createPostgresMainModuleTemplate(_0x500313){const _0x4b14e4=a0_0x48ec,_0x58db9c=FileUtils['toPascalCase'](_0x500313),_0x389a38=FileUtils['toCamelCase'](_0x500313),_0x448689=new Date()['toISOString']()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,'');return _0x4b14e4(0x89)+_0x58db9c+_0x4b14e4(0x1b8)+_0x448689+'\x0a\x20*\x0a\x20*\x20Fungsi\x20untuk\x20mengeksekusi\x20modul\x20'+_0x500313+_0x4b14e4(0x185)+_0x58db9c+_0x4b14e4(0xa7)+_0x500313+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20pluginPath\x20=\x20path.join(__dirname,\x20\x27..\x27,\x20\x27plugins\x27,\x20`${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20let\x20plugin\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(pluginPath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin\x20=\x20require(pluginPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin.onBeforeEndpointsLoad)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onBeforeEndpointsLoad(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27plugin_loaded\x27,\x20plugin:\x20`${moduleName}-plugin`\x20},\x20`Plugin\x20loaded:\x20${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_load_error\x27,\x20error:\x20pluginError.message\x20},\x20`Failed\x20to\x20load\x20plugin:\x20${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20health\x20check\x20endpoint\x20(tanpa\x20prefix\x20module)\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x500313+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Module-specific\x20health\x20check\x20endpoint\x20(dengan\x20prefix\x20module)\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/api/'+_0x500313+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x500313+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Service\x20info\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/api/'+_0x500313+'/info\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name:\x20\x27'+_0x58db9c+'\x20API\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20description:\x20\x27Auto-generated\x20API\x20module\x20for\x20'+_0x500313+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20documentation:\x20\x27See\x20individual\x20endpoint\x20documentation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x448689+'\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Load\x20dan\x20register\x20endpoint\x20modules\x0a\x20\x20\x20\x20\x20\x20//\x20Binary-compatible:\x20Use\x20working\x20directory\x20instead\x20of\x20__dirname\x0a\x20\x20\x20\x20\x20\x20const\x20isBunCompiled\x20=\x20typeof\x20Bun\x20!==\x20\x27undefined\x27\x20&&\x20!process.argv[1];\x0a\x20\x20\x20\x20\x20\x20const\x20getWorkingDir\x20=\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20running\x20as\x20compiled\x20binary\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isBunCompiled)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Running\x20as\x20compiled\x20binary:\x20use\x20directory\x20where\x20binary\x20is\x20located\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20path.dirname(process.execPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Running\x20as\x20Node.js/Bun\x20script:\x20__dirname\x20is\x20already\x20in\x20src/modules\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20So\x20we\x20just\x20need\x20to\x20add\x20the\x20module\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20__dirname;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20workingDir\x20=\x20getWorkingDir();\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20compiled\x20binary:\x20workingDir\x20is\x20binary\x20directory,\x20need\x20full\x20path\x20src/modules/moduleName\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20script:\x20workingDir\x20is\x20already\x20src/modules/,\x20just\x20add\x20moduleName\x0a\x20\x20\x20\x20\x20\x20const\x20modulesDir\x20=\x20isBunCompiled\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20path.join(workingDir,\x20\x27src\x27,\x20\x27modules\x27,\x20\x27'+_0x500313+_0x4b14e4(0x1d3)+_0x500313+'\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ensure\x20modules\x20directory\x20exists\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Created\x20modules\x20directory:\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Read\x20dan\x20load\x20semua\x20endpoint\x20files\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27endpoints_loading\x27,\x20count:\x20endpointFiles.length\x20},\x20`Loading\x20${endpointFiles.length}\x20endpoint(s)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20setiap\x20endpoint\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointName\x20=\x20path.basename(file,\x20\x27.js\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Clear\x20module\x20cache\x20untuk\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(require.cache[endpointPath])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete\x20require.cache[endpointPath];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointRouter\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!endpointRouter)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.warn(`Endpoint\x20${endpointName}\x20did\x20not\x20export\x20a\x20router`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20endpoint\x20dengan\x20prefix\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0x500313+'/${endpointName}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20app.use(endpointPrefix,\x20endpointRouter);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logEndpointRegistered(endpointName,\x20endpointPrefix);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20export\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20exportConfig\x20=\x20extractExportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(exportConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerRoutes(app,\x20\x27'+_0x500313+_0x4b14e4(0x102)+_0x500313+'\x27,\x20endpointName,\x20importConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27import_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20table:\x20importConfig.tableName\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Import\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(importError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27import_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20importError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Import\x20registration\x20failed\x20for\x20${endpointName}:\x20${importError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20upload\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20uploadConfig\x20=\x20extractUploadConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(uploadConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UploadHandler.registerRoutes(app,\x20\x27'+_0x500313+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20uploadError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(endpointError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20endpoint\x20${file}:`,\x20endpointError.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Continue\x20loading\x20other\x20endpoints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(dirError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20reading\x20modules\x20directory\x20${modulesDir}:`,\x20dirError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20cleanup\x20route\x20(optional\x20admin\x20endpoint)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27cleanup_route_error\x27,\x20error:\x20cleanupError.message\x20},\x20\x27Export\x20cleanup\x20route\x20registration\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20root\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20404\x20handler\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20workbench\x20UI\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20404\x20handler\x20untuk\x20unknown\x20routes\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Global\x20Error\x20Handler\x20-\x20${req.method}\x20${req.url}:`,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20other\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20statusCode\x20=\x20err.statusCode\x20||\x20err.status\x20||\x20500;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20errorResponse\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20err.name\x20||\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20err.message\x20||\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20stack\x20trace\x20in\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20!==\x20\x27production\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errorResponse.stack\x20=\x20err.stack;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(statusCode).json(errorResponse);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Start\x20server\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x500313+_0x4b14e4(0x1cb)+_0x500313+_0x4b14e4(0x1f2)+_0x500313+'/info`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseUrl:\x20`http://${displayHost}:${port}`\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Execute\x20plugin\x20onAfterServerStart\x20hook\x20(jika\x20ada)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin\x20&&\x20plugin.onAfterServerStart)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onAfterServerStart(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_after_start_error\x27,\x20error:\x20pluginError.message\x20},\x20\x27Plugin\x20onAfterServerStart\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Graceful\x20shutdown\x20handling\x0a\x20\x20\x20\x20\x20\x20const\x20gracefulShutdown\x20=\x20(signal)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`\x5cnReceived\x20${signal},\x20starting\x20graceful\x20shutdown...`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20server.close((err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20during\x20server\x20shutdown:\x27,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Server\x20closed\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Goodbye!\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Force\x20shutdown\x20after\x2010\x20seconds\x0a\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Forced\x20shutdown\x20after\x20timeout\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x2010000);\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20shutdown\x20signals\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGINT\x27));\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGTERM\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20uncaught\x20exceptions\x0a\x20\x20\x20\x20\x20\x20process.on(\x27uncaughtException\x27,\x20(error)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Uncaught\x20Exception:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27uncaughtException\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27unhandledRejection\x27,\x20(reason,\x20promise)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Unhandled\x20Rejection\x20at:\x27,\x20promise,\x20\x27reason:\x27,\x20reason);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27unhandledRejection\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Store\x20server\x20reference\x20untuk\x20testing/management\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onServerReady\x20&&\x20typeof\x20config.onServerReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onServerReady(server,\x20app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Fatal\x20error\x20in\x20${moduleNameCapitalized}\x20module:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Promise\x20tidak\x20akan\x20pernah\x20resolve\x20untuk\x20menjaga\x20server\x20tetap\x20berjalan\x0a\x20\x20\x20\x20//\x20kecuali\x20ada\x20error\x20atau\x20shutdown\x20signal\x0a\x20\x20});\x0a}\x0a\x0a//\x20Export\x20execute\x20function\x0amodule.exports\x20=\x20{\x20execute\x20};\x0a\x0a//\x20Additional\x20exports\x20untuk\x20testing\x20dan\x20management\x0amodule.exports.'+_0x389a38+_0x4b14e4(0x1f4)+_0x500313+_0x4b14e4(0x1a6)+_0x448689+'\x27;';}module['exports']={'createPostgresModelTemplate':createPostgresModelTemplate,'createPostgresSubmoduleTemplate':createPostgresSubmoduleTemplate,'createPostgresMainModuleTemplate':createPostgresMainModuleTemplate};
1
+ function a0_0x4038(){const _0x14a857=['iJOGwWOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmsWGiMzPzwXKiJOGiNzHBhvLiIb9laOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmIWGiMzPzwXKiJOGiNzHBhvLiIb9cIaGicaGicaGicaGif0kicaGicaGicaGih0kicaGicaGicb9','Dg90ywXFyw1VDw50','cIaGicaVlYbgsY1trc0YicHYzxn0CMLJDcK6ig92zxjYAwrLigrLBgv0zurHDgeGBwvSzw1WyxiGC3rHDhvZq29Kzsa0mdKGyMLSysbTyxn0zxiGBwfZAwGkicaGic8VigrPCMvMzxjLBNnPA2fUigfUywSGywT0AwyGkgfUywSGC29MDc1KzwXLDguPigf0yxuGyw5HAYbHCgeGChvUicHHBMfRig5VBI1ZB2z0lwrLBgv0zsKUcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0Gnda5ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDdB25MBgLJDcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','oWOGicaGBgv0ihnLBgvJDca9ig51BgW7cIaGicbPzIaOCMvXlMjVzhKUC2vSzwn0icyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUC2vSzwn0ksKGEWOGicaGicbJB25ZDcbPBNzHBgLKrMLLBgrZid0GCMvXlMjVzhKUC2vSzwn0lMzPBhrLCIHMAwvSzca9pIaHDMfSAwrgAwvSzhmUAw5JBhvKzxmOzMLLBgqPktSkicaGicaGAwyGkgLUDMfSAwrgAwvSzhmUBgvUz3rOid4GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbZzwXLy3qGzMLLBgrZjYWkicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGlI4UkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GEYb2ywXPzezPzwXKCYb9idOGE30PlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbZzwXLy3qGpsbYzxeUyM9KEs5ZzwXLy3q7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGCgfYyw1LDgvYihbHz2LUyxnPicHOyw55ysbQAwTHig1VzguGCgfNAw5HC2KPcIaGicbPzIaOCgfNAw5HDguPihSkicaGicaGAwyGkhbHz2uGpcaXksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWywDLoIbBj1bHz2uGBxvZDcbIzsbNCMvHDgvYihrOyw4GmcDDcIaGicaGicaGicb9cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGigLMicHWzxjqywDLidWGmsb8FcbWzxjqywDLid4GmtaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWzxjFCgfNztOGwYDqzxiGCgfNzsbTDxn0igjLigjLDhDLzw4GmsbHBMqGmtaWj10kicaGicaGicaGih0kicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicaGigLMicHZzwfYy2HwywX1zs5Szw5NDgGGpIaYntuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbTzxnZywDLoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGC2vHCMnOx3zHBhvLoIbBj1nLyxjJAcb2ywX1zsbTDxn0ig5VDcbLEgnLzwqGmJu1ignOyxjHy3rLCNmNxqOGicaGicaGih0kicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGA29SB20GC2vHCMnOAw5NcIaGicbPzIaOixzHBgLKrMLLBgrZlMLUy2X1zgvZkhnLyxjJAej5ksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGig1LC3nHz2u6icDwywXPzgf0Aw9UigzHAwXLzcCScIaGicaGicaGzxjYB3jZoIb7cIaGicaGicaGicbZzwfYy2HFyNK6ifTWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igbjBNzHBgLKihnLyxjJAcbMAwvSzc4GvMfSAwqGzMLLBgrZoIaKE3zHBgLKrMLLBgrZlMPVAw4OjYWGjYL9yca6icDjBNzHBgLKihnLyxjJAcbMAwvSzcDDcIaGicaGicaGFqOGicaGicb9ktSkicaGih0kcIaGicaVlYbcDwLSzcbVChrPB25ZihvUDhvRig1VzgvScIaGicbJB25ZDcbVChrPB25Zid0GEWOGicaGicbZzwfYy2HwywX1ztOGC2vHCMnOvMfSDwuScIaGicaGihnLyxjJAej5oIbZzwfYy2HcEsWkicaGicaGC29YDf9JB2X1Bw5ZoIbZB3j0x2nVBhvTBNmScIaGicaGihDOzxjLoIb3AgvYzsWkicaGicaGC2vSzwn0oIbZzwXLy3qkicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGig9WDgLVBNmUCgfNzsa9ihbHz2u7cIaGicaGig9WDgLVBNmUCgvYugfNzsa9ihbLCLbHz2u7cIaGicaGig9WDgLVBNmUB2zMC2v0id0GkhbHz2uGlsaXksaQihbLCLbHz2u7cIaGicb9igvSC2uGEWOGicaGicbVChrPB25ZlMXPBwL0id0GBgLTAxq7cIaGicb9cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbTzw5KyxbHDgTHBIbKyxrHigXPC3qkicaGignVBNn0ihjLC3vSDca9igf3ywL0ia','ie1VzgvSic0Gqxv0BY1Nzw5LCMf0zwqGB24G','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','laOGicaGicbHzgP1C3rdB25MAwC6ia','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','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','iJOGEWOGicaGicaGicaGicaI','Dg9qyxnJywXdyxnL','B25ezwXLDgu','v0LjwNa','cIaGicaVlYbhzxqGy29YCMvSyxrPB24GsuqGzNjVBsbOzwfKzxiGkg9WDgLVBMfSkqOGicaGy29UC3qGy29YCMvSyxrPB25jzca9ihjLCs5OzwfKzxjZwYD4lwnVCNjLBgf0Aw9UlwLKj10GFhWGBNvSBdSk','ihX8icDUzxCGCMvJB3jKj31GktSk','zgf0yxrHyMXLCW','BNvSBa','cIaGlYOQcIaGicOGu29MDc1KzwXLDguGCMvZDg9YzsbVDMvYCMLKzsaOuJiWks4Gl3jLC3rVCMuGBwvTyMfSAwSGC29MDcbKzwXLDguGC2vJyxjHigf0B21PyY4kicaGkIbbDg9TAwmGkhnHDhuGDhjHBNnHy3rPB24PoIbtruXfq1qGrK9sifvqrefursbYB3CGDgvYAgfWDxmGkgLZx2rLBgv0zwq9vfjvrsKG4OAsihn0CMLWihn1zMzPEaOGicaQihjLDxnHyMXLicSGA29UzMXPAYa0mdKGkYbgsYa0mJiG4OAsifvqrefursbYzxnLDcbPC19KzwXLDgvKl2rLBgv0zwrFyxqVzgvSzxrLzf9IEsdIHPiGq09ntuLuiokgKGOGicaQigLUDMfSAwrHDgvdywnOzs4GDxbKyxrLzf8QihrPzgfRigrPC2vUDhvOlGOGicaQiebWyxjHBsb7t2jQzwn0FsbJCML0zxjPysaTihSGD2HLCMu6ifSUlI5Dih0GBwvUz2LRDxrPigzVCM1HDcaVzgvSzxrLigv4Axn0Aw5NcIaGicOGqhbHCMfTihTpyMPLy3r9igv2zw50q29UDgv4DcaTiev2zw50igXPzMvJEwnSzsbJB250zxH0icHVChnPB25HBcKkicaGkIbaCMv0DxjUCYb7uhjVBwLZztXpyMPLy3q+Fsb7ihn1y2nLC3mSig1LC3nHz2uSihjLC3rVCMvKx2nVDw50lcbYzxn0B3jLzf9PDgvTCYb9cIaGicOVcIaGyxn5BMmGCMvZDg9YzurHDgeOy3jPDgvYAweSigv2zw50q29UDgv4Dca9ig51BgWPihSkicaGigLMicGHy3jPDgvYAweGFhWGiwnYAxrLCMLHlNDOzxjLksb7cIaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbYzxf1zxn0igzVCM1HDdOGD2HLCMuGCgfYyw1LDgvYigLZihjLCxvPCMvKjYK7cIaGicb9cGOGicaGy29UC3qGD3jPDgvtB3vYy2uGpsb0AgLZlMDLDfrHyMXLu291CMnLkcD3CML0zsCPoWOGicaGy29UC3qGCMv0DxjUAw5NrMLLBgrZid0GDgHPCY5Nzxrszxr1CM5PBMDgAwvSzhmOktSkcIaGicbJB25ZDcbWB29Sid0GzgiUz2v0ug9VBcGPoWOGicaGy29UC3qGy2XPzw50id0GyxDHAxqGCg9VBc5JB25Uzwn0kcK7cGOGicaGDhj5ihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDcruDjtICPoWOkicaGicaGlY8Gms4Gs3vUy2KGCM93ihrLCMHHChvZihLHBMCGy29JB2SGA3jPDgvYAweUiezPBhrLCIbPC19KzwXLDgvKid0GvfjvrsbTzw1HC3rPA2fUcIaGicaGic8VicaGigHHBNLHihjLy29Yzcb5yw5NigjLBMfYlwjLBMfYihrLCI1ZB2z0lwrLBgv0zsb5yw5NigrPChvSAwHRyw47iezpuIbvuerbveukicaGicaGlY8GicaGBwvUAMfTAw4GC2f0DsbWzw1LBMfUzYbZywf0ihjLC3rVCMuGyMvYC2fTywfUlGOGicaGicbJB25ZDcbZzwXLy3rqyxjHBxmGpsbBxtSkicaGicaGy29UC3qGD2HLCMvcDwLSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOy3jPDgvYAweUD2HLCMuSihnLBgvJDfbHCMfTCYWGmsK7cIaGicaGignVBNn0igXVy2TrDwvYEsa9icDtruXfq1qG','Aw5MBW','cIaGicbDoWOkicaGic8VierLzMLUAxnPA2fUigrHDgf0ywjSzxnxAgvYzsbZzxn1ywKGCgf5Bg9HzaOGicaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','igrHDgeGC3vJy2vZC2z1BgX5igfKANvZDgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fKANvZDcbKyxrHia','BwfZDgvYrgv0ywLS','cIaGicOGqhbHCMfTihTpyMPLy3r9igrHDgeGlsbeyxrHigrHCMKGzgf0ywjHC2ukicaGkIbaCMv0DxjUCYb7t2jQzwn0FsbeyxrHihLHBMCGC3vKywGGzgLMB3jTyxqGDw50DwSGCMvZCg9UC2uG','ignVBxbVC2L0zsbYzwfKihn1y2nLC3nMDwW6icr7CMvZDwX0lMnVDw50ihX8idb9ihjLy29YzcHZkwaPoWOkicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGic4UlNjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbJB21WB3nPDguGCMvHzca','zMLLBgrmywjLBhm','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','cIaGicaGih0PktSkicaGicaGyxDHAxqGDgHPCY5ZzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcbJywnOzurHDgeSicDZDgf0AwmNktSkcIaGicaGic8VifjLDhvYBIbKzw5Nyw4GC2vSzwn0zwqGzMXHzWOGicaGicbYzxr1CM4Gzgf0ys5TyxaOAxrLBsa9pIb7cIaGicaGicaGy29UC3qGCMvZDwX0id0GEWOGicaGicaGicaGAwq6igL0zw0U','laOGicaGicb1CgXVywrdB25MAwC6ia','Aw5JBhvKzxm','DKfPAKO','lNvWzgf0zsiGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicaGigLMicHVCgvYyxrPB25ZlMrLBgv0zsaMjIaHqxjYyxKUAxnbCNjHEsHVCgvYyxrPB25ZlMrLBgv0zsKPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','laOGicaGicbKyxrLrMLLBgrZoIa','DMLZAwjPBgL0Eq','ywDNCMvNyxrL','cIaGicaVlYbfDMvUDcbSAwzLy3LJBguGDMfYAwfIBgvZcIaGicbSzxqGB2XKrgf0ysa9ig51BgW7cIaGicbSzxqGBMv3rgf0ysa9ig51BgW7cIaGicbJB25ZDcbYzxf1zxn0rgf0ysa9ihjLCs5IB2r5oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGOGicaGlY8Gpt09ieLUDgvNCMf0zwqGvhjHBNnHy3rPB24GzgvUz2fUiev2zw50ieXPzMvJEwnSzsa9pt0kicaGic8Vig9UqMvMB3jLicSGBwfPBIbVCgvYyxrPB24GkYbVBKfMDgvYigrPzwTZzwT1C2KGzgfSyw0GC2f0Dsb0CMfUC2fJDgLVBIbZy29WzqOGicaGlY8GzgKGzgfSyw0GBw9KzwWUzxHLy3v0zvrYyw5Zywn0Aw9Uv2L0Aev2zw50CYGPcIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGic8VieD1BMfRyw4GAw50zwDYyxrLzcb0CMfUC2fJDgLVBIbTB2rLBcbKzw5Nyw4GzxzLBNqGBgLMzwn5y2XLcIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFsWkicaGicaGicaGicaGEWOGicaGicaGicaGicaGicjJB2X1Bw4IoIaI','l2nYzwf0zsaTie1LBMfTyMfOA2fUigrHDgeG','C3rHCNrZv2L0Aa','uKntBe4','ks4G','CMvHzenVBxbVC2L0zq','igrHDgeGywrQDxn0zwqGC3vJy2vZC2z1BgX5oIaKE3bYAw1HCNLlzxL9psr7CMvXlMjVzhLBChjPBwfYEuTLEv19ycK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','id0GvfjvrsCPoWOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','iefqssCScIaGicaGicaGicbKzxnJCMLWDgLVBJOGj0f1Dg8Tz2vUzxjHDgvKiefqssbTB2r1BguGzM9Yia','y29Kzq','u29MrwG','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yw4Gz2vUzxjPyYb2ywXPzgf0Aw9UcIaGicaGicaGzM9YicHJB25ZDcbMAwvSzcbVzIb0AgLZlNzHBgLKrMLLBgrZksb7cIaGicaGicaGicbJB25ZDcb2ywX1zsa9igrHDgfBzMLLBgrDoWOkicaGicaGicaGic8VifjLCxvPCMvKigzPzwXKihzHBgLKyxrPB24GDw50DwSGAw5Zzxj0cIaGicaGicaGicbPzIaOB3bLCMf0Aw9Uid09psaNAw5Zzxj0jYaMjIaOzMLLBgqGpt09icDPzcCGFhWGzMLLBgqGpt09icDUyw1LjYb8FcbMAwvSzca9pt0Gj25HBweNksKGEWOGicaGicaGicaGicbPzIaODMfSDwuGpt09ihvUzgvMAw5Lzcb8Fcb2ywX1zsa9pt0GBNvSBcb8Fcb2ywX1zsa9pt0GjYCPihSkicaGicaGicaGicaGicbPzIaOzMLLBgqGit09icDPzcCPihSGlY8GsuqGyMLZysbHDxrVlwDLBMvYyxrLzaOGicaGicaGicaGicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkgbgAwvSzcaNjhTMAwvSzh0NigLZihjLCxvPCMvKigzVCIaKE29WzxjHDgLVBN0GB3bLCMf0Aw9UycK7cIaGicaGicaGicaGicaGicbYzxn1BhqUAxnwywXPzca9igzHBhnLoWOGicaGicaGicaGicaGih0kicaGicaGicaGicaGFqOGicaGicaGicaGFqOkicaGicaGicaGic8VifnHBML0AxPLigrHBIb2ywXPzgf0zsb2ywX1zsbQAwTHigfKyqOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGCMvZDwX0lNnHBML0AxPLzerHDgfBzMLLBgrDid0GDgHPCY5Zyw5PDgL6zuzPzwXKvMfSDwuOzMLLBgqSihzHBhvLktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGic8VieDLBMvYAwmGzw1HAwWGDMfSAwrHDgLVBGOGicaGicaGigLMicHKyxrHlMvTywLSicyMiceVxLTExhnaxsTaw15CC0bDk1WUw15CC0bDkYqVlNrLC3qOzgf0ys5LBwfPBcKPihSkicaGicaGicaGihjLC3vSDc5LCNjVCNmUChvZAcGNsw52ywXPzcbLBwfPBcbMB3jTyxqNktSkicaGicaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicaGicaGFqOGicaGicb9cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkgbwywXPzgf0Aw9UigvYCM9YoIaKE2vYCM9YlM1LC3nHz2v9ycK7cIaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicb9cGOGicaGCMv0DxjUihjLC3vSDdSkicb9cGOGic8QkGOGicaQifnHBML0AxPLigzPzwXKihzHBhvLigjLCMrHC2fYA2fUihrPCguGzMLLBgqGkgDLBMvYAwmGzMfSBgjHy2SPcIaGicOGqhbHCMfTihTZDhjPBMD9igzPzwXKtMfTzsaTie5HBweGzMLLBgqkicaGkIbaCgfYyw0GEYP9ihzHBhvLic0GtMLSywKGzMLLBgqkicaGkIbaCMv0DxjUCYb7kN0Gu2fUAxrPEMvKihzHBhvLcIaGicOVcIaGC2fUAxrPEMvgAwvSzfzHBhvLkgzPzwXKtMfTzsWGDMfSDwuPihSkicaGigLMicH0ExbLB2yGDMfSDwuGpt09icDZDhjPBMCNksb7cIaGicaGic8VifrYAw0GD2HPDgvZCgfJzqOGicaGicb2ywX1zsa9ihzHBhvLlNrYAw0OktSkcIaGicaGic8VievZy2fWzsbZCgvJAwfSignOyxjHy3rLCNmGDw50DwSGBwvUy2vNywGGAw5Qzwn0Aw9UcIaGicaGihzHBhvLid0GDMfSDwuUCMvWBgfJzsGVwZW+xs9NlcaNjYK7cGOGicaGicaVlYbuCNvUy2f0zsbQAwTHihrLCMXHBhuGCgfUAMfUzWOGicaGicbPzIaODMfSDwuUBgvUz3rOid4GmJu1ksb7cIaGicaGicaGDMfSDwuGpsb2ywX1zs5ZDwjZDhjPBMCOmcWGmJu1ktSkicaGicaGFqOGicaGFqOkicaGihjLDhvYBIb2ywX1ztSkicb9cG','EfPet1e','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','C3bSAxq','jYK7cGOVlYbjC3n1zsaJmtm6igvRC3rYywSGzMLLBgqGCgvUEwvIywiGA29UzMXPAYbKyxjPigvYCM9YihvUAxf1zs12Aw9SyxrPB24Gug9ZDgDYzvnrtc4klY8GtwvUz2vTyMfSAwTHBIbTyxaGEYbMAwvSzdOGw3bLC2fUxsb9igf0yxuGBNvSBcaOy2fSBc1ZAxrLig1LBMCTB21PDcbGzgv0ywLSC2aPlGPMDw5JDgLVBIbIDwLSzer1CgXPy2f0zurLDgfPBhmOzxjYB3iPihSkicbPzIaOiwvYCM9YihX8ihr5CgvVzIbLCNjVCI5KzxrHAwWGit09icDZDhjPBMCNksbYzxr1CM4GBNvSBdSkicbJB25ZDcbTid0GzxjYB3iUzgv0ywLSlM1HDgnOkc9Es2v5ifWOkfTEkv0RkvWPps8PoWOGigLMicGHBsKGCMv0DxjUig51BgW7cIaGy29UC3qGy29SCYa9ig1Bmv0UC3bSAxqOjYWNks5TyxaOkgmPid0+igmUDhjPBsGPlNjLCgXHy2uOl14IFciKl2CSicCNksKUzMLSDgvYkejVB2XLyw4PoWOGigLMicHJB2XZlMXLBMD0Aca9pt0GmcKGCMv0DxjUig51BgW7cIaGy29UC3qGBxnNid0Gy29SCY5Szw5NDgGGpIaXcIaGica/icDbihjLy29Yzcb3AxrOihrOAxmGy29TyMLUyxrPB24GB2yGDMfSDwvZigfSCMvHzhKGzxHPC3rZjWOGicaGoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjZSkicbJB25ZDcbKzxrHAwXZid0GE307cIaGzM9YicHJB25ZDcbJig9MignVBhmPigrLDgfPBhnBy10GpsbBBxnNxtSkicbYzxr1CM4Gzgv0ywLSCZSkFqO','l2nYzwf0zs1JB21WB3nPDguGlsbdB21WB3nPDguGy3jLyxrLia','C29MDerLBgv0zq','lY8Gu2TPCcbhru5fuKfuruqGquXxqvLtignVBhvTBNmkicaGicaGicaGigLMicHNzw5LCMf0zwrgAwvSzhmUAw5JBhvKzxmOA2v5ksKGy29UDgLUDwu7','jYWkicaGicaGzMLLBgroyw1LoIa','CK5XBeK','CMvHzgfIBgvgAwvSzhm','icaGihrOAxmUDMfSAwrHDgLVBKnVBMzPzYa9ihT9oYaVlYboBYbMAwvSzcb2ywXPzgf0Aw9UignVBMzPzWO','jYWkicaGicaGicbYzxnWB25ZzurHDgeScIaGicaGicaGEWOGicaGicaGicaGDg9WAwm6igTHzMTHq29UzMLNlNrVCgLJihX8ig51BgWScIaGicaGicaGicbRzxLgAwvSzdOGA2fMA2fdB25MAwCUA2v5rMLLBgqGFhWGjW','yLfZDfu','cIaGicb7cIaGicaGignVBNn0if9FC2rdAgvJAYa9igf3ywL0ia','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj3bVC3rNCMvZjYWkicaGicaGz2vUzxjHDgvKoIaN','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicaGif0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifbHBMDNAwWGBw9KzwWGCMvHzenVBxbVC2L0zsbTzxrOB2qkicaGignVBNn0ihjLC3vSDca9igf3ywL0ia','lMrLBgv0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDierftevursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDierftevursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','zxHWB3j0CW','iezst00GjYaRihDYAxrLu291CMnLicSkicaGicaGicaNifDirvjficGNicSGD2HLCMvcDwLSDc5ZCwWGkYaNksbbtKqG','icaGigLMicHMB3jTyxr0zwqPihSk','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtksdIGjqGBwfZDgvYihjLy29YzaOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','Aw5JBhvKzv9KzwXLDgvK','cIaGicb9oWOkicaGignVBxbVBMvUDevUz2LUzs5SB2fKq29UzMLNDxjHDgLVBKzYB21pyMPLy3qOy29TCg9Uzw50q29UzMLNks50AgvUkhjLC3vSDca9pIb7cIaGicaGigLMicHYzxn1BhqUC3vJy2vZCYKGEWOGicaGicaGignVBNnVBguUBg9NkgbdB21WB25LBNqGy29UzMLNDxjHDgLVBIbSB2fKzwqGzM9Yia','tw9KzwW','lMDLDeXPC3qOB3b0Aw9UCYK7cGOGicaGlY8GrM9YBwf0ihjLC3bVBNnLigjLCMrHC2fYA2fUig1VzgukicaGigLMicHWywDPBMf0zsKGEWOGicaGicbJB25ZDcb0B3rHBfbHz2vZid0Gtwf0Ac5JzwLSkhjLC3vSDc50B3rHBfjLy29YzhmGlYbWzxjqywDLktSkicaGicaGy29UC3qGAgfZtMv4Dca9ihbHz2uGpcb0B3rHBfbHz2vZoWOGicaGicbJB25ZDcbOyxnqCMv2Aw91CYa9ihbHz2uGpIaXoWOkicaGicaGCMv0DxjUihjLCY5QC29UkhSkicaGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicaGigrHDge6ihjLC3vSDc5KyxrHihX8ifTDlaOGicaGicaGignVDw50oIbYzxn1BhqUzgf0ysa/ihjLC3vSDc5KyxrHlMXLBMD0Aca6idaScIaGicaGicaGCgfNAw5HDgLVBJOGEWOGicaGicaGicaGy3vYCMvUDf9WywDLoIbWywDLlaOGicaGicaGicaGCgvYx3bHz2u6ihbLCLbHz2uScIaGicaGicaGicb0B3rHBf9YzwnVCMrZoIbYzxn1BhqUDg90ywXszwnVCMrZihX8idaScIaGicaGicaGicb0B3rHBf9WywDLCZOGDg90ywXqywDLCYWkicaGicaGicaGigHHC19UzxH0oIbOyxnozxH0laOGicaGicaGicaGAgfZx3bYzxzPB3vZoIbOyxnqCMv2Aw91CWOGicaGicaGih0kicaGicaGFsK7cIaGicb9igvSC2uGEWOGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGzgf0ytOGCMvZDwX0lMrHDgeGFhWGw10ScIaGicaGicaGy291BNq6ihjLC3vSDc5KyxrHid8GCMvZDwX0lMrHDgeUBgvUz3rOidOGmaOGicaGicb9ktSkicaGih0kcIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUia','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqNlaOGicaGicbKyxrHoIbYzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NDxbKyxrLigrHDgeG','oWOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','Aw1WB3j0q29UzMLN','l2HLywX0AgaScIaGicaGicaGicbZzxj2AwnLsw5MBZOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9l2fWAs8','EWOGicaGicaGicaGiG','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0ScIaGicaGicaGicaIC2vSzwn0iJOGwYjMAwvSzdeIlcaIzMLLBgqYiL0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbKyw4GD2HLCMuUDMfSDwukicaGigLMicGHCMvXlMjVzhKUD2HLCMuUA2v5ihX8ihjLCs5IB2r5lNDOzxjLlNzHBhvLid09psb1BMrLzMLUzwqGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09ig51BgWGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09icCNksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj1DOzxjLigTLEsbHBMqGDMfSDwuGyxjLihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIb7icjRzxKIoIaI','B2jQzwn0','igLUzM86jYWGzxjYB3iPoWOGicaGCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGzMv0y2HPBMCGzw5KCg9PBNqGAw5MB3jTyxrPB24NlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktS','ALrQALO','igrHDgeGC3vJy2vZC2z1BgX5ignYzwf0zwq','yuPXEMi','laOGicaGicbJB21WB25LBNrZoIa','DxbSB2fKq29UzMLN','oWOkicaGignVBNn0ig1VzgvSsw5MBYa9igf3ywL0ia','zM9YzwLNBKTLEq','cIaQiebWyxjHBsb7t2jQzwn0FsbJB25MAwCGlsblB25MAwD1CMfZAsb1BNr1AYbTzw5QywXHBMTHBIbTB2r1BaOGkIbaCgfYyw0GE251BwjLCN0Gy29UzMLNlNbVCNqGlsbqB3j0ihvUDhvRihnLCNzLCGOGkIbaCgfYyw0GE3n0CMLUz30Gy29UzMLNlMTLEsaTiefqssblzxKGkg9WC2LVBMfSkqOGkIbaCgfYyw0GE2jVB2XLyw59ignVBMzPzY5JB3jZic0Grw5HyMXLienpuLmGkgrLzMf1Bhq6ihrYDwuPcIaQiebWyxjHBsb7yM9VBgvHBN0Gy29UzMLNlMXVz2DPBMCGlsbfBMfIBguGCMvXDwvZDcbSB2DNAw5NicHKzwzHDwX0oIb0CNvLkqOGkIbaCMv0DxjUCYb7uhjVBwLZztX2B2LKpN0GuhjVBwLZzsb5yw5NihrPzgfRihbLCM5HAcbYzxnVBhzLigfNyxiGC2vYDMvYihrLDgfWigjLCMPHBgfUcIaQlWPHC3LUyYbMDw5JDgLVBIbLEgvJDxrLkgnVBMzPzYKGEWOGihjLDhvYBIbUzxCGuhjVBwLZzsGOCMvZB2X2zsWGCMvQzwn0ksa9pIb7cIaGicb0CNKGEWOGicaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicaGignVBNn0ihbVCNqGpsbJB25MAwCUCg9YDcb8FcaZmdaWoWOGicaGicbJB25ZDcbZzxj2zxjbzgrYzxnZid0Gy29UzMLNlNnLCNzLCKfKzhjLC3mGFhWGjZaUmc4WlJaNoYaVlYbezwzHDwX0idaUmc4WlJaGDw50DwSGyMfJA3DHCMqGy29TCgf0AwjPBgL0EqOGicaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','BvjmA0K','jYWGjW','jZSkicaGihrOAxmUCMvHzfnVDxjJzsa9icC','ChvZAa','svnMtwC','lMnYzwf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','C29MDerLBgv0zuzRq2HLy2TZ','cIaGicbJB25ZDcbHzgP1C3rdB25MAwCGpsa','wNDor2m','vev6y3u','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKiokaLcbUBYbXDhKGzMLLBgqGy29UzMLNDxjLzcaOC2v0igf1Dg9dywXJDwXHDgvgAwvSzhmUDg90ywXFyw1VDw50lMzVCM11BgeGB3iGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uP','oWOGicaGicaGignVBNn0igLUDMfSAwrgAwvSzhmGpsbBxtSkcIaGicaGicaGlY8Gq2HLy2SGC2v0AwfWigzPzwXKigrHBgfTihnLBgvJDaOGicaGicaGigzVCIaOy29UC3qGzMLLBgqGB2yGCMvXlMjVzhKUC2vSzwn0ksb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxnPihvUDhvRigzPzwXKicDPzcCkicaGicaGicaGigLMicHMAwvSzc50B0XVD2vYq2fZzsGPid09psaNAwqNksb7cIaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGFqOkicaGicaGicaGic8VifnRAxaGDMfSAwrHC2KGAMLRysbHzgeGu1fmigv4ChjLC3nPB24GzgvUz2fUiefticHHBgLHCYKkicaGicaGicaGigLMicGVxhmRyxnCCYTCDYSKl2KUDgvZDcHMAwvSzcKPihSkicaGicaGicaGicaGy29UDgLUDwu7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gu2TPCcb2ywXPzgfZAsbQAwTHigfKysbtuuWGB3bLCMf0B3jZl2z1BMn0Aw9UCYaOFhWSienptKnbvcWGzgXSkqOGicaGicaGicaGAwyGkc9CFfX8FenptKnbvhXdt0fmrvndrxXdqvnfFfDiru4VAs50zxn0kgzPzwXKksKGEWOGicaGicaGicaGicbJB250Aw51ztSkicaGicaGicaGih0kcIaGicaGicaGicaVlYbwywXPzgfZAsbUB3jTywWGzMLLBgqGBMfTzqOGicaGicaGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHMAwvSzcKPihSkicaGicaGicaGicaGAw52ywXPzezPzwXKCY5WDxnOkgzPzwXKktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGigLMicHPBNzHBgLKrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGC2vSzwn0igzPzwXKCYCScIaGicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicaUlI4OChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYb7ihzHBgLKrMLLBgrZih0GoIb7FsKScIaGicaGicaGicaGihnXBev4ChjLC3nPB25oB3rLoIaNu1fmigv4ChjLC3nPB25ZigrLBMDHBIbVCgvYyxrVCIb8FcbHDgf1ieftigfSAwfZigrPCgvYyM9SzwHRyw4NlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhDw5HA2fUig1LDgHVzcbNzxrmB29RDxbeyxrHv2L0AezPBhrLCGOGicaGicbJB25ZDcbSAxn0id0GyxDHAxqG','oWOGih0kcIaGlYOQcIaGicOGtwvTyMfUz3vUignSyxvZzsbxsevsrsbIzxjKyxnHCMTHBIbMAwX0zxikicaGkIbaCgfYyw0GE09IAMvJDh0GB3b0Aw9UCYaTiezPBhrLCIbVChrPB25ZcIaGicOGqhjLDhvYBNmGE1n0CMLUz30Gq2XHDxnLifDirvjfifnrtaOGicaQlWOGigj1AwXKrMLSDgvYv2HLCMvdBgf1C2uOB3b0Aw9UCYKGEWOGicaGy29UC3qGy29UzgL0Aw9UCYa9ifTDoWOGicaGy29UC3qGzMLSDgvYCYa9ihrOAxmUz2v0qxzHAwXHyMXLrMLSDgvYCYGPoWOkicaGigLMicGHqxjYyxKUAxnbCNjHEsHMAwX0zxjZksKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGlY8GuhjVC2vZigzPBhrLCIbIzxjKyxnHCMTHBIb0AxbLcIaGicbMB3iGkgnVBNn0igzPBhrLCIbVzIbMAwX0zxjZksb7cIaGicaGignVBNn0igzPBhrLCLzHBhvLid0GB3b0Aw9UC1TMAwX0zxiUBMfTzv07cGOGicaGicbPzIaOiwzPBhrLCLzHBhvLihX8igzPBhrLCLzHBhvLid09psaNjYb8FcbMAwX0zxjwywX1zsa9pt0GjY0NihX8igzPBhrLCLzHBhvLid09psaNywXSjYKGEWOGicaGicaGignVBNrPBNvLoWOGicaGicb9cGOGicaGicbZD2L0y2GGkgzPBhrLCI50ExbLksb7cIaGicaGicaGy2fZzsaNy29TyM9IB3GNoGOGicaGicaGignHC2uGj3nLBgvJDcC6cIaGicaGicaGicbPzIaOzMLSDgvYlNrHCMDLDezPzwXKksb7cIaGicaGicaGicaGignVBNn0igvZy2fWzwrwywX1zsa9igzPBhrLCLzHBhvLlNrVu3rYAw5NkcKUCMvWBgfJzsGVjY9NlcaIjYCIktSkicaGicaGicaGicaGy29UzgL0Aw9UCY5WDxnOkgbvufbfuIGKE2zPBhrLCI50yxjNzxrgAwvSzh0Pid0GvvbqrviOjYr7zxnJyxbLzfzHBhvLFsCPycK7cIaGicaGicaGicb9cIaGicaGicaGicbICMvHAZSkcIaGicaGicaGy2fZzsaNzgf0zxjHBMDLjZOkicaGicaGicaGigLMicHMAwX0zxjwywX1zsa9pt0Gj2n1C3rVBv9Yyw5NzsCGjIyGB3b0Aw9UC1TMAwX0zxiUC3rHCNrgAwvSzf0GjIyGB3b0Aw9UC1TMAwX0zxiUzw5KrMLLBgrDksb7cIaGicaGicaGicaGignVBNn0ihn0yxj0rgf0zsa9ig9WDgLVBNnBzMLSDgvYlNn0yxj0rMLLBgrDoWOGicaGicaGicaGicbJB25ZDcbLBMreyxrLid0GB3b0Aw9UC1TMAwX0zxiUzw5KrMLLBgrDoWOGicaGicaGicaGicbJB25KAxrPB25ZlNb1C2GOycr7zMLSDgvYlNrHCMDLDezPzwXKFsbcrvrxruvoicCKE3n0yxj0rgf0zx0NieforcaNjhTLBMreyxrLFsDGktSkicaGicaGicaGih0kicaGicaGicaGigjYzwfRoWOkicaGicaGicbJyxnLicD0zxH0jZOkicaGicaGicaGigLMicHMAwX0zxiUDgfYz2v0rMLLBgqPihSkicaGicaGicaGicaGy29UC3qGzxnJyxbLzfzHBhvLid0GzMLSDgvYvMfSDwuUDg9tDhjPBMCOks5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGicaGicbJB25KAxrPB25ZlNb1C2GOyfvquevskcr7zMLSDgvYlNrHCMDLDezPzwXKFsKGteLlrsbvufbfuIGNjsr7zxnJyxbLzfzHBhvLFsuNkwaPoWOGicaGicaGicaGFqOGicaGicaGicaGyNjLywS7cGOGicaGicaGignHC2uGj251BwjLCIC6cIaGicaGicaGicbPzIaOzMLSDgvYlNrHCMDLDezPzwXKicyMicfPC05HtIHMAwX0zxjwywX1zsKPihSkicaGicaGicaGicaGy29UzgL0Aw9UCY5WDxnOkgaKE2zPBhrLCI50yxjNzxrgAwvSzh0GpsaKE2zPBhrLCLzHBhvLFwaPoWOGicaGicaGicaGFqOGicaGicaGicaGyNjLywS7cIaGicaGih0kicaGih0kcIaGicbYzxr1CM4Gy29UzgL0Aw9UCY5Szw5NDgGGpIaWid8GyfDirvjficr7y29UzgL0Aw9UCY5QB2LUkcCGqu5eicCPFwaGoIaNjZSkicb9','zMLSDgvY','y2HPBgrdB2X1Bw5Z','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','igrHDgeGBM90igzVDw5Kig9YigfSCMvHzhKGzgvSzxrLzcCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','zM9YBxvSyq','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGy3jLyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','cIaGicaVlYbgsY1trc0XoIbWyxjLBNqGC29MDc1KzwXLDguGD2fQAwiGywT0AwyGDw50DwSGDgLHCcbRB2XVBsbgsYb5yw5NigrPAxnPicHWCMuTy2HLy2SGndiYks4kicaGigf3ywL0ia','CMv1C2fIBgu','lY8Grw5KCg9PBNqGAw5MBYdIGjqGC2vSzI1KB2n1BwvUDgLUzYbbueKkCM91DgvYlMDLDcGNl2LUzM8NlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGy29UC3qGywn0Aw9UCYa9ia','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','jYWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cGOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsb1CgrHDguG','sgjPq0u','DxbKyxrLzej5','ignVBxbVC2L0zsbJCMvHDguGC3vJy2vZC2z1BgaPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmsKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6icC','ww9gAuW','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','cIaGicaGicaGlY8GCMv1C2fIBguGjW','jZSkicaGicaGy29UC3qGDgv4DezPzwXKid0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbSB29RDxbdB25MAwCUDgv4DezPzwXKcIaGicaGicaGoIb0zxH0rMLLBgrZwZbDoWOkicaGicaGBgv0ihf1zxj5id0GyfnftevdvcaKE2LKrMLLBgr9lcaKE3rLEhrgAwvSzh0GrLjptsaKE3rOAxmUz2v0tg9VA3vWu291CMnLkcL9ydSkicaGicaGAwyGkhDOzxjLq29UzgL0Aw9UCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCxvLCNKGkZ0GycbxsevsrsaKE3DOzxjLq29UzgL0Aw9UCY5QB2LUkcCGqu5eicCPFwa7cIaGicaGih0kicaGicaGCxvLCNKGkZ0GycbpuKrfuIbcwsaKE2XVB2T1CenVBMzPzYaMjIbSB29RDxbdB25MAwCUAgfZq3vZDg9Tvgv4Dca/icCYjYa6icDHlICGkYb0zxH0rMLLBgrZwZbDFwa7cGOGicaGicbJB25ZB2XLlMXVzYGNpt09ierfqLvhierztKfnsumGte9ps1vqid09psCPoWOGicaGicbJB25ZB2XLlMXVzYGNuxvLCNK6jYWGCxvLCNKPoWOGicaGicbJB25ZB2XLlMXVzYGNugfYyw1ZoICSihbHCMfTCYK7cIaGicaGignVBNnVBguUBg9NkcDfEhrYysbMAwX0zxjZoICSigv4DhjHrMLSDgvYCYK7cIaGicaGignVBNnVBguUBg9NkcDmB29RDxaGy29UzMLNoICSigXVB2T1CenVBMzPzYK7cIaGicaGignVBNnVBguUBg9NkcC9pt0Gru5eierfqLvhid09psCPoWOkicaGicaGy29UC3qGzgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsWGCgfYyw1ZktSkcIaGicaGihjLDhvYBIbKyxrHlM1HCcHPDgvTid0+icH7cIaGicaGicaGAwq6igL0zw1BAwrgAwvSzf0GFhWGAxrLBs4','lNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGy29UC3qGCxr5id0GtNvTyMvYkgL0zw0U','u1LeBvO','lY8GvgfIzwWGDgfUCgeGyxvKAxqGy29SDw1UCZOGzgLZywjSzsbPBMPLy3rPB24GAgvSCgvYcG','cIaGlYOQcIaGicOGrKSTu0qTmsbMB3j3yxjKigjSB2nRlIbuB2XHAYbJCMvHDguVDxbKyxrLigfUywSGEwfUzYbTzw51BMP1AYbWyxjLBNqGC29MDc1KzwXLDguGEwfUzWOGicaQihrLCMHHChvZicHPC19KzwXLDgvKpvrsvuuPigf0yxuGDgLKywSGywrHicG0mJiPlIbiyw55ysbgsYbIzxiTCgfYzw50ihnVzNqTzgvSzxrLlwvUywjSzwqkicaGkIaOCMvNAxn0CNKGC29MDerLBgv0zuzRugfYzw50CYKGEwfUzYbKAwnLAZSGrKSGBNvSBc9HyNnLBNqG4OAsihnRAxaUierPCgfUz2DPBcbYB3v0zsaVy3jLyxrLcIaGicOGzgfUic91CgrHDguGC2vIzwX1BsbHzgreyxrHl3vWzgf0zurHDgeUifbYzs1JAgvJAYbWB29SihrLCNbPC2fOicHUB24TDhjHBNnHA3nPB25HBcK6igXPAgf0cIaGicOGy2f0yxrHBIbHDg9TAwnPDhKGqMfNAwfUieiGzgKGCMvWB3j0ifbOyxnLidaYlGOGicaQiebWyxjHBsb7t2jQzwn0FsbIB2r5ic0GCMvXDwvZDcbIB2r5icHYzxeUyM9KEsKkicaGkIbaCgfYyw0GE3n0CMLUz30GB3bLCMf0Aw9Uic0Gj2nYzwf0zsCGFcaNDxbKyxrLjYaODw50DwSGCgvZyw4GzxjYB3iGndiYkqOGicaQlWOGigfZEw5JignOzwnRu29MDerLBgv0zuzRugfYzw50CYHIB2r5lcbVCgvYyxrPB24PihSkicaGigLMicGHyM9KEsb8Fcb0ExbLB2yGyM9KEsaHpt0Gj29IAMvJDcCPihjLDhvYBJSkicaGignVBNn0ihbVB2WGpsbKyI5NzxrqB29SkcK7cG','C3rYAw5NAwz5','EffMvwK','mtm4mteYmJbTrvHpzuq','vwLZAem','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','ifDirvjfia','cIaGicaGicaGlY8GqNvPBgqGzgv0ywLSieLou0vsvcbXDwvYEqOGicaGicaGignVBNn0igrLDgfPBezPzwXKCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfzHBhvLCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfbSywnLAg9SzgvYCYa9ifTDoWOGicaGicaGigXLDcbKzxrHAwXqBgfJzwHVBgrLCKLUzgv4id0GmtSkcIaGicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGicaGia','C29MDerLBgv0zunHC2nHzgvuCMvL','Dg90ywXFCxr5','zgv0ywLSvgfIBgu','Dg9ju09tDhjPBMC','icaGicaGiG','l2fKANvZDcaTiefKANvZDcbKyxrHia','id0GtK9xkcKNktSkicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','j11DcIaGicaGicaGicaGicK7cIaGicaGicaGicaGigLMicHFx2nVBMzSAwn0lNjVD3mUBgvUz3rOid4GmcKGEWOGicaGicaGicaGicaGignVBNn0ignVBMzSAwn0rxjYB3iGpsbUzxCGrxjYB3iOiKnHBM5VDcbYzxn0B3jLoIaN','id0Gke51BwjLCIHPDgvTlG','ksb8FcaWoWOGicaGicaGicaGCMv0DxjUihn1BsaRicHXDhKGkIbWCMLJzsK7cIaGicaGicaGFsWGmcK7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2fTB3vUDca9icqKE3jLy2fSy1bSywnLAg9SzgvYkYT9ycK7cIaGicaGicaGCMvJywXJDwXHDgvKvMfSDwvZlNb1C2GODg90ywXbBw91BNqPoWOGicaGicb9','jZSkicaGicaGy29UC3qGzM9YzwLNBKTLEsa9icC','zgf0zvrPBwvgAwvSzhm','ntm2m0zntvPrva','idW+icqYieXjtuLuideNlaOGicaGicaGicaGicaGifTFx29YAwDPBMfSlcbSB2nRzwrsB3DBjW','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGrevmrvrfievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKrgvSzxrLid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwrezwXLDguGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI5KzwXLDguPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HezwXLDguOcIaGicaGicaGjW','oWOGicaGicbJB25ZDcbKzwzHDwX0u2vSzwn0id0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbBiMLKiIWGBg9VA3vWq29UzMLNlNrLEhrgAwvSzf0kicaGicaGica6ifSIAwqIlcaI','jYK7cGOGicaGicb0CNKGEWOGicaGicaGic8VievUC3vYzsbTB2r1BgvZigrPCMvJDg9YEsbLEgLZDhmkicaGicaGicbPzIaOiwzZlMv4Axn0C1n5BMmOBw9KDwXLC0rPCIKPihSkicaGicaGicaGigzZlM1RzgLYu3LUyYHTB2r1BgvZrgLYlcb7ihjLy3vYC2L2ztOGDhj1zsb9ktSkicaGicaGicaGignVBNnVBguUBg9NkgbdCMvHDgvKig1VzhvSzxmGzgLYzwn0B3j5oIaKE21VzhvSzxneAxj9ycK7cIaGicaGicaGFqOkicaGicaGicaVlYbszwfKigrHBIbSB2fKihnLBxvHigvUzhbVAw50igzPBgvZcIaGicaGicaGy29UC3qGzMLSzxmGpsbMCY5YzwfKzgLYu3LUyYHTB2r1BgvZrgLYktSkicaGicaGicbJB25ZDcbLBMrWB2LUDezPBgvZid0GzMLSzxmUzMLSDgvYkgzPBguGpt4GzMLSzs5LBMrZv2L0AcGNlMPZjYKPoWOkicaGicaGicbPzIaOzw5KCg9PBNrgAwXLCY5Szw5NDgGGpt09idaPihSkicaGicaGicaGignVBNnVBguUBg9NkgboBYbLBMrWB2LUDcbMAwXLCYbMB3vUzcbPBIaKE21VzhvSzxneAxj9ycK7cIaGicaGicaGicbJB25ZB2XLlMXVzYHGqwrKigvUzhbVAw50igzPBgvZihrVigvUywjSzsbbueKGzNvUy3rPB25HBgL0EwaPoWOGicaGicaGih0GzwXZzsb7cIaGicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNzw5KCg9PBNrZx2XVywrPBMCNlcbJB3vUDdOGzw5KCg9PBNrgAwXLCY5Szw5NDgGGFsWGyeXVywrPBMCGjhTLBMrWB2LUDezPBgvZlMXLBMD0Ah0Gzw5KCg9PBNqOCYLGktSkicaGicaGicb9cGOGicaGicaGic8VifjLz2LZDgvYihnLDgLHCcbLBMrWB2LUDaOGicaGicaGigzVCIaOy29UC3qGzMLSzsbVzIbLBMrWB2LUDezPBgvZksb7cIaGicaGicaGicb0CNKGEWOGicaGicaGicaGicbJB25ZDcbLBMrWB2LUDe5HBwuGpsbWyxrOlMjHC2vUyw1LkgzPBguSicCUANmNktSkicaGicaGicaGicaGy29UC3qGzw5KCg9PBNrqyxrOid0GCgf0Ac5QB2LUkg1VzhvSzxneAxiSigzPBguPoWOkicaGicaGicaGicaGlY8Gq2XLyxiGBw9KDwXLignHy2HLihvUDhvRigrLDMvSB3bTzw50cIaGicaGicaGicaGigLMicHYzxf1AxjLlMnHy2HLw2vUzhbVAw50ugf0Af0PihSkicaGicaGicaGicaGicbKzwXLDguGCMvXDwLYzs5JywnOzvTLBMrWB2LUDfbHDgHDoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicbJB25ZDcbLBMrWB2LUDfjVDxrLCIa9ihjLCxvPCMuOzw5KCg9PBNrqyxrOktSkcIaGicaGicaGicaGigLMicGHzw5KCg9PBNrsB3v0zxiPihSkicaGicaGicaGicaGicbJB25ZB2XLlNDHCM4OyevUzhbVAw50icr7zw5KCg9PBNroyw1LFsbKAwqGBM90igv4Cg9YDcbHihjVDxrLCMaPoWOGicaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicaVlYbszwDPC3rLCIbLBMrWB2LUDcbKzw5Nyw4GChjLzML4cIaGicaGicaGicaGignVBNn0igvUzhbVAw50uhjLzML4id0Gyc9HCgKV','cIaGicaVlYbbzgqGBwv0ywrHDgeGDw50DwSGzgvIDwDNAw5NicHKzxzLBg9WBwvUDcbVBMX5kqOGicaGAwyGkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNicyMihjLC3vSDc5ZDwnJzxnZksb7cIaGicaGihjLC3vSDc5FBwv0ywrHDgeGpsb7cIaGicaGicaGzw5KCg9PBNq6icC','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','mtfHqufey0C','jYb1BNr1AYbLBMrWB2LUDcbYzwfKigjLCMrHC2fYA2fUcI8VihzPC2LIAwXPDhKGy29UzMLNicGN','l2zPCNn0oICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGlY8GvMfSAwrHC2KGCMvXDwvZDcbIB2r5cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYboB3jTywXPEMu6igfYCMf5ideGzwXLBwvUic0+ig9IAMvJDcaOyMfJA3DHCMqGy29TCgf0AwjSzsKkicaGigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIbYzxeUyM9KEs53AgvYzs5Szw5NDgGGpt09idePihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbYzxeUyM9KEs53AgvYzvSWxtSkicaGih0kcIaGicaVlYbwywXPzgfZAsb3AgvYzsbJBgf1C2uGlsbOyxj1CYbVyMPLy3qGDhvUz2DHBcb7A2v5lcb2ywX1zx0kicaGigLMicGHCMvXlMjVzhKUD2HLCMuGFhWGDhLWzw9MihjLCs5IB2r5lNDOzxjLice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj1bYB3bLCNr5ihDOzxjLigLZihjLCxvPCMvKigfZihTRzxKSihzHBhvLFsbVyMPLy3qNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6ici','icOG','yxvKAxrdB2X1Bw5Z','cGOGicaGicaGic8ViduUifjLC2v0igTVBg9TihnVzNqTzgvSzxrLlIb1CgrHDgvKxYOGveLequSGzgLZzw50DwGGkgTVBNnPC3rLBIbsmtqPlGOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','ksb7cIaGicaGigrLBgv0zsbYzxeUyM9KEvTFx3nKq29SxtSkicaGih0','iIK7cIaGicaGicaGicaGicaGzMTfCNjVCI5ZDgf0DxndB2rLid0GndiYoWOGicaGicaGicaGicaGihrOCM93igzRrxjYB3i7cIaGicaGicaGicaGih0kicaGicaGicaGih0kicaGicaGicb9','oICSigvYCM9YktSkcIaGicaVlYbiyw5KBguGiKrHDgeGDgLKywSGzgL0zw11A2fUiGOGicaGAwyGkgvYCM9YlM1LC3nHz2uGpt09icDeyxrHihrPzgfRigrPDgvTDwTHBICGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNBM90igzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicbTzxnZywDLoIaN','jhTWyxLSB2fKlNrHyMXLtMfTzsb8FcaIDw5KzwzPBMvKx3rHyMXLiN0','CgfYzw50q29SDw1U','zw50CMLLCW','CMvZDhjPy3q','cI8Vie5VigfJDgLVBNmGzw5HyMXLzcbMB3iGDgHPCYbLBMrWB2LUDaOVlYbfBMfIBguGywn0Aw9UCYbPBIbWyxLSB2fKihrVigDLBMvYyxrLigvUzhbVAw50CW','C29MDerLBgv0zuzRq2HPBgrYzw4','q1j2tfq','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwq','jYWkicaGicaGzMvHDhvYzxm6ia','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','cIaGicaVlYbtB2z0lwrLBgv0zsaOuJe0ktOGB3zLCNjPzguGzgvSzxrLrgf0ysbTzwXLBxbHCIbZDgf0DxndB2rLidqWncbZywf0ihrPzgfRigfKysbYB3CkicaGic8VigfRDgLMihLHBMCGy29JB2SGkhrPzgfRigrPDgvTDwTHBIWGC3vKywGGDgvYlxnVzNqTzgvSzxrLlcbHDgf1igTHBgfOihjHy2uGrK9sifvqrefursKUcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0Gnda0ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGBwvZC2fNztOGjW','jYWGDMfSAwrgAwvSzhmSigrHDgf0ywjSzxnxAgvYzsWGEYbYzwfKywjSzuzPzwXKCYWGC2nOzw1HrMLLBgrZlcbKyxrHDgfIBgvZrMLLBgrZih0PoWOkicaGic8VifnLDhvWihbYAw1HCNKGA2v5igrHCMKGCgf5Bg9HzcbHDgf1igzHBgXIywnRigTLigzPzwXKtMfTzsbWzxj0yw1HcIaGicb0AgLZlNbYAw1HCNLlzxKGpsaN','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaXks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','A2fMA2e','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNuhjPBwfYEsbRzxKGka','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','ihzHBhvLicGNicSGx19ZDhiUBgvUz3rOicSGjYbJAgfYCYKGzxHJzwvKCYbIyxnLigXLBMD0Aca','icSGjW','y1PPtwq','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','icaGic8VifnVzNqTzgvSzxrLig1PzgrSzs1NCM91BMqGkgf1zgL0lxbHCML0EsK6ihrPz2eGA29SB20GC29MDc1KzwXLDguGDgv0yxaGzgKGDMfSAwrgAwvSzhmk','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8Gr3vUywTHBIbZyw5PDgL6zwqGzgf0yqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFq','igrHDgeGywrKzwqGC3vJy2vZC2z1BgX5oIaKE3jLC3bVBNnLrgf0ys4','ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','tw9KzwWGzxH0zw5KCYbcyxnLtw9KzwWGEWOGic8QkGOGicaQienVBNn0CNvJDg9YcIaGicOVcIaGy29UC3rYDwn0B3iOksb7cIaGicaVlYbezwzPBMLZAwTHBIb2ywXPzezPzwXKCYaTihnLBxvHigzPzwXKihLHBMCGDMfSAwqGDw50DwSGDgfIzwWG','id0GjcCGkYbWktSkicaGicaGicaGicaGCcSRoWOGicaGicaGicaGicb1CgrHDgvqyxjHBxmUChvZAcHFx3n0CIaRicCJiYCGkYb1DwLKDJCOksK7cIaGicaGicaGicb9cIaGicaGicaGFq','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLyxjJAcaTieTHDgeGA3vUy2KGCgvUy2fYAwfUcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGicaGDhj5ihSkicaGicaGy29UC3qGCxvLCNKGpsaNu0vmrunuia','C29MDerLBgv0zuzRugfYzw50CW','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGlY8GuKvbrcbVCgvYyxrPB25ZoIbPBMPLy3qGC2nVCguGAw50BYbYzxeUyM9KEs53AgvYzqOGigLMicHBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNCMvHzc1JB21WB3nPDguNxs5PBMnSDwrLCYHLBMrWB2LUDcKPihSkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbBC2nVCgvdB25KAxrPB25DoWOGicaGFsbLBhnLigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxeUyM9KEs53AgvYzs51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGih0GzwXZzsbPzIaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksb7cIaGicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGicaGAwyGkg9YAwDPBMfStg9NAwmGpt09icDbtKqNksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCY51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGicaGFsbLBhnLihSkicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicaGigXVz2LJoIaNqu5ejYWkicaGicaGicaGignVBMrPDgLVBNm6ifSkicaGicaGicaGicaGC2nVCgvdB25KAxrPB24ScIaGicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGicaGxqOGicaGicaGih07cIaGicaGih0kicaGih0kicb9cGOGic8VierftevurtOGChjLCgvUzcbZy29WzsbJB25KAxrPB24GDg8GD2HLCMuGyxjYyxKkicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNksb7cIaGicbPzIaOCMvXlMjVzhKUD2HLCMuPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUDw5ZAgLMDcHZy29WzunVBMrPDgLVBIK7cIaGicaGih0kicaGih0kicb9cGOGic8ViensrufursaVieferdOGzM9Yy2uGC2nVCguGy29SDw1UihzHBhvLcIaGAwyGkgvUzhbVAw50id09psaNywrKjYb8FcbLBMrWB2LUDca9pt0Gj2nYzwf0zsCPihSkicaGihjLCs5IB2r5wYC','ywXS','icHJAgLSzfnVzNrezwXLDgu9','zw5HyMXLza','ktOGCgfYzw50ihDHAMLIia','cGOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGzgv0ywLSrMLLBgrZlNb1C2GOA2v5ktSkicaGicaGicaGicaGzgv0ywLSvMfSDwvZlNb1C2GODMfSDwuPoWOGicaGicaGicaGicbKzxrHAwXqBgfJzwHVBgrLCNmUChvZAcHGjcr7zgv0ywLSugXHy2vOB2XKzxjjBMrLEcSRFwaPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGicaGzgv0ywLSugXHy2vOB2XKzxjjBMrLEca9ihrOAxmUx2fWCgvUzenYzwf0zuf1zgL0q29SDw1UCYHKzxrHAwXgAwvSzhmSigrLDgfPBfzHBhvLCYWGzgv0ywLSugXHy2vOB2XKzxjZlcbPDgvTlcbLDMvUDenVBNrLEhqSigrLDgfPBfbSywnLAg9SzgvYsw5KzxGPoWOkicaGicaGicbJB25ZDcbKzxrHAwXjBNnLCNrrDwvYEsa9igakicaGicaGicaGieLou0vsvcbjtLrpicr7zgv0ywLSvgfIBgvoyw1LFsaOjhTKzxrHAwXgAwvSzhmUAM9PBIGNlcaNkx0PcIaGicaGicaGicbwquXvrvmGkcr7zgv0ywLSugXHy2vOB2XKzxjZlMPVAw4OjYWGjYL9kqOGicaGicaGicaGuKvuvvjosu5hicOkicaGicaGicbGoWOkicaGicaGicbJB25ZDcbKzxrHAwXszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgv0ywLSsw5Zzxj0uxvLCNKSigrLDgfPBfzHBhvLCYK7cIaGicaGicaGAw5Zzxj0zwrjDgvTCY5WDxnOkgrLDgfPBfjLC3vSDc5YB3DZwZbDktSkicaGicaGFqOkicaGicaGy29UC29Szs5SB2COyeLUC2vYDgvKicr7Aw5Zzxj0zwrjDgvTCY5Szw5NDgH9ig5LDYbKzxrHAwWGAxrLBsHZkwaPoWOkicaGicaGlY8Gr2v0igfSBcbJDxjYzw50igrLDgfPBcbPDgvTCWOGicaGicbJB25ZDcbHBgXjDgvTC1f1zxj5id0GyfnftevdvcaQiezst00GjhTKzxrHAwXuywjSzu5HBwv9ifDirvjficr7zM9YzwLNBKTLEx0GpsaKmsbpuKrfuIbcwsbSAw5Lx251BwjLCMa7cIaGicaGignVBNn0igfSBeL0zw1ZuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgfSBeL0zw1ZuxvLCNKSifTWCMLTyxj5s2v5vMfSDwvDktSkicaGicaGy29UC3qGywXSsxrLBxmGpsbHBgXjDgvTC1jLC3vSDc5YB3DZoWOkicaGicaGlY8GuMvJywXJDwXHDguGAgvHzgvYihrVDgfSCYbMCM9TigzPBMfSigL0zw1ZcIaGicaGia','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','zMLUza','zgf0yxrHyMXLC1DOzxjL','lMDLDfn0yxrPy0XVB2T1CerHDgeOC2vSzwn0zwruywCPoWOkicaGicaGicbJB25ZB2XLlMXVzYHGu3rHDgLJigXVB2T1CcbYzxn1BhrZoIaKE2XPC3qUBgvUz3rOFsbYzwnVCMrZigzVDw5KycK7cIaGicaGicaGCMv0DxjUihjLCY5QC29UkhSkicaGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGicbJB3vUDdOGBgLZDc5Szw5NDgGScIaGicaGicaGicbKyxrHoIbSAxn0laOGicaGicaGicaGC2vSzwn0zwruywC6ihnLBgvJDgvKvgfNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4G','l3vWzgf0zs1JB21WB3nPDguGlsbdB21WB3nPDguGDxbKyxrLia','CMvWBgfJzq','DLrQr1i','id0GtLvmtcCPoWOkicaGicaGicb1CgrHDgvqyxjHBxmUChvZAcHSB2nRzwrsB3DBjW','x2LK','iL0ScIaGicaGicaGicaIC29YDf9JB2X1Bw5ZiJOGwWOGicaGicaGicaGicb7cIaGicaGicaGicaGicaGiMnVBhvTBIi6ici','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNn0igrHDgeGpsbYzxeUyM9KEs4','cIaGicOVcIaGzM9YBwf0uMvZCg9UC2veyxrHkgrHDgePihSk','cIaGicaVlYbgAwXLihvWBg9HzcbMAwvSzhmGkePtt05cignVBhvTBNmPcIaGicb0AgLZlMzPBgvgAwvSzhmGpsa','x2v4DgvUzgvKrMLLBgrZ','Aez0BMK','cGOGicaGicaVlYaTls0Gsg9VAZOGB25bzNrLCKnVBxbVC2L0zvvWzgf0zsaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbHzNrLCKn0Eca9ienclMj1AwXKq29TCg9ZAxrLvxbKyxrLqwz0zxjdB250zxH0kgHLywrLCKrHDgeSig9SzerHDgeSihvWzgf0zwrizwfKzxiSihSkicaGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlaOGicaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlaOGicaGicaGicaGzgvSzxrLzdOGzgvSzxrLzeL0zw1ZcIaGicaGicaGFsWGEWOGicaGicaGicaGDgfIBgvoyw1LoIaN','cIaGicb9oWOGih0kcIaGlYOQcIaGicOGtg9HzcbHzhzHBMnLzcbXDwvYEsb0zw1WBgf0zxmGzgfYAsbMAwXLcIaGicOGqhjLDhvYBNmGE09IAMvJDh0GvgvTCgXHDgvZifnrtcb1BNr1AYbHzhzHBMnLzcbXDwvYAwvZcIaGicOVcIaGBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOksb7cIaGicbJB25ZDcb0zw1WBgf0zxmGpsb7FtSkicaGia','cIaGicaGia','lMrLBgv0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cGOGicaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfignVBxbSzxrLzcbZDwnJzxnZzNvSBhKGD2L0AcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfigzHAwXLzdONlcbLCNjVCI5TzxnZywDLktSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFsbLBhnLihSkicaGicaGlY8GrMfSBgjHy2S6igD1BMfRyw4GBw9KzsbSyw1HihrHBNbHigv2zw50CYaODgv0yxaGChjVCgfNyxnPihjLCxvLC3rjzcb1BNr1AYbmAxzLifn5BMmPcIaGicaGihrYEsb7cIaGicaGicaGCMvZCg9UC2veyxrHid0GyxDHAxqG','ydSkicaGicaGAwyGkhnLyxjJAfzHBhvLicyMihnLyxjJAfzHBhvLlNrYAw0OksaHpt0GjYCPihSkicaGicaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGignVBNn0igXPA2vwywX1zsa9igaLjhTLC2nHCgvKu2vHCMnOvMfSDwv9jwa7cIaGicaGicaG','oWOkicaGic8VifzHBgLKyxnPihbYAw1HCNKGA2v5cIaGicbPzIaOiwrHDgeU','ywn0Aw9U','iL0kicaGicaGicaGih0ScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cGOGicaGicaVlYbwywXPzgfZAsbZzwXLy3qGzMLLBgrZigPPA2eGywrHicHZDxbWB3j0ifnrtcbLEhbYzxnZAw9UCYKkicaGicaGAwyGkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihSkicaGicaGicbJB25ZDcb2ywXPzezPzwXKCYa9ia','jZOGEWOGicaGicaGihr5Cgu6icC','zgf0yxrHyMXLC1f1zxj5','oWOGih0kcIaGlYOQcIaGicOGqNvPBgqGC2vHCMnOifDirvjfignSyxvZzsbIzxjKyxnHCMTHBIbZzwfYy2HHyMXLignVBhvTBNmkicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOvMfSDwuGlsboAwXHAsbWzw5JyxjPyw4kicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOqNKGlsblB2XVBsb5yw5NigrPy2fYAqOGicaQiebYzxr1CM5ZihTZDhjPBMD9ifDirvjfignSyxvZzqOGicaQlWOGigj1AwXKu2vHCMnOv2HLCMvdBgf1C2uOC2vHCMnOvMfSDwuSihnLyxjJAej5id0Gj2fSBcCPihSkicaGigLMicGHC2vHCMnOvMfSDwuGFhWGC2vHCMnOvMfSDwuUDhjPBsGPid09psaNjYKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGy29UC3qGC2vHCMnOywjSzunVBhvTBNmGpsb0AgLZlMDLDfnLyxjJAgfIBgvdB2X1Bw5ZkcK7cIaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGy29UC3qGBgLRzvzHBhvLid0GycuKE2vZy2fWzwrtzwfYy2HwywX1zx0LydSkcIaGicbPzIaOC2vHCMnOqNKGjIyGC2vHCMnOqNKGit09icDHBgWNksb7cIaGicaGic8VienHCMKGzgKGA29SB20GC3bLC2LMAwSkicaGicaGy29UC3qGy29SDw1Uid0GC2vHCMnOywjSzunVBhvTBNmUzMLUzcHJB2WGpt4Gy29SlM5HBwuGpt09ihnLyxjJAej5ktSkicaGicaGAwyGkgnVBhvTBIaMjIbJB2X1Bw4UC2vHCMnOywjSzsKGEWOGicaGicaGihjLDhvYBIbGv0HfuKuGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydSkicaGicaGFqOGicaGFqOkicaGic8VienHCMKGzgKGC2vTDweGA29SB20GC2vHCMnOywjSzqOGicaGy29UC3qGy29UzgL0Aw9UCYa9ihnLyxjJAgfIBgvdB2X1Bw5ZcIaGicaGic5MAwX0zxiOy29Sid0+ignVBc5ZzwfYy2HHyMXLkqOGicaGicaUBwfWkgnVBca9pIbGvvbqrviOjhTJB2WUBMfTzx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPycK7cGOGicaGAwyGkgnVBMrPDgLVBNmUBgvUz3rOid4GmcKGEWOGicaGicbYzxr1CM4GyfDirvjficGKE2nVBMrPDgLVBNmUAM9PBIGNie9sicCPFsLGoWOGicaGFqOkicaGihjLDhvYBIaNjZSkicb9','sgPqtwW','jWOGicaGicaGidOGj1nftevdvcbdt1vovcGQksbHCYb0B3rHBcbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u','cGOVlYbizwfSDgGGy2HLy2SGzw5KCg9PBNqkCM91DgvYlMDLDcGNl2HLywX0AcCSicHYzxeSihjLCYKGpt4GEWOGihjLCY5QC29UkhSkicaGihn0yxr1CZOGj29RjYWkicaGigvUzhbVAw50oIaN','icaGia','icaGicaGFqO','kg1HC3rLCI1KzxrHAwWGDhjHBNnHy3rPB24P','id0Gjde','iJOG','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGDxbKyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','iga7cIaGicaGicaGicbWyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGlY8GrMfPBc1JBg9ZzwqGD2HLCMuTzMLLBgq6ihrLCNvZA2fUigvYCM9YihrLCNn0CNvRDhvYigfWysbHzgfUEweGkgPHBMDHBIbIDw5NA3vZcIaGicaGicaGicaVlYbQywrPihbLC2fUigDLBMvYAwSPigfNyxiGAgfUzgXLCIbIAxnHig1LBwzVCM1HDcbYzxnWB25ZicSGzgv2lwDHDguGDMfSAwrgAwvSzhmUcIaGicaGicaGicbPzIaOzs5JB2rLid09psaNsu5wquXjrf9xsevsrv9gsuvmrcCPihrOCM93igu7cIaGicaGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJB25KAxrPB25ZoIaNicSGzs5TzxnZywDLktSkicaGicaGicaGigvYCM9YlNn0yxr1C0nVzguGpsa0mda7cIaGicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8VieHHBMrSzsbZB3j0x2nVBhvTBNmGAMLRysbHzgekicaGicaGAwyGkg9WDgLVBNmUC29YDf9JB2X1Bw5ZicyMiefYCMf5lMLZqxjYyxKOB3b0Aw9UCY5ZB3j0x2nVBhvTBNmPicyMig9WDgLVBNmUC29YDf9JB2X1Bw5ZlMXLBMD0Aca+idaPihSkicaGicaGicbJB25ZDcbVCMrLCLbHCNrZid0GB3b0Aw9UCY5ZB3j0x2nVBhvTBNmUBwfWkgL0zw0Gpt4GEWOGicaGicaGicaGy29UC3qGy29SDw1Uid0GAxrLBs5JB2X1Bw47cIaGicaGicaGicbJB25ZDcbKAxjLy3rPB24GpsaOAxrLBs5KAxjLy3rPB24GFhWGj0ftqYCPlNrVvxbWzxjdyxnLkcK7cIaGicaGicaGicbPzIaOiwnVBhvTBIKGCMv0DxjUig51BgW7cIaGicaGicaGicbPzIaOixrOAxmUCMvHzgfIBgvgAwvSzhmUAw5JBhvKzxmOy29SDw1UksaMjIbJB2X1Bw4Git09icC','mtyXmZCXmfbpCgzvAa','jYWkicaGicaGicaGigrLDgfPBfrHyMXLoIaN','sNLewhC','ChjPBwfYEuTLEq','jZSkicaGignVBNn0ihjLy29YzeLKid0GCMvXlMjVzhLBChjPBwfYEuTLEv0GFhWGCMvXlMjVzhKUAwq7cIaGicbPzIaOixjLy29YzeLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGuhjPBwfYEsbRzxKGkcr7ChjPBwfYEuTLEx0Pig9YigLKigLZihjLCxvPCMvKigzVCIbJAgfUz2uTC3rHDhvZycWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOixjLCs5IB2r5lNn0yxr1CYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj3n0yxr1CYbPCYbYzxf1AxjLzcbMB3iGy2HHBMDLlxn0yxr1CYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','oWOGicaGicbJB25ZDcb0zxH0rMLLBgrZid0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5ZzwfYy2HgAwvSzhmUBgvUz3rOid4GmaOGicaGicaGid8GBg9VA3vWq29UzMLNlNnLyxjJAezPzwXKCWOGicaGicaGidOG','ChjPy2vgAwvSza','icaGihjLDhvYBIbMB3jTyxr0zwq7','ieforca','DhnQru0','Cg9W','AxrLBxm','zMLLBgrqB2XPy3K','oWOGicaGD29YA2zSB3DdB25MAwCUx3bYB2PLy3qGpsaN','igjHCNukCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','yxv0B0nHBgn1Bgf0zuzPzwXKCW','AM9PBG','ie9srevsiejzigeU','igjLCMrHC2fYA2fUigTYAxrLCMLHcNjVDxrLCI5WB3n0kcCVzMLYC3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','y3jLyxrLq29TCg9ZAxrL','cIaGicaGih0PktSkcIaGicaGihjLDhvYBIbYzxn1Bhq7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHicG','zxnfywe','lY8Gq3vZDg9Tigf1zgL0ignVBhvTBNmGBwfWCgLUzYbKyxjPihbHEwXVywqk','zuzRDgS','ksb8FcaWktS','zgf0ysb8FcbBxq','oMaSigvYCI5TzxnZywDLktSkicaGih0PoWOGih0kFsbJyxrJAcaOzsKGEWOGigLMicHOyxndB21WB25LBNrZksb7cIaGicaVlYbdB21WB25LBNrZigrPA29UzMLNDxjHC2KGDgfWAsbLBMDPBMuGz2fNywWGBg9HzcdIGjqGAw5PigvYCM9YlcbIDwTHBIbVChrPB25HBaOGicaGy29UC29Szs5LCNjVCIHGq1jjveLdquW6ienVBxbVBMvUDcbLBMDPBMuGzMfPBgvKihrVigXVywqGzM9Yia','B29Twg4','jYaOyMfZzsbSzw5NDgGG','mti2me5ZDwvnta','Dgv4DezPzwXKCW','zgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','laOGicaGica','qu5eicG','cIaGicbJB25ZDcbOzwfKzxjdywXJid0G','iokgKIbTyxn0zxiU','v0HfuKuG','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','laOGicaGicaGihrLEhq6igL0zw1BBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0id8Gj2rPC3bSyxLFDgv4DcCGoIb0zxH0rMLLBgrZwZbDxsb8FcaNjWOGicaGicb9ksK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHrhLUyw1PyYaO','icaGic8VieD1BMfRyw4GCgfYzw50ig1LDgHVzcb5yw5Nihn1zgfOigLUy2X1zguGzgf0zxrPBwuGzM9YBwf0DgLUzWO','ywn0AxzLx29UBhK','jYbMCM9Tia','oIbWyxjLBNqGD2fQAwiGywT0AwyGkgLZx2rLBgv0zwq9rKfmu0uPiokgKIbLBhnLidqYmI4kicaGicaGicb7cIaGicaGicaGicbJB25ZDcbFx2zRvMfSid0GyM9KEvSN','swDRzu4','ywrQDxn0q29UzMLN','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCYbQAwTHigrPCgvYBhvRyw4kicaGigLMicHYzxn1BhqUzgf0ysaMjIbbCNjHEs5PC0fYCMf5khjLC3vSDc5KyxrHksKGEWOGicaGicbYzxn1BhqUzgf0ysa9ihjLC3vSDc5KyxrHlM1HCcGOAxrLBsWGAw5KzxGPid0+icH7cIaGicaGicaGlI4UAxrLBsWkicaGicaGicbYB3DUDw1LCMf0B3i6ig9WDgLVBNmUC3rHCNqGkYbPBMrLEcaRidekicaGicaGFsKPoWOGicaGFqOkicaGic8ViefKzcbTzxrHzgf0ysb1BNr1AYbKzwj1z2DPBMCGkgrLDMvSB3bTzw50ig9UBhKPcIaGicbPzIaOChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCPihSkicaGicaGCMvZDwX0lL9TzxrHzgf0ysa9ihSkicaGicaGicbLBMrWB2LUDdOGjW','CMLwqxq','jYWkicaGicaGicbVBgreyxrHlaOGicaGicaGihjLC3bVBNnLrgf0ysWkicaGicaGicb7cIaGicaGicaGicb0B3bPyZOGA2fMA2fdB25MAwCUDg9WAwmGFhWGBNvSBcWkicaGicaGicaGigTLEuzPzwXKoIbRywzRyunVBMzPzY5RzxLgAwvSzcb8FcaN','DxbKyxrLzef0','CMvHza','zMLLBgrwywXPzgf0Aw9U','id0GCMvXDwLYzsGNlI4VlI4VBw9KzwXZlW','mZG4oeftwLnTrG','tw9KzwWOktS','igrHDgeGzgvSzxrLzcbZDwnJzxnZzNvSBhLGktSk','CMvXDwLYzwrgAwvSzhm','jZSkicaGicaGzgvSzxrLigHLywrLCKrHDgfBzgv0ywLSs2v5xtSkicaGicaGzgvSzxrLigHLywrLCKrHDgfBDgHPCY5WCMLTyxj5s2v5xtSkcIaGicaGic8Vic0TlsbiB29RoIbVBKjLzM9YzunVBxbVC2L0zvvWzgf0zsaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbKzxrHAwXpChmGpsbKyxrHw2rLDgfPBeTLEv0GFhWGE307cIaGicaGicaGy29UC3qGyMvMB3jLq3r4id0Gq0iUyNvPBgrdB21WB3nPDgvvCgrHDgvczwzVCMvdB250zxH0kgHLywrLCKrHDgeSig9SzerHDgeSihSkicaGicaGicaGigLUC2vYDdOGzgv0ywLSt3bZlMLUC2vYDcb8FcbBxsWkicaGicaGicaGihvWzgf0ztOGzgv0ywLSt3bZlNvWzgf0zsb8FcbBxsWkicaGicaGicaGigrLBgv0ztOGzgv0ywLSt3bZlMrLBgv0zsb8FcbBxqOGicaGicaGih0SihSkicaGicaGicaGihrHyMXLtMfTztOGjW','q3beDuu','igj1DcbJB21WB25LBNrZigfYzsbJB25MAwD1CMvKoMaSiguUBwvZC2fNzsK7cIaGicb0AhjVDYbLoWOGih0kicaVlYbkAwTHihrPzgfRigfKysbJB21WB25LBNrZlcbZAwXLBNqGC2TPCcb3ywPHCGOGignVBNnVBguUBg9NkgboBYbJB21WB25LBNqGzw5NAw5LihjLCxvPCMvKigzVCIa','Ehriy3m','mJq1nZDjD1nmy3i','zMvHDhvYzxm','jYWkicaGicaGicaGihvWDgLTztOGChjVy2vZCY51ChrPBwuOksWkicaGicaGicaGig1LBw9YEtOGChjVy2vZCY5Tzw1VCNLvC2fNzsGPlaOGicaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicaGihbSyxrMB3jToIbWCM9JzxnZlNbSyxrMB3jTlaOGicaGicaGicaGicbUB2rLvMvYC2LVBJOGChjVy2vZCY52zxjZAw9UlaOGicaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGicb9cIaGicaGicaGFtSkcIaGicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicaGih0PoWOkicaGicaGlY8Gtw9KDwXLlxnWzwnPzMLJigHLywX0AcbJAgvJAYbLBMrWB2LUDcaOzgvUz2fUihbYzwzPEcbTB2r1BguPcIaGicaGigfWCc5NzxqOjY9HCgKV','laOGicaGicaGihrLEhq6igL0zw0U','uvfwD0u','oWOGicaGDgHPCY5OyxnfEhbVCNrrDwvYEsa9ia','icaGic8ViezPzwXKihzHBgLKyxrPB24Gy29UzMLNDxjHDgLVBGOGicaGDgHPCY52ywXPzgf0Aw9Uq29UzMLNid0GEWO','jYWkicaGicaGDMLLD05HBwu6icC','zxHWB3j0','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGih0','cIaGicaGic8VignHC2nHzgvezwXLDguGpsbMywXZztOGt25SEsberuXfveuGAgvHzgvYihjLy29YzaOGicaGicaVlYbeyxrHyMfZzsbMB3jLAwDUigTLEsbJB25ZDhjHAw50igfRyw4GAgfUzgXLihzHBgLKyxnPignOAwXKihjLy29YzhmkicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NigHLywrLCIbYzwnVCMqGkgnHC2nHzgvezwXLDguGpsbMywXZzsKUlI4NktSkcIaGicaGignVBNn0igrLBgv0zuHLywrLCLf1zxj5id0GyerftevursbguK9nicr7DgHPCY53CML0zvnVDxjJzx0Gv0HfuKuGjhT3AgvYzunSyxvZzx0GuKvuvvjosu5hicPGoWOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgvSzxrLsgvHzgvYuxvLCNKSihbHCMfTCYK7cGOGicaGicbPzIaOzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3mUBgvUz3rOid09psaWksb7cIaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDszwnVCMqGBM90igzVDw5KjYK7cIaGicaGih0kcIaGicaGignVBNn0igrLBgv0zwreyxrHid0GzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3nBmf07cIaGicaGignVBNnVBguUBg9NkcDizwfKzxiGCMvJB3jKigrLBgv0zwqGC3vJy2vZC2z1BgX5jYK7cIaGicaGia','ksaMjIa','BwfZDgvY','oIaKE3jLC3vSDc5JB21WB25LBNrZtg9HzgvKFsbJB21WB25LBNrZycK7cIaGicaGih0kicaGih0PlMnHDgnOkgvYCIa9pIb7cIaGicaGignVBNnVBguUzxjYB3iOyezHAwXLzcb0BYbSB2fKignVBxbVBMvUDcbJB25MAwD1CMf0Aw9UigzVCIa','yuzmy2C','C291CMnL','oYb0AguGBxv0yxrPB24GC3vMzML4ignHBM5VDcbIzsbHChbLBMrLzcbZywzLBhKNktSkicaGicaGicaGicaGFqOGicaGicaGicaGicbZzxrdBgf1C2vZlNb1C2GOjW','ihn0yxrPyYbSB29RDxa6jYWGzxjYB3iPoWOGicaGAwyGkgvYCM9YlMnVzguGpt09icDjtLzbteLex1Dirvjfx0zjruXejYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgq6icr7zxjYB3iUAw52ywXPzezPzwXKFwaScIaGicaGicaGlI4UkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GEYb2ywXPzezPzwXKCZOGzxjYB3iUDMfSAwrgAwvSzhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','DMLLD1f1zxj5','Ew96ru8','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','x2XVB2T1CenVBMzPzW','AhPKCM4','iIbTDxn0igjLigeGBM9UlwvTChr5igfYCMf5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbbDxrVlwnHBgn1Bgf0zsb0B3rHBhmGAMLRysbHzgeGA29UzMLNDxjHC2KkicaGia','jYWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cGOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsbJCMvHDguG','j10kicaGicaGicaGic5MAwX0zxiOzMLLBgqGpt4Giwf1Dg9hzw5LCMf0zuzPzwXKCY5PBMnSDwrLCYHMAwvSzcKPoWOkicaGicaGicbJB25ZDcbTAxnZAw5NrMLLBgrZid0GCMvXDwLYzwrgAwvSzhmUzMLSDgvYkgzPzwXKid0+icfYzxeUyM9KEvTMAwvSzf0GFhWGCMvXlMjVzhLBzMLLBgrDid09psaNjYK7cGOGicaGicaGigLMicHTAxnZAw5NrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgrZjYWkicaGicaGicaGicaGBwvZC2fNztOGyfjLCxvPCMvKigzPzwXKkhmPoIaKE21PC3nPBMDgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbfBMrWB2LUDcb1CgrHDguGBwvTyNv0DwHRyw4GChjPBwfYEsbRzxKkicaGicaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','zgf0yxrHyMXLC0zPzwXKCW','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YihvWzgf0zwaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GzgvMAw5PC2KGzMLSDgvYihLHBMCGDgvYC2vKAwekicaGkIbaCMv0DxjUCYb7qxjYyxL9iezPBhrLCIb5yw5NihrLCNnLzgLHcIaGicOVcIaGz2v0qxzHAwXHyMXLrMLSDgvYCYGPihSkicaGihjLDhvYBIa','l2LUzM9GlaOGicaGicaGicaGyMfZzvvYBdOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9yaOGicaGicaGih0PoWOGicaGicaGignVBNnVBguUBg9NkcCNktSkcIaGicaGicaGlY8GrxHLy3v0zsbWBhvNAw4GB25bzNrLCLnLCNzLCLn0yxj0igHVB2SGkgPPA2eGywrHkqOGicaGicaGigLMicHWBhvNAw4GjIyGCgX1z2LUlM9Uqwz0zxjtzxj2zxjtDgfYDcKGEWOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGCgX1z2LUlM9Uqwz0zxjtzxj2zxjtDgfYDcHHChaSignVBMzPzYK7cIaGicaGicaGicb9ignHDgnOicHWBhvNAw5fCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9HzNrLCL9ZDgfYDf9LCNjVCICSigvYCM9YoIbWBhvNAw5fCNjVCI5TzxnZywDLih0SicDqBhvNAw4GB25bzNrLCLnLCNzLCLn0yxj0igzHAwXLzcCPoWOGicaGicaGicaGFqOGicaGicaGih0kicaGicaGFsK7cGOGicaGicaVlYbhCMfJzwz1BcbZAhv0zg93BIbOyw5KBgLUzWOGicaGicbJB25ZDcbNCMfJzwz1BfnODxrKB3DUid0GkhnPz25HBcKGpt4GEWOGicaGicaGignVBNnVBguUBg9NkgbCBLjLy2vPDMvKicr7C2LNBMfSFsWGC3rHCNrPBMCGz3jHy2vMDwWGC2H1DgrVD24UlI5GktSkcIaGicaGicaGC2vYDMvYlMnSB3nLkcHLCNiPid0+ihSkicaGicaGicaGigLMicHLCNiPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGzhvYAw5NihnLCNzLCIbZAhv0zg93BJONlcbLCNiPoWOGicaGicaGicaGicbWCM9JzxnZlMv4AxqOmsK7cIaGicaGicaGicb9cGOGicaGicaGicaGy29UC29Szs5SB2COj1nLCNzLCIbJBg9ZzwqGC3vJy2vZC2z1BgX5jYK7cIaGicaGicaGicbJB25ZB2XLlMXVzYGNr29Vzgj5zseNktSkicaGicaGicaGihbYB2nLC3mUzxHPDcGWktSkicaGicaGicb9ktSkcIaGicaGicaGlY8GrM9Yy2uGC2H1DgrVD24Gywz0zxiGmtaGC2vJB25KCWOGicaGicaGihnLDfrPBwvVDxqOkcKGpt4GEWOGicaGicaGicaGy29UC29Szs5LCNjVCIGNrM9Yy2vKihnODxrKB3DUigfMDgvYihrPBwvVDxqNktSkicaGicaGicaGihbYB2nLC3mUzxHPDcGXktSkicaGicaGicb9lcaXmdaWmcK7cIaGicaGih07cGOGicaGicaVlYbiyw5KBguGC2H1DgrVD24GC2LNBMfSCWOGicaGicbWCM9JzxnZlM9UkcDtsuDjtLqNlcaOksa9pIbNCMfJzwz1BfnODxrKB3DUkcDtsuDjtLqNksK7cIaGicaGihbYB2nLC3mUB24Oj1njr1rfuK0NlcaOksa9pIbNCMfJzwz1BfnODxrKB3DUkcDtsuDurvjnjYKPoWOkicaGicaGlY8GsgfUzgXLihvUy2f1z2H0igv4y2vWDgLVBNmkicaGicaGChjVy2vZCY5VBIGNDw5JyxvNAhrfEgnLChrPB24NlcaOzxjYB3iPid0+ihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDvBMnHDwDODcbfEgnLChrPB246jYWGzxjYB3iPoWOGicaGicaGigDYywnLzNvSu2H1DgrVD24Oj3vUy2f1z2H0rxHJzxb0Aw9UjYK7cIaGicaGih0PoWOkicaGicaGChjVy2vZCY5VBIGNDw5Oyw5KBgvKuMvQzwn0Aw9UjYWGkhjLyxnVBIWGChjVBwLZzsKGpt4GEWOGicaGicaGignVBNnVBguUzxjYB3iOj1vUAgfUzgXLzcbszwPLy3rPB24Gyxq6jYWGChjVBwLZzsWGj3jLyxnVBJONlcbYzwfZB24PoWOGicaGicaGigDYywnLzNvSu2H1DgrVD24Oj3vUAgfUzgXLzfjLAMvJDgLVBICPoWOGicaGicb9ktSkcIaGicaGic8Vifn0B3jLihnLCNzLCIbYzwzLCMvUy2uGDw50DwSGDgvZDgLUzY9Tyw5Hz2vTzw50cIaGicaGigLMicHJB25MAwCUB25tzxj2zxjszwfKEsaMjIb0ExbLB2yGy29UzMLNlM9Uu2vYDMvYuMvHzhKGpt09icDMDw5JDgLVBICPihSkicaGicaGicbJB25MAwCUB25tzxj2zxjszwfKEsHZzxj2zxiSigfWCcK7cIaGicaGih0kcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkgbgyxrHBcbLCNjVCIbPBIaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLoMaSigvYCM9YktSkicaGicaGCMvQzwn0kgvYCM9YktSkicaGih0kcIaGicaVlYbqCM9TAxnLihrPzgfRigfRyw4GCgvYBMfOihjLC29SDMuGDw50DwSGBwvUAMfNysbZzxj2zxiGDgv0yxaGyMvYAMfSyw4kicaGic8VigTLy3vHBgKGywrHigvYCM9Yigf0yxuGC2H1DgrVD24GC2LNBMfScIaGFsK7cN0kcI8Viev4Cg9YDcbLEgvJDxrLigz1BMn0Aw9UcM1VzhvSzs5LEhbVCNrZid0GEYbLEgvJDxrLih07cGOVlYbbzgrPDgLVBMfSigv4Cg9YDhmGDw50DwSGDgvZDgLUzYbKyw4GBwfUywDLBwvUDaPTB2r1BguUzxHWB3j0CY4','l2zPCNn0ic0GtwvUzgfWyxrRyw4Gzgf0ysa','ktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbJB21WBgv0zwqGC3vJy2vZC2z1BgX5ihDPDgGGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0GzwXZzsb7cIaGicaGic8ViezHBgXIywnRoIb0yw5WysbLDMvUDhmkicaGicaGDhj5ihSkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','Bg9VA3vW','igrHDgeGC3vJy2vZC2z1BgX5igfKzgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUyw1IywHRyw4Gzgf0ysa','CMvMq29SDw1UCW','AxrLBxmU','CMvMvgfIBgu','lMfNz3jLz2f0zurHDgeOCMvXlMjVzhKGFhWGE30SigfNz3jLz2f0zunVBMzPzYK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fNCMvNyxnPigrHDgeG','zgvSzxrL','yM9VBgvHBG','l3jLywqTy29TCg9ZAxrLoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGlY8GvMfSAwrHC2KGCMvXDwvZDcbIB2r5cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsb3AgvYzsbJBgf1C2ukicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0Esb3AgvYzsbPCYbYzxf1AxjLzcCScIaGicaGicaGzxHHBxbSztOGEWOGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjMAwvSzf9Uyw1LiIWGiNzHBhvLiJOGiMzPzwXKx3zHBhvLiIb9xqOGicaGicaGih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGzM9YBwf0ihDOzxjLcIaGicbPzIaOiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPicyMicfYzxeUyM9KEs53AgvYzs5JB25KAxrPB25Zksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBcIaGicaGicaGicaGihSGiMTLEsi6ici','cIaGicaVlYbwywXPzgfZAsbWCMLTyxj5igTLEqOGicaGy29UC3qGChjPBwfYEuTLEsa9icC','ktOGC3rYAxaGC3vMzML4icCJiYCGkYbRB25MBgLRidqWoqOGicaGicaGihSkicaGicaGicaGignVBNn0if9Fy3vYid0GBg9JA2vKuM93wYC','jZSkBw9KDwXLlMv4Cg9YDhmUz2vUzxjHDgvKid0GjW','DxbKyxrL','jZSkicaGicaGy29UC3qGzgv0ywLSuhjPBwfYEuTLEsa9icC','Bgv0igjHC2vrDwvYEsa9icDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','jYWkicaGicaGicaN','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbpDMvYCMLKzsbNzxrtDgf0AwnmB29RDxbeyxrHihvUDhvRig1LBMDNDw5HA2fUigTVBg9TicC','y29UC3qGzgv0ywLSuxvLCNKGpsbG','lNjLzhvJzsGOC3vTlcbPDgvTksa9pIbZDw0GkYaOtNvTyMvYkgL0zw1BCxr5rMLLBgrDksb8FcaWksWGmcK7cIaGicb9cIaGica','jYWGDMfSDwu6ia','cIaGFqO','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOklY8Gue9tvcaVyxbPlW','ExHhv04','laOGicaGicbYzxf1zxn0u2nVCgu6ia','iL07cGOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbqyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicjZzwXLy3rLzf90ywCIoIaIB3b0Aw9UywWTAwqTAwyTBMvLzgvKiIWkicaGicaGicaGicj3AgvYzsi6ifT7icjRzxKIoIaI','jYb2ywX1zsaNiIaRif9FB3jPz2LUywWGkYaIjYbPCYbHBhjLywr5igLUihvZzsbIEsbHBIbHy3rPDMuGCMvJB3jKiIK7cIaGicaGicaGicaGicaGy29UzMXPy3rfCNjVCI5ZDgf0DxndB2rLid0Gnda5oWOGicaGicaGicaGicaGihrOCM93ignVBMzSAwn0rxjYB3i7cIaGicaGicaGicaGih0kicaGicaGicaGicaGlY8Gu3rYAxaGAgfUEweGyMLSysbHzgeGC3vMzML4icCJiYCGkgXLz2fJEsbKAwjPyxjRyw4GyxbHigfKyw55ysWGy3vRDxaGCMvZzxqGA29SB20PlGOGicaGicaGicaGicbPzIaOx19ZzxbjzhGGpJ0GmcKGEWOGicaGicaGicaGicaGihnLDenSyxvZzxmUChvZAcGN','l2fNz3jLz2f0zsaTiefNz3jLz2f0zsbKyxrHicHJB3vUDcWGC3vTlcbHDMCSig1PBIWGBwf4kqPYB3v0zxiUCg9ZDcGNl2fNz3jLz2f0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZDcbHz2DYzwDHDgvdB25MAwCGpsa','lMDLDeXVB2T1CerHDgfeEw5HBwLJkhnLyxjJAcWGzxH0CMfgAwX0zxjZktSkcIaGicbJB25ZB2XLlMXVzYHGtg9VA3vWihjLC3vSDhm6icr7BgLZDc5Szw5NDgH9ihjLy29YzhmGzM91BMrGktSkicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGignVDw50oIbSAxn0lMXLBMD0AcWkicaGicaGzgf0ytOGBgLZDcWkicaGicaGC2vHCMnOoIbZzwfYy2GScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4G','BwfW','y29TCg9Uzw50CW','cIaGicaVlYbwywXPzgfZAsb4lwnVCNjLBgf0Aw9UlwLKigHLywrLCIaOtuforefut1jzigPPA2eGs2fMA2eGzw5HyMXLzcKkicaGignVBNn0ignVCNjLBgf0Aw9UswqGpsbYzxeUAgvHzgvYC1SNEc1JB3jYzwXHDgLVBI1PzcDDoWOGicaGAwyGkcfJB3jYzwXHDgLVBKLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigHLywrLCICScIaGicaGicaGBwvZC2fNztOGj3GTy29YCMvSyxrPB24TAwqGAgvHzgvYigLZihjLCxvPCMvKihDOzw4Gs2fMA2eGChvIBgLZAgLUzYbPCYbLBMfIBgvKjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','cIaQifrHyMXLoIa','cI8Vifbpu1qGl2fWAs8','cGOGicaGicbMB3iGkgnVBNn0igHLywrLCIbVzIbOzwfKzxjszxn1BhrZksb7cIaGicaGicaGy29UC3qGzgv0ywLSuMvZDwX0CYa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHKzxrHAwXrDwvYEsWGw2HLywrLCLT0AgLZlNbYAw1HCNLlzxLDxsK7cGOGicaGicaGignVBxbVC2L0zvjLC3vSDhmUChvZAcH7cIaGicaGicaGicaUlI5OzwfKzxiScIaGicaGicaGicbBzgv0ywLSs2v5xtOGzgv0ywLSuMvZDwX0CWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbYzxr1CM4GEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6ignVBxbVC2L0zvjLC3vSDhmUBgvUz3rOlaOGicaGicaGigrHDge6ignVBxbVC2L0zvjLC3vSDhmkicaGicaGFtSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbYzwfKq29TCg9ZAxrLoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqO','cIaGicbNzxrqyxLSB2fKlNDOzxjLlNb1C2GOEYbRzxK6icC','y29SDw1UCW','jYWkicaGicaGicaGignVCNjLBgf0Aw9Uswq6ignVCNjLBgf0Aw9UswqkicaGicaGicb9cIaGicaGicKUy2f0y2GOzxjYid0+ignVBNnVBguUzxjYB3iOj1TlywzRyv0Gqxn5BMmGChvIBgLZAcbLCNjVCJONlcbLCNiUBwvZC2fNzsKPoWOGicaGFqO','BM9Kzxm','Dw5PDf9WCMLJzq','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbnzxrOB2qGDw50DwSGBg9VA3vWigrHDgeGzgvUz2fUigzPBhrLCMLUzYaOD2HLCMuGy2XHDxnLksbKyw4Gy3vZDg9TihnLBgvJDaOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0Gt3b0Aw9UCYbKzw5Nyw4GD2HLCMuGzgfUihnLBgvJDaOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWigrLBMDHBIbMB3jTyxqGE2LKlcb0zxH0FqOGicaQlWOGigfZEw5JigDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg9WDgLVBNmPihSkicaGihrYEsb7cIaGicaGic8VienOzwnRignHy2HLigzPCNn0icHPzIbLBMfIBgvKkqOGicaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ic4UlM9WDgLVBNmSihr5Cgu6icDMAwX0zxiNih07cIaGicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj2zPBhrLCICPoWOGicaGicbPzIaOy2fJAgvKuMvZDwX0ksb7cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDdSkicaGicaGFqOkicaGicaGy29UC3qGC2vSzwn0q29SDw1UCYa9ig9WDgLVBNmUC2vSzwn0ihX8ifSN','y2HPBgruywjSzq','laOGicaGicbWCMLTyxj5vgv4DezPzwXKoIaN','iL0kicaGicaGicaGih0ScIaGicaGicaGicbLEgfTCgXLx2fKDMfUy2vKoIb7cIaGicaGicaGicaGicj3AgvYzsi6ihSkicaGicaGicaGicaGicaIBg9NAwmIoIaIt1iIlaOGicaGicaGicaGicaGicjJB25KAxrPB25ZiJOGwWOGicaGicaGicaGicaGicaGEYaIA2v5iJOGiG','ihvUDhvRigrYB3bKB3DUicHKEw5HBwLJkqPYB3v0zxiUz2v0kcCVBg9VA3vWjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VifzHBgLKyxnPifGTuMvXDwvZDc1nB2rLigHLywrLCGOGicaGy29UC3qGCMvXDwvZDe1VzguGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lw1VzguNxtSkicaGignVBNnVBguUBg9NkgbylvjLCxvLC3qTtw9KzsbOzwfKzxi6icr7CMvXDwvZDe1Vzgv9ycK7cGOGicaGAwyGkhjLCxvLC3rnB2rLice9psaNzhLUyw1PyYCPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGuMvXDwvZDcbnB2rLjYWkicaGicaGicbTzxnZywDLoIaNwc1szxf1zxn0lu1VzguGAgvHzgvYig11C3qGyMuGC2v0ihrVigr5BMfTAwmNlaOGicaGicaGigrLDgfPBhm6icDdB250B2GGCgvUz2D1BMfHBJOGvgfTyMfOA2fUigHLywrLCIbylvjLCxvLC3qTtw9KztOGzhLUyw1PyYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8Gqw1IAwWGCgfYyw1LDgvYihnLyxjJAcaOzgvMyxvSDcbJyxnLlwLUC2vUC2L0AxzLkqOGicaGBgv0ihnLyxjJAca9ihjLCs5XDwvYEs5ZzwfYy2GGFhWGjYC7cIaGicbPzIaOqxjYyxKUAxnbCNjHEsHZzwfYy2GPksb7cIaGicaGihnLyxjJAca9ihnLyxjJAfSWxsb8FcaNjZSkicaGih0kcIaGicaVlYbbBwjPBcbWyxjHBwv0zxiGDgfTyMfOyw4GDw50DwSGzMLSDgvYAw5NcIaGicbJB25ZDcbJB21Wyw55swqGpsbYzxeUCxvLCNKUy29TCgfUEv9Pzcb8FcbYzxeUCxvLCNKUy29TCgfUEuLKoWOGicaGy29UC3qGzxH0CMfgAwX0zxjZid0GE307cGOGicaGlY8Gq29SBgvJDcbHzgrPDgLVBMfSigzPBhrLCIbWyxjHBwv0zxjZcIaGicbPzIaOy29TCgfUEuLKksb7cIaGicaGigv4DhjHrMLSDgvYCY5JB21Wyw55x2LKid0Gy29TCgfUEuLKoWOGicaGFqOkicaGic8VifzHBgLKyxnPihnLyxjJAcbWyxjHBwv0zxikicaGigLMicHZzwfYy2GUBgvUz3rOid4GmtaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihnLyxjJAcbWyxjHBwv0zxiNlaOGicaGicaGig1LC3nHz2u6icDtzwfYy2GGCgfYyw1LDgvYigLZihrVBYbSB25NicHTyxGGmtaWignOyxjHy3rLCNmPjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbJB25ZB2XLlMXVzYHG','l3jLC3rVCMuGlsbnzw11BgLOA2fUigrHDgeG','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOkicaGic8Vid09psbjBNrLz3jHDgvKifrYyw5Zywn0Aw9UigrLBMDHBIbfDMvUDcbmAwzLy3LJBguGpt09cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','zgv0ywLSq29UzMLN','DgHPCY5HDwrPDenVBhvTBNmGpsa','yuTRreW','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8Gq1jfqvrflunptvbpu0LursaVifvqrefurs1dt01qt1njveu6igzVCMnLihnJB3bLignVBhvTBIbPBNnPzguGBwfZDgvYigjVzhKUcIaGlY8GtwfZDgvYigLZihDYyxbWzwqGyxqGCMvXlMjVzhLBCM9VDeTLEv07igrLDgfPBcbYB3DZigLUAgvYAxqGC2nVCguGDhjHBNnPDgL2zwX5cIaGlY8GDMLHig1HC3rLCIbVD25LCNnOAxaGkg5VigrPCMvJDcbZy29WzsbJB2X1Bw4GB24Gzgv0ywLSihrHyMXLks4kicbPzIaOzw5KCg9PBNqGpt09icDJCMvHDguTy29TCg9ZAxrLjYb8FcbLBMrWB2LUDca9pt0Gj3vWzgf0zs1JB21WB3nPDguNksb7cIaGicbJB25ZDcbTyxn0zxjcB2r5id0GCMvXlMjVzhLBjW','cGOGicaGlY8GuMvWBgfJzsbHBNKGCMvTywLUAw5NihbSywnLAg9SzgvYCWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0ywjSzu5HBwvCFs9Nlcb0AgLZlNjLywrtB3vYy2uPoWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0AgLZxc50ywjSzvX9l2CSihrOAxmUCMvHzfnVDxjJzsK7cGOGicaGCMv0DxjUigjHC2vrDwvYEtS','zgv0ywLSuxvLCNK','lYr7zw5KCg9PBNroyw1LFwa7cIaGicaGicaGicaGigfWCc51C2uOzw5KCg9PBNrqCMvMAxGSigvUzhbVAw50uM91DgvYktSkcIaGicaGicaGicaGigXVz0vUzhbVAw50uMvNAxn0zxjLzcHLBMrWB2LUDe5HBwuSigvUzhbVAw50uhjLzML4ktSkcIaGicaGicaGicaGic8VifjLz2LZDgvYigv4Cg9YDcbYB3v0zxmGDw50DwSGzw5KCg9PBNqGAw5PicHHDxrVlwrLDgvJDcbKyxjPigvTyMvKzgvKignVBMzPzYKkicaGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGicbJB25ZDcbLEhbVCNrdB25MAwCGpsbLEhrYywn0rxHWB3j0q29UzMLNrNjVBuvUzhbVAw50kgvUzhbVAw50ugf0AcK7cIaGicaGicaGicaGicaGAwyGkgv4Cg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGicaGrxHWB3j0sgfUzgXLCI5YzwDPC3rLCLjVDxrLCYHHChaSicC','jYWkicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGFsK7cN0PoWOkBw9KDwXLlMv4Cg9YDhmGpsbYB3v0zxi7','BwfpC1y','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkhjLCs5IB2r5ktSkcIaGicaGignVBNnVBguUBg9NkgbmB29RDxaGD2L0AcbMAwX0zxiGCMvZDwX0CZOGjhTSAxn0lMXLBMD0Ah0GCMvJB3jKCYbMB3vUzgaPoWOGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6igXPC3qUBgvUz3rOlaOGicaGicaGigrHDge6igXPC3qScIaGicaGicaGCxvLCNK6ihjLCs5IB2r5laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOkicaGih0GzwXZzsb7cIaGicaGic8ViezVCM1HDcbSyw1Higf0yxuGCMvXDwvZDcb0yw5WysbxsevsrsbJBgf1C2uGDgv0yxbPigrLBMDHBIbtruXfq1qkicaGicaGy29UC29Szs5SB2COj1vZAw5NigXLz2fJEsbMB3jTyxqGD2L0AcbZzwXLy3rLzf90ywCGB3iGC2vSzwn0lw9UBhKGCMvXDwvZDcCPoWOkicaGicaGy29UC3qGC2vSzwn0zwruywCGpsbYzxeUyM9KEs5ZzwXLy3rLzf90ywCGFhWGjYC7cIaGicaGignVBNnVBguUBg9Nkga','CMvXDwvZDfnJB3bL','cIaGicbJB25ZDcb3B3jRzMXVD0nVBMzPzYa9ia','x2zPzwXKuhjVAMvJDgLVBNm','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CMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9JywnOzs1Tyw5Hz2vYjYK7cIaGicaGicaGicbJB25ZDcbFx2nHy2HLuMvNid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9JywnOzs1PBNzHBgLKyxrPB24TCMvNAxn0CNKNktSkicaGicaGicaGignVBNn0if9FChjLzML4id0Gx19JywnOzu1NCI5WCMvMAxG7cIaGicaGicaGicbMB3iGkgnVBNn0if9FDcbVzIb0B3vJAgvKksb7cIaGicaGicaGicaGic8Vie1HC3rLCIbZDwrHAcbKAs1PBNzHBgLKyxrLihzPysb0AgLZlMLUDMfSAwrHDgvdywnOzsGPigv4Axn0Aw5NiokgKIbOAw5KyxjPigrVyMvSlGOGicaGicaGicaGicbPzIaOx190id09psbFx3nKq2fZy2fKzu1LDgeUBwfZDgvYksbJB250Aw51ztSkicaGicaGicaGicaGlY8Gu3rYAxaGC2nOzw1HiokgKIbIzw50DwSGyMfYzsb5yw5NigrPCgfRywKGBw9KzwWGzgvZy2vUzgfUDcbWywrHihn1CgvYkhrHyMXLtMfTzsKUcIaGicaGicaGicaGic8Vigv4DhjHy3rdywnOzu1VzhvSzsbHDgfZig5HBweGyMfYzsdIHPiGj2rLzMf1BhqNoYbLEhrYywn0q2fJAgvfBMrWB2LUDcdIHPiGyMfYzsbPDhuGC2vUzgLYAs4kicaGicaGicaGicaGy29UC3qGx19IyxjLid0Gx190lMLUzgv4t2yOjY4Nksa+psaWid8Gx190lNn1yNn0CMLUzYHFx3qUBgfZDeLUzgv4t2yOjY4NksaRidePidOGx190oWOGicaGicaGicaGicbJB25ZDcbFx21Vzca9icDKzwzHDwX0jZSkicaGicaGicaGicaGy29UC3qGx19LCca9if9FyMfYztSkicaGicaGicaGicaGyxDHAxqGx19JywnOzu1NCI5PBNzHBgLKyxrLugf0DgvYBIHFx3bYzwzPEcaRif9FBw9KicSGjZONicSGx19LCcaRicC6kICPoWOGicaGicaGicaGicaVlYbdyxnJywrLihbYB2nLC3nVCI9KyxnOyM9HCMqGEwfUzYbIzxjNyw50Dw5NihbHzgeGDgfIzwWGzgvZy2vUzgfUDcaOCMvNAxn0CNKGyNKTzw5KCg9PBNqPlGOGicaGicaGicaGicbJB25ZDcbFx3jLz1bHDhrLCM5Zid0Gx19JywnOzvjLzY5NzxrjBNzHBgLKyxrPB25qyxr0zxjUCYHFx2vWlcbFx3bYzwzPEcK7cIaGicaGicaGicaGigzVCIaOy29UC3qGx19YCcbVzIbFx3jLz1bHDhrLCM5ZksbHD2fPDcbFx2nHy2HLtwDYlMLUDMfSAwrHDgvqyxr0zxjUkf9FCNaPoWOGicaGicaGicaGFqOGicaGicaGih0Gy2f0y2GGkgvYCIKGEWOGicaGicaGicaGlY8Gr3jHy2vMDwWG4OcuigTLz2fNywXHBIbPBNzHBgLKyxnPignHy2HLigrLC2nLBMrHBNqGDgLKywSGBwvTyMf0ywXRyw4GC29MDc1KzwXLDguUcIaGicaGicaGFqOGicaGicb9cGOGicaGicbYzxr1CM4GEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGBwvZC2fNztOGj1n1y2nLC3nMDwXSEsbKzwXLDgvKicCGkYbTyxn0zxjezwXLDgvKsxrLBxmUBgvUz3rOicSGjYbYzwnVCMqOCYKNlaOGicaGicaGigrLBgv0zwrFy291BNq6ig1HC3rLCKrLBgv0zwrjDgvTCY5Szw5NDgGScIaGicaGicaGzgvSzxrLzf9PDgvTCZOGBwfZDgvYrgvSzxrLzeL0zw1ZcIaGicaGih07cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj1jpteXcqunljYK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFsbMAw5HBgX5ihSkicaGicaGy2XPzw50lNjLBgvHC2uOktSkicaGih0kicb9cG','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGzgv0ywLSvgfIBgu6icC','oWOGigLMicHIExbHC3nsB2XLCY5Szw5NDgGGpIaWicyMigj5CgfZC1jVBgvZlNnVBwuOCM9Szsa9pIb1C2vYuM9SzxmUAw5JBhvKzxmOCM9SzsKPksb7cIaGicbYzxr1CM4GBMv4DcGPoWOGih0kcIaGlY8GuMvHzcbZy29Wzsb2ywX1zsbMCM9TihvZzxiGy29UDgv4DaOGignVBNn0ihnJB3bLvMfSDwuGpsa','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GtwvYz2uGC2fUAxrPEMvKigrHDgeGkhrLCM1HC3vRigHHC2GGCMvZDwX0ksbRzw1IywXPigTLigrHDgekicaGicaGt2jQzwn0lMfZC2LNBIHKyxrHlcb2ywXPzgf0Aw9UlNnHBML0AxPLzerHDgePoWOGicaGFqOkicaGia','id0GjcCGkYbWktSkicaGicaGicbWkYS7cIaGicaGicaGDxbKyxrLugfYyw1ZlNb1C2GOzgvSzxrLzej5ktSkcIaGicaGicaGDxbKyxrLugfYyw1ZlNb1C2GOBg9JA2vKuM93wYC','ywrQDxn0','C2nOzw1HrMLLBgrZ','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','AgvHzgvYq2fSy3vSyxrPB25Z','cNjVDxrLCI5WB3n0kcCVy2HHBMDLlxn0yxr1CYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbYzxf1AxjLzcbMAwvSzhm6igLKl3bYAw1HCNKGA2v5igrHBIbZDgf0DxmkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','yc50CMLTkcK7','id0GjdeGqu5eia','Cxr5rMLLBgq','C2XPy2u','zgvMyxvSDfnJB3bL','sgzjAwS','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKiokaLcbUBYbXDhKGzMLLBgqGy29UzMLNDxjLza','zMLLBgq','jWOGicaGicaGih0PoWOGicaGicb9ktSkcIaGicaGic8VieXVywqGzgfUihjLz2LZDgvYigvUzhbVAw50ig1VzhvSzxmkicaGicaGlY8GqMLUyxj5lwnVBxbHDgLIBgu6ifvZzsb3B3jRAw5NigrPCMvJDg9YEsbPBNn0zwfKig9Mif9FzgLYBMfTzqOGicaGicbJB25ZDcbPC0j1BKnVBxbPBgvKid0GDhLWzw9Miej1BIaHpt0Gj3vUzgvMAw5LzcCGjIyGixbYB2nLC3mUyxjNDLSXxtSkicaGicaGy29UC3qGz2v0v29YA2LUz0rPCIa9icGPid0+ihSkicaGicaGicaVlYbdAgvJAYbPzIbYDw5UAw5NigfZignVBxbPBgvKigjPBMfYEqOGicaGicaGigLMicHPC0j1BKnVBxbPBgvKksb7cIaGicaGicaGicaVlYbsDw5UAw5NigfZignVBxbPBgvKigjPBMfYEtOGDxnLigrPCMvJDg9YEsb3AgvYzsbIAw5HCNKGAxmGBg9JyxrLzaOGicaGicaGicaGCMv0DxjUihbHDgGUzgLYBMfTzsHWCM9JzxnZlMv4zwnqyxrOktSkicaGicaGicb9igvSC2uGEWOGicaGicaGicaGlY8GuNvUBMLUzYbHCYboB2rLlMPZl0j1BIbZy3jPChq6if9FzgLYBMfTzsbPCYbHBhjLywr5igLUihnYyY9TB2r1BgvZcIaGicaGicaGicaVlYbtBYb3zsbQDxn0ig5LzwqGDg8GywrKihrOzsbTB2r1BguGBMfTzqOGicaGicaGicaGCMv0DxjUif9FzgLYBMfTztSkicaGicaGicb9cIaGicaGih07cGOGicaGicbJB25ZDcb3B3jRAw5NrgLYid0Gz2v0v29YA2LUz0rPCIGPoWOGicaGicaVlYbgB3iGy29TCgLSzwqGyMLUyxj5oIb3B3jRAw5NrgLYigLZigjPBMfYEsbKAxjLy3rVCNKSig5LzwqGzNvSBcbWyxrOihnYyY9TB2r1BgvZl21VzhvSzu5HBwukicaGicaGlY8GrM9YihnJCMLWDdOGD29YA2LUz0rPCIbPCYbHBhjLywr5ihnYyY9TB2r1BgvZlYWGANvZDcbHzgqGBw9KDwXLtMfTzqOGicaGicbJB25ZDcbTB2r1BgvZrgLYid0GAxncDw5dB21WAwXLzaOGicaGicaGid8GCgf0Ac5QB2LUkhDVCMTPBMDeAxiSicDZCMmNlcaNBw9KDwXLCYCSicC','BePqCu0','j107cIaGicaGicaGicaVlYbqzw1Py3uGpsbRB2XVBsbgsYbOywrPCIbUB24TBNvSBdSGBNvSBc91BMrLzMLUzwqG4OAsihnRAxaGkezlig51BgXHyMXLlcb0ywSGywrHihbHCMvUDcKUcIaGicaGicaGicbPzIaOx19MA1zHBcaHpt0GBNvSBcaMjIbFx2zRvMfSice9psb1BMrLzMLUzwqPihSkicaGicaGicaGicaGy29UC3qGx19MA1jLCYa9igf3ywL0ihbVB2WUCxvLCNKOcIaGicaGicaGicaGicaGj1nftevdvcaXiezst00G','ALP0u1y','ihn0AwXSignVBNrHAw5ZicjMAwXLoIiGCMvMzxjLBMnLicG','DgfIBgvoyw1L','zxHWB3j0uxvLCNK','ihn0yxr1CYbJAgfUz2vKoIaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30G4OAsicr7CMvZDwX0lNDVCMTMBg93lM5LD1n0yxr1C31GktSkcIaGicbYzxr1CM4GCMvZlNn0yxr1CYGYmdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbTzxnZywDLoIbGu3rHDhvZignOyw5NzwqGzNjVBsaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30GDg8GjhTYzxn1BhqUD29YA2zSB3CUBMv3u3rHDhvZFwaScIaGicaGigrHDge6ihjLC3vSDc5KyxrHlaOGicaGicb3B3jRzMXVDZOGCMvZDwX0lNDVCMTMBg93laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGy2HHBMDLlxn0yxr1CYa','cGOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','DhLWzq','D29YA2zSB3C','zMLSDgvYCW','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','mtC2nZi1mLDUyuvcCW','Dg9dyw1LBenHC2u','Exj6Aem','cIaGlYOQcIaGicOGrgvSzxrLigrHDgeGD2L0AcbJyxnJywrLrgvSzxrLihn1ChbVCNqkicaGkIbaCgfYyw0GE09IAMvJDh0GB3b0Aw9UCYaTierLBgv0zsbVChrPB25ZihDPDgGGD2HLCMuGy2XHDxnLcIaGicOGqhbHCMfTihTpyMPLy3r9igv2zw50q29UDgv4DcaTiev2zw50igXPzMvJEwnSzsbJB250zxH0icHVChrPB25HBcKkicaGkIbaCMv0DxjUCYb7uhjVBwLZztXpyMPLy3q+FsbezwXLDguGCMvZDwX0cIaGicOVcIaGyxn5BMmGzgvSzxrLrgf0ysHVChrPB25ZlcbLDMvUDenVBNrLEhqGpsbUDwXSksb7cIaGicbJB25ZDcbWB29Sid0GzgiUz2v0ug9VBcGPoWOGicaGy29UC3qGy2XPzw50id0GyxDHAxqGCg9VBc5JB25Uzwn0kcK7cGOGicaGDhj5ihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDcruDjtICPoWOkicaGicaGlY8GrxH0CMfJDcb3AgvYzsbJBgf1C2ukicaGicaGy29UC3qGD2HLCMuGpsbVChrPB25ZlNDOzxjLihX8ifTDoWOGicaGicbPzIaOixDOzxjLihX8ihDOzxjLlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNv2HLCMuGy2XHDxnLigLZihjLCxvPCMvKigzVCIbKzwXLDguGB3bLCMf0Aw9UjYK7cIaGicaGih0kcIaGicaGic8Viej1AwXKifDirvjfignSyxvZzqOGicaGicbSzxqGD2HLCMvdBgf1C2uGpsaNjZSkicaGicaGy29UC3qGCgfYyw1Zid0Gw107cIaGicaGigXLDcbWyxjHBuLUzgv4id0GmtSkcIaGicaGigLMicHbCNjHEs5PC0fYCMf5khDOzxjLksKGEWOGicaGicaGignVBNn0ignVBMrPDgLVBNmGpsb3AgvYzs5TyxaOy29UzgL0Aw9Uid0+ihSkicaGicaGicaGihbHCMfTCY5WDxnOkgnVBMrPDgLVBI52ywX1zsK7cIaGicaGicaGicbYzxr1CM4Gycr7y29UzgL0Aw9UlMTLEx0GpsaKjhTWyxjHBuLUzgv4kYT9ydSkicaGicaGicb9ktSkicaGicaGicb3AgvYzunSyxvZzsa9ignVBMrPDgLVBNmUAM9PBIGNieforcaNktSkicaGicaGFsbLBhnLigLMicH3AgvYzs5JB25KAxrPB25Zksb7cIaGicaGicaGlY8GsgfUzgXLignVBxbSzxGGD2HLCMuGzM9YBwf0cIaGicaGicaGy29UC3qGy29UzgL0Aw9UCYa9ihDOzxjLlMnVBMrPDgLVBNmUBwfWkgnVBMrPDgLVBIa9pIb7cIaGicaGicaGicbWyxjHBxmUChvZAcHJB25KAxrPB24UDMfSDwuPoWOGicaGicaGicaGy29UC3qGB3bLCMf0B3iGpsbJB25KAxrPB24UB3bLCMf0B3iGFhWGjZ0NoWOGicaGicaGicaGCMv0DxjUigaKE2nVBMrPDgLVBI5RzxL9icr7B3bLCMf0B3j9icqKE3bHCMfTsw5KzxGRk31GoWOGicaGicaGih0PoWOGicaGicaGignVBNn0igXVz2LJid0GD2HLCMuUBg9NAwmGFhWGj0forcC7cIaGicaGicaGD2HLCMvdBgf1C2uGpsbJB25KAxrPB25ZlMPVAw4OycaKE2XVz2LJFsbGktSkicaGicaGFqOkicaGicaGAwyGkcf3AgvYzunSyxvZzsKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJBgf1C2uGzM9YBwf0jYK7cIaGicaGih0kcIaGicaGia','y29UC3rYywLUDhm','y2HPBgrtB2z0rgvSzxrL','iJOGEWOGicaGicaGicaGicaIzMLLBgqXiJOGiNzHBhvLmsiScIaGicaGicaGicaGicjMAwvSzdiIoIaIDMfSDwuYiGOGicaGicaGicaGFqOGicaGicaGih0','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','C2vHCMnOq29SDw1UCW','igXPC3q6jYWGzxjYB3iPoWOGicaGAwyGkgvYCM9YlMnVzguGpt09icDjtLzbteLex1Dirvjfx0zjruXejYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgq6icr7zxjYB3iUAw52ywXPzezPzwXKFwaScIaGicaGicaGlI4UkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GEYb2ywXPzezPzwXKCZOGzxjYB3iUDMfSAwrgAwvSzhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kicaGignVBNn0ihn0yxr1C0nVzguGpsbLCNjVCI5ZDgf0DxndB2rLihX8iduWmdSkicaGihjLDhvYBIbYzxmUC3rHDhvZkhn0yxr1C0nVzguPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6ihn0yxr1C0nVzguGpt09idqWmca/icDcywqGuMvXDwvZDcCGoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGC3rHDhvZq29Kzsa9pt0GndaWid8GzxjYB3iUBwvZC2fNzsa6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','l3vWzgf0zsaTie1LBMD1CgrHDguGzgf0ysa','id0GrKfmu0uGqu5eia','C3rYAw5N','cGOGicaGlY8GqNvPBgqGzxzLBNrdB250zxH0ihvUDhvRignVBxbVC2L0zsbOB29RCYaOAMLRysbJB21WB25LBNqGzw5NAw5LihrLCNnLzgLHkqOGicaGBgv0igv2zw50q29UDgv4Dca9ig51BgW7cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGigv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMuScIaGicaGicaGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','ksb7cIaGicaGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDZB2z0lwrLBgv0ztOGy29SDw1Uia','oWOGicaG','oWOGicaGicbJB25ZDcbYzwnHBgn1Bgf0zwrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGCMvJywXJDwXHDgvKvMfSDwvZid0Gw107cIaGicaGigXLDcbYzwnHBgnqBgfJzwHVBgrLCIa9ide7cGOGicaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx2L0zw1Zksb7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2L0zw1Zid0Gjcr7CMvJywXJugXHy2vOB2XKzxiRk31GktSkicaGicaGicbYzwnHBgn1Bgf0zwrwywX1zxmUChvZAcHHBgXjDgvTCY5Szw5NDgGPoWOGicaGicb9cGOGicaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx3f0EsaMjIbJywXJDwXHDgLVBNmUDg90ywXFCxr5lNnVDxjJzsKGEWOGicaGicaGignVBNn0ihf0EuzPzwXKid0Gy2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicaGignVBNn0ihrVDgfSuxr5id0GywXSsxrLBxmUCMvKDwnLkcHZDw0SigL0zw0Pid0+ihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPlcaWktSkicaGicaGicbYzwnHBgn1Bgf0zwrgAwvSzhmUChvZAcHGDg90ywXFCxr5id0Gjcr7CMvJywXJugXHy2vOB2XKzxiRk31GktSkicaGicaGicbYzwnHBgn1Bgf0zwrwywX1zxmUChvZAcH0B3rHBff0EsK7cIaGicaGih0kcIaGicaGia','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzW','AxnbCNjHEq','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','zMLLBgroyw1L','mJmYodvNu3jwsue','lMrLBgv0zsiGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cGOGicaGicaVlYbusurbsYbTzwXHA3vRyw4Gyxv0BY1JywXJDwXHDgLVBIbKAsbLBMrWB2LUDaOGicaGicaVlYbdywXJDwXHDgLVBIbHA2fUigrPBgfRDwTHBIbKAsbnB2rLBcbZzxrLBgfOihnLBxvHig9WzxjHC2KGzgf0ywjHC2uGC2vSzxnHAqOGicaGicaVlYbnB2rLBcbHA2fUifnftevdvcb1BgfUzYbZzw11ysbPDgvTCYbKyw4GAgL0Dw5NihrVDgfSigrHCMKGAgfZAwWGywTOAxikicaGicaGy29UC29Szs5SB2COj0nVBxbVC2L0zvvWzgf0zsbVCgvYyxrPB25ZoICSihSkicaGicaGicbKzwXLDgvFy291BNq6icHVCgvYyxrPB25ZlMrLBgv0zsb8FcbBxsKUBgvUz3rOlaOGicaGicaGihvWzgf0zv9JB3vUDdOGkg9WzxjHDgLVBNmUDxbKyxrLihX8ifTDks5Szw5NDgGScIaGicaGicaGAw5Zzxj0x2nVDw50oIaOB3bLCMf0Aw9UCY5PBNnLCNqGFhWGw10PlMXLBMD0AaOGicaGicb9ktSkicaGih0kicaGia','DhjPBq','jYK7cGOGicaGy29UC3qGCg9VBca9igrIlMDLDfbVB2WOktSkicaGignVBNn0ignSAwvUDca9igf3ywL0ihbVB2WUy29UBMvJDcGPoWOkicaGihrYEsb7cIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNqKvhsu4NktSkcIaGicaGic8VideUieT1BMnPihjVDYbHA3rPzIb5yw5NignVy29RigTYAxrLCMLHlIbgAwX0zxiGAxnFzgvSzxrLzca9iezbtfnfig1LBMnLz2fOcIaGicaGic8VicaGigrVDwjSzsbZB2z0lwrLBgv0zsbKyw4SigjLCNnHBweGrK9sifvqrefursWGBwvUAMfTAw4GC2f0DsbWzw1LBMfUzYbZywf0ihjHy2uUcIaGicaGignVBNn0ihnLBgvJDfbHCMfTCYa9ifTDoWOGicaGicbJB25ZDcb3AgvYzuj1AwX0id0GDgHPCY5IDwLSzenVBxbSzxHxAgvYzunSyxvZzsHJCML0zxjPys53AgvYzsWGC2vSzwn0ugfYyw1ZlcaXktSkicaGicaGy29UC3qGBg9JA1f1zxj5id0Gj1nftevdvca','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','laOGicaGicbJB2X1Bw5gB3jTyxrZoIa','id0G','nJjisuPwv2W','q0r4Eg8','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','jYWkicaGicaGDgfIBgvoyw1LoIaN','sMLoq0m','cI8VieDLBMvYyxrLzcbMCM9TihjLCxvLC3rty29WzsbJB25MAwD1CMf0Aw9UigLUihbHEwXVywqGsLnptGPYB3v0zxiUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGigLMicHYzxeUBwv0Ag9Kice9psaNue9tvcCPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIbUBYbHDxrOignVBNrLEhqGkgvUzhbVAw50ihDPDgHVDxqGyxv0AcbTAwrKBgv3yxjLkqOGigLMicGHCMvXlNvZzxiPihjLDhvYBIbUzxH0kcK7cGOGic8VifnRAxaGD2HLBIb1C2vYigHHCYbIExbHC3mGCM9SzqOGignVBNn0ihvZzxjsB2XLCYa9ihjLCs51C2vYlNjVBgvZihX8ifTDoWOGignVBNn0igj5CgfZC1jVBgvZid0G','ksb8FcbKyxrHlG','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbmB2nRigfJCxvPC2L0Aw9UigzHAwXLzaOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0zHAwXLzcb0BYbHy3f1AxjLigXVy2SNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNuMvZB3vYy2uGyNvZEsCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy2HHBMDPBMCGC3rHDhvZjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSk','jZSkicaGicaG','cIaGicaGic8VignHC2nHzgvezwXLDguGpsb0CNvLoIberuXfveuGy2HPBgqGCMvJB3jKCYbMAxjZDcWGDgHLBIbOzwfKzxikicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NignOAwXKihjLy29YzhmGzNjVBsa','jYWkicaGicaGicaGihrHyMXLtMfTztOGjW','jYWkicaGicaGBw9KDwXLtMfTztOGjW','jYWkicaGicaGicaGihbYAw1HCNLlzxK6ihrOAxmUChjPBwfYEuTLEsWkicaGicaGicaGic4UlIHLDMvUDenVBNrLEhqUywrKAxrPB25HBenVBNrLEhqGFhWGE30PcIaGicaGicaGFsK7cIaGicaGicaGy29UC3qGywz0zxjszxn1BhqGpsbHD2fPDcbJzs5LEgvJDxrLt25bzNrLCKnVBxbVC2L0zsGNAw5Zzxj0jYWGywz0zxjdDhGPoWOGicaGicaGigLMicGHywz0zxjszxn1BhqUC3vJy2vZCYKGEWOGicaGicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0igzHAwXLzdOGjhTHzNrLCLjLC3vSDc5LCNjVCN1GktSkicaGicaGicb9cIaGicaGih0kcIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNq09ntuLujYK7cIaGicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGicaVlYbjBNzHBgLKyxrLignHy2HLihnLDgvSywGGD3jPDguGB3bLCMf0Aw9UigjLCMHHC2LScIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGic4UlMLUC2vYDgvKsgvHzgvYlaOGicaGicaGifTKzxrHAwXlzxLDoIbPBNnLCNrLzeL0zw1ZcIaGicaGih07cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbJCMvHDgvdB21WB3nPDgu6jYWGzxjYB3iPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0GzMLUywXSEsb7cIaGicaGignSAwvUDc5YzwXLyxnLkcK7cIaGicb9cIaGFqO','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','cIaGlYOQcIaGicOGr2v0igzPzwXKig1HChbPBMCGDw50DwSGyMvYyMfNywKGB3bLCMfZAqOGicaQiebYzxr1CM5ZihTpyMPLy3r9iezPzwXKig1HChbPBMCGB2jQzwn0cIaGicOVcIaGz2v0rMLLBgrnyxbWAw5NkcKGEWOGicaGCMv0DxjUihSkicaGicaGywXSrMLLBgrZoIb0AgLZlNzHBgLKrMLLBgrZlaOGicaGicb0zxH0rMLLBgrZoIa','nta5nJe2zKv2q2TU','ih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGj01HC3rLCIbYzwnVCMqGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','iICScIaGicaGicaGzxHHBxbSztOG','jZSkcIaGicaGic8VienVBMzPz3vYyxrPB24GB3b0Aw9UCWOGicaGicbJB25ZDcbSB2DNAw5Nrw5HyMXLzca9ignVBMzPzY5SB2DNAw5Nice9psbMywXZztSkicaGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGicbSB2DNzxiUAw5MBYH7cIaGicaGicaGzxzLBNq6icDTB2r1BgvFC3rHCNrPBMCNlaOGicaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicaGihbVCNqScIaGicaGicaGy29YCZOGChjVy2vZCY5LBNyUq09su19ftKfcteveice9psaNzMfSC2uNlaOGicaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGicbSB2DNAw5NoIbSB2DNAw5Nrw5HyMXLzcWkicaGicaGicbHCgLlzxK6igfWAuTLEvjLCxvPCMvKcIaGicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGicaVlYbdt1jtig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbdt1jtx0voqujmruqGzgfUienpuLnFt1jjr0LouYbKAsaUzw52kqOGicaGicbHChaUDxnLkgnVCNnnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cGOGicaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGicbHChaUDxnLkhnLy3vYAxr5sgvHzgvYCY5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GsLnptIbWyxjZAw5Nig1PzgrSzxDHCMuGzgvUz2fUigvYCM9YigHHBMrSAw5NcIaGicaGigfWCc51C2uOyM9KEvbHCNnLCI5QC29UkhSkicaGicaGicbSAw1PDdOGjZeWBwiNlaOGicaGicaGihzLCMLMEtOGkhjLCsWGCMvZlcbIDwySigvUy29KAw5Nksa9pIb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGzw1WDhKGyNvMzMvYcIaGicaGicaGicbPzIaOyNvMlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGicaGicbYzxr1CM47cIaGicaGicaGicb9cGOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGsLnptI5WyxjZzsHIDwyPoWOGicaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGsLnptIbqyxjZzsbfCNjVCIbMCM9Ticr7CMvXlMLWFtOGjhTLCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKiePtt04GCgf5Bg9HzcCScIaGicaGicaGicaGicaGBwvZC2fNztOGj1rOzsbWyxLSB2fKihnLBNqGAxmGBM90igeGDMfSAwqGsLnptIbMB3jTyxqNlaOGicaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2uScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbku09ojYK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9ksK7cGOGicaGicaVlYbvuKWTzw5JB2rLzcbWyxjZAw5Nig1PzgrSzxDHCMukicaGicaGyxbWlNvZzsHIB2r5ugfYC2vYlNvYBgvUy29KzwqOEWOGicaGicaGigv4DgvUzgvKoIb0CNvLlaOGicaGicaGigXPBwL0oIaNmtbTyICkicaGicaGFsKPoWOkicaGicaGlY8GuMvXDwvZDcbSB2DNAw5Nig1PzgrSzxDHCMuGkfbPBM8TyMfZzwqPcIaGicaGigLMicHSB2DNAw5Nrw5HyMXLzcKGEWOGicaGicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGicaGicaVlYbhzw5LCMf0zsbYzxf1zxn0ieLecIaGicaGicaGicbYzxeUAwqGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lwLKj10GFhWGDxvPzhy3kcK7cIaGicaGicaGicbYzxmUC2v0kcDylvjLCxvLC3qTsuqNlcbYzxeUAwqPoWOkicaGicaGicaGic8VienYzwf0zsbZy29WzwqGBg9Nz2vYihvUDhvRihjLCxvLC3qGAw5PcIaGicaGicaGicbYzxeUBg9Nid0Gy3jLyxrLuMvXDwvZDeXVz2DLCIH7cIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKlaOGicaGicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGicaGihbHDgG6ihjLCs5WyxrOlaOGicaGicaGicaGicbPCdOGCMvXlMLWcIaGicaGicaGicb9ktSkcIaGicaGicaGicaVlYbdyxb0DxjLihn0yxj0ihrPBwukicaGicaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicaGicaGlY8Gtg9NihjLC3bVBNnLigTLDgLRysbZzwXLC2fPcIaGicaGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicaGicaGy29UC3qGw3nLy29UzhmSig5HBM9ZzwnVBMrZxsa9ihbYB2nLC3mUAhj0Aw1Lkhn0yxj0vgLTzsK7cIaGicaGicaGicaGignVBNn0igr1CMf0Aw9UtxmGpsbWyxjZzuzSB2f0kcHZzwnVBMrZicOGmtaWmcaRig5HBM9ZzwnVBMrZic8Gmwu2ks50B0zPEgvKkdiPktSkicaGicaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGicaGicb9ktSkcIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8ViefqssblzxKGDMfSAwrHDgLVBIbTAwrKBgv3yxjLicHJB25ZDgfUDc10Aw1LignVBxbHCMLZB24PcIaGicaGigLMicHHCgLlzxLszxf1AxjLzcKGEWOGicaGicaGignVBNn0ignYExb0BYa9ihjLCxvPCMuOj2nYExb0BYCPoWOGicaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicaGigfWCc51C2uOjY9HCgKNlcaOCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicaGigLMicGHyxbPs2v5ksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbJB25ZDcbWCM92AwrLzeTLEsa9iej1zMzLCI5MCM9TkgfWAuTLEsK7cIaGicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGicaHy3j5ChrVlNrPBwLUz1nHzMvfCxvHBcHLEhbLy3rLzeTLEsWGChjVDMLKzwrlzxKPksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifjHDguGBgLTAxrPBMCGBwLKzgXLD2fYzsaOC3rVCMu6ig1LBw9YEsb1BNr1AYbZAw5NBguGBw9KzsWGuMvKAxmGDw50DwSGy2X1C3rLCIbTB2rLkqOGicaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicaGigfWCc51C2uOjY9HCgKNlcbYyxrLtgLTAxrLCI5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GswrLBxbVDgvUy3KGBwLKzgXLD2fYzsaOChjVDgvJDhmGBxv0yxrPB24Gzw5KCg9PBNrZigzYB20GzhvWBgLJyxrLigv4zwn1DgLVBIKkicaGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicaGigfWCc51C2uOjY9HCgKNlcbPzgvTCg90zw5JEu1PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkicaGicaGFqOkicaGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGicaGyxbWlNvZzsGNl2fWAsCSigjVzhLpChrPB25ZtwLKzgXLD2fYzs5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8Gqxv0BY1SB2fKihbSDwDPBIaOAMLRysbHzgePcIaGicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','iIWGiNzHBhvLiJOGiKfqmJuWnI0WmsiGFqOGicaGicaGicaGicbDlaOGicaGicaGicaGicaIC2vSzwn0iJOGwYjPzciSici','cIaGicbPzIaOixjLCs5IB2r5lNDOzxjLksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcbYzxf1zxn0igzVCM1HDdOGD2HLCMuGCgfYyw1LDgvYigLZihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih1DcIaGicaGicaGFsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbMB3jTyxqGD2HLCMukicaGigLMicGHqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKGjIyGixjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicj3AgvYzsi6ifSkicaGicaGicaGicaGEYaIA2v5iJOGiMLKiIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicaGif0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8Vid09psbfvKvovcbmsuzfq1Ldteu6ig9UqMvMB3jLierftevursa9pt0kicaGigXLDcbVBgreyxrHid0GBNvSBdSkicaGigXLDcbUzxDeyxrHid0GBNvSBdSkicaGignVBNn0ihjLCxvLC3reyxrHid0GCMvXlMjVzhK7cIaGicbSzxqGCMvZCg9UC2veyxrHid0GBNvSBdSkcIaGicaVlYbdzwSGyxbHA2fOigrHDgeGzxHPC3qGC2vIzwX1BsbKzwXLDguGzgfUigfTyMLSig9SzcbKyxrHihvUDhvRigv2zw50igXPzMvJEwnSzqOGicaGlY8GtwvUz2D1BMfRyw4Gu0vmrunuicOGzgfYAsb0ywjLBcb1DgfTysaODgfUCgeGzxHWBgLJAxqGC2vSzwn0ksbRyxjLBMeGzMLLBgroyw1LcIaGicaVlYbIAxnHig1LBMDHBMr1BMCGA29SB20GzgfYAsbkt0LoicHTAxmUignPDhLFBMfTzsKGEwfUzYb0AwrHAYbHzgeGzgKGDgfIzwWGDxrHBwekicaGigLMicHYzxeUyM9KEs53AgvYzsaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIbYzxeUyM9KEs53AgvYzs5Szw5NDgGGpIaWksb7cIaGicaGignVBNn0igzPCNn0q29UzgL0Aw9Uid0GCMvXlMjVzhKUD2HLCMvBmf07cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxHPC3rPBMDeyxrHid0GyxDHAxqG','cGOGicaGicaGihnLDenSyxvZzxmUChvZAcGN','yxzSDeu','cIaGicaVlYbfDMvUDcbSAwzLy3LJBguGDMfYAwfIBgvZcIaGicbSzxqGB2XKrgf0ysa9ig51BgW7cIaGicbSzxqGBMv3rgf0ysa9ig51BgW7cIaGicbJB25ZDcbYzxf1zxn0rgf0ysa9ihjLCs5IB2r5oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGOGicaGlY8Gpt09ieLUDgvNCMf0zwqGvhjHBNnHy3rPB24GzgvUz2fUiev2zw50ieXPzMvJEwnSzsa9pt0kicaGic8Vig9SzerHDgeGzMv0y2GGkYbVBKjLzM9YzsaRig1HAw4GB3bLCMf0Aw9UicSGB25bzNrLCIbKAwvRC2vRDxnPigrHBgfTihnHDhuGDhjHBNnHy3rPB24GC2nVCgukicaGic8VigrPigrHBgfTig1VzgvSlMv4zwn1DgvuCMfUC2fJDgLVBLDPDgHfDMvUDhmOkqOGicaGAwyGkgnVBxbVBMvUDevUz2LUzsaMjIbdB250zxH0qNvPBgrLCIKGEWOGicaGicaVlYbhDw5HA2fUigLUDgvNCMf0zwqGDhjHBNnHy3rPB24GBw9KzwWGzgvUz2fUigv2zw50igXPzMvJEwnSzqOGicaGicb0CNKGEWOGicaGicaGignVBNn0igv2zw50q29UDgv4Dca9ihSkicaGicaGicaGignVBxbVBMvUDevUz2LUztOGy29TCg9Uzw50rw5NAw5LlaOGicaGicaGicaGq29UDgv4Dej1AwXKzxi6ienVBNrLEhrcDwLSzgvYlaOGicaGicaGicaGDgfIBgvoyw1LoIaN','jYWkicaGicaGicbXDwvYEtOGCMvXlMjVzhKScIaGicaGicaGCMvZDwX0q291BNq6ihjLC3vSDc5KyxrHid8GCMvZDwX0lMrHDgeUBgvUz3rOidOGmcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9oWOGicaGFqOkicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGic4UlNjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ig1LBMrHCgf0A2fUigrHDgeG','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFqOGicaGicaGicaGxqOGicaGicaGih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','icaGicaGicaVlYbbDxrVlwnHBgn1Bgf0zsa','ksbKzwXLDguGx19Yw19FC2rdB2XDoYbYzxr1CM4Gx19YoYb9kq','cIaGicaVlYbiyw5KBguGA2H1C3vZihvUDhvRigvYCM9YicjeyxrHihrPzgfRigrPDgvTDwTHBIikicaGigLMicHLCNjVCI5TzxnZywDLid09psaNrgf0ysb0AwrHAYbKAxrLBxvRyw4NihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbMB3vUzcCPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGBwvZC2fNztOGjW','EK1HBKi','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGicbJB25ZDcb0B3rHBefTB3vUDca9igfSBeL0zw1ZlNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGicbJB25ZDcbXDhKGpsboDw1IzxiOAxrLBs4','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','icaGic8VicH3AgvYzs1RzxKGuJe1ksbZzwHPBMDNysb0zxiTChjVEwvRC2KGzM9YBwf0uMvZCg9UC2veyxrHoYbOyxb1CYbKyxjPihjLC3bVBNnLihb1yMXPAWO','j10PoWOGicaGicaGignVBNn0ihvWzgf0zvf1zxj5id0Gj1vqrefursaNicSGD3jPDgvtB3vYy2uGkYaNifnfvcaNicSGC2v0q2XHDxnLCY5QB2LUkcCSicCPicSkicaGicaGicaGicCGv0HfuKuG','cIaGicOVcIaGz2v0tgLZDff1zxj5kg9WDgLVBNmGpsb7FsKGEWOGicaGlY8Gtg9HzcbXDwvYEsbKyxnHCIbKzw5Nyw4GCgXHy2vOB2XKzxiGCMvWBgfJzw1LBNqkicaGia','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbYzwfKAw5Nia','y3jLyxrL','lY8Grw5KCg9PBNqGl2LUzM8GzgLUB25HA3rPzMTHBIb2AweGywn0Aw9UlMLUzM8GpsbMywXZzq','wNP4z1m','cIaGicaVlYbwywXPzgfZAsbKzxrHAwWGAxrLBxmGDw50DwSGBwfZDgvYlwrLDgfPBaOGicaGAwyGkcfKyxrHlG','ywT0Awy','BgvUz3rO','cGOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGzgv0ywLSrMLLBgrZlNb1C2GOA2v5ktSkicaGicaGicaGicaGzgv0ywLSvMfSDwvZlNb1C2GODMfSDwuPoWOGicaGicaGicaGicbKzxrHAwXqBgfJzwHVBgrLCNmUChvZAcHGjcr7zgv0ywLSugXHy2vOB2XKzxjjBMrLEcSRFwaPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGicaGzgv0ywLSugXHy2vOB2XKzxjjBMrLEca9ihrOAxmUx2fWCgvUzenYzwf0zuf1zgL0q29SDw1UCYHKzxrHAwXgAwvSzhmSigrLDgfPBfzHBhvLCYWGzgv0ywLSugXHy2vOB2XKzxjZlcbPDgvTlcbLDMvUDenVBNrLEhqSigrLDgfPBfbSywnLAg9SzgvYsw5KzxGPoWOkicaGicaGicbJB25ZDcbKzxrHAwXjBNnLCNrrDwvYEsa9igakicaGicaGicaGieLou0vsvcbjtLrpicr7zgv0ywLSvgfIBgvoyw1LFsaOjhTKzxrHAwXgAwvSzhmUAM9PBIGNlcaNkx0PcIaGicaGicaGicbwquXvrvmGkcr7zgv0ywLSugXHy2vOB2XKzxjZlMPVAw4OjYWGjYL9kqOGicaGicaGicaGuKvuvvjosu5hicOkicaGicaGicbGoWOkicaGicaGicbJB25ZB2XLlMXVzYGNrxHLy3v0Aw5NigrLDgfPBcbjtLnfuLq6jYWGEYbXDwvYEtOGzgv0ywLSsw5Zzxj0uxvLCNKSihzHBhvLCZOGzgv0ywLSvMfSDwvZih0PoWOGicaGicaGignVBNn0igrLDgfPBfjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHKzxrHAwXjBNnLCNrrDwvYEsWGzgv0ywLSvMfSDwvZktSkicaGicaGicbPBNnLCNrLzeL0zw1ZlNb1C2GOzgv0ywLSuMvZDwX0lNjVD3nBmf0PoWOGicaGicb9cGOGicaGicbJB25ZB2XLlMXVzYHGsw5Zzxj0zwqGjhTPBNnLCNrLzeL0zw1ZlMXLBMD0Ah0Gzgv0ywLSigL0zw0OCYLGktSkcIaGicaGic8Vic0TlsbiB29RoIbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0ic0TlqOGicaGicbPzIaOzxzLBNrdB250zxH0icyMigv2zw50q29UDgv4Dc5JB21WB25LBNrfBMDPBMuPihSkicaGicaGicbJB25ZDcb7ignVBxbVBMvUDevUz2LUztOGy2uSienVBNrLEhrcDwLSzgvYoIbdqIb9id0GzxzLBNrdB250zxH0oWOGicaGicaGignVBNn0igfMDgvYq3r4id0Gq0iUyNvPBgrdB21WB3nPDgvjBNnLCNrbzNrLCKnVBNrLEhqOAgvHzgvYrgf0ysWGAw5Zzxj0zwrizwfKzxiSigLUC2vYDgvKsxrLBxmSihSkicaGicaGicaGihrHyMXLtMfTztOGjW','yMP1y0e'];a0_0x4038=function(){return _0x14a857;};return a0_0x4038();}const a0_0x4a746f=a0_0xd0d7;(function(_0x33b21f,_0x3a5fbf){const _0x1250a3=a0_0xd0d7,_0x5d671d=_0x33b21f();while(!![]){try{const _0x3a95a4=-parseInt(_0x1250a3(0x173))/0x1*(parseInt(_0x1250a3(0xac))/0x2)+parseInt(_0x1250a3(0xbb))/0x3+-parseInt(_0x1250a3(0x8e))/0x4+-parseInt(_0x1250a3(0xa5))/0x5*(-parseInt(_0x1250a3(0x1e7))/0x6)+parseInt(_0x1250a3(0x206))/0x7*(parseInt(_0x1250a3(0x1fe))/0x8)+-parseInt(_0x1250a3(0x15f))/0x9+-parseInt(_0x1250a3(0x1ca))/0xa*(-parseInt(_0x1250a3(0x17a))/0xb);if(_0x3a95a4===_0x3a5fbf)break;else _0x5d671d['push'](_0x5d671d['shift']());}catch(_0x12dc07){_0x5d671d['push'](_0x5d671d['shift']());}}}(a0_0x4038,0xd51d1));const FileUtils=require('../utils/file-utils'),{IS_DELETED_COLUMN,DELETED_AT_COLUMN,DELETED_BY_COLUMN,SOFT_DELETE_COLUMNS,isSoftDeleteEnabled}=require('../dbschema-kit/soft-delete-constants');function softDeleteVisibilityFilter(_0x2351af){const _0x597827=a0_0xd0d7,_0x403dcf={'sFDss':function(_0x172a01,_0x102ce4){return _0x172a01(_0x102ce4);},'LVdeT':'active_only','HfIik':_0x597827(0x123),'CpDuE':'deleted_only'};if(!_0x403dcf['sFDss'](isSoftDeleteEnabled,_0x2351af))return null;const _0x4503a4=_0x2351af['softDelete']&&_0x2351af[_0x597827(0x113)]['visibility']||_0x403dcf['LVdeT'];if(_0x4503a4===_0x403dcf[_0x597827(0x7e)])return null;return _0x4503a4===_0x403dcf[_0x597827(0x203)]?'true':'false';}function assertNoFileReferenceLeftover(_0xa7fb21){const _0x42ad7c=a0_0xd0d7,_0x44a926={'FGUMU':_0x42ad7c(0x1be)},_0x16c031=[[_0x44a926['FGUMU'],_0xa7fb21[_0x42ad7c(0x1be)]],['viewQuery',_0xa7fb21[_0x42ad7c(0x218)]],['masterDetail.detailConfig.detailQuery',_0xa7fb21['masterDetail']&&_0xa7fb21['masterDetail']['detailConfig']&&_0xa7fb21[_0x42ad7c(0xf0)]['detailConfig']['detailQuery']]];for(const [_0x3377d1,_0x40a727]of _0x16c031){if(typeof _0x40a727==='string'&&_0x40a727[_0x42ad7c(0x100)]('file:'))throw new Error('Codegen\x20invariant\x20violation:\x20'+_0x3377d1+_0x42ad7c(0x85)+_0x40a727+_0x42ad7c(0x102)+'Expected\x20expanded\x20SQL\x20string.\x20Check\x20PayloadProcessor.processFileReferences\x20flow.');}}function a0_0xd0d7(_0xb21e0f,_0x569563){_0xb21e0f=_0xb21e0f-0x6c;const _0x403895=a0_0x4038();let _0xd0d7ae=_0x403895[_0xb21e0f];if(a0_0xd0d7['DcCVGF']===undefined){var _0x2aaab2=function(_0x4c375d){const _0x33f59f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3adcca='',_0x4a2aa1='';for(let _0x3e5af1=0x0,_0x244966,_0x3dd989,_0x2b9dd9=0x0;_0x3dd989=_0x4c375d['charAt'](_0x2b9dd9++);~_0x3dd989&&(_0x244966=_0x3e5af1%0x4?_0x244966*0x40+_0x3dd989:_0x3dd989,_0x3e5af1++%0x4)?_0x3adcca+=String['fromCharCode'](0xff&_0x244966>>(-0x2*_0x3e5af1&0x6)):0x0){_0x3dd989=_0x33f59f['indexOf'](_0x3dd989);}for(let _0x128235=0x0,_0x2d6214=_0x3adcca['length'];_0x128235<_0x2d6214;_0x128235++){_0x4a2aa1+='%'+('00'+_0x3adcca['charCodeAt'](_0x128235)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4a2aa1);};a0_0xd0d7['hGMiqS']=_0x2aaab2,a0_0xd0d7['qIiDEs']={},a0_0xd0d7['DcCVGF']=!![];}const _0x1a4630=_0x403895[0x0],_0x322308=_0xb21e0f+_0x1a4630,_0x1522e5=a0_0xd0d7['qIiDEs'][_0x322308];return!_0x1522e5?(_0xd0d7ae=a0_0xd0d7['hGMiqS'](_0xd0d7ae),a0_0xd0d7['qIiDEs'][_0x322308]=_0xd0d7ae):_0xd0d7ae=_0x1522e5,_0xd0d7ae;}function buildValidFieldsString(_0x262467){const _0x43e69f=a0_0xd0d7,_0x10359d={'ZaUZr':',\x0a\x20\x20\x20\x20\x20\x20'},_0x121a5f=(_0x262467['fieldName']||[])[_0x43e69f(0x7c)]();if(isSoftDeleteEnabled(_0x262467))for(const _0x5771f7 of SOFT_DELETE_COLUMNS){if(!_0x121a5f['includes'](_0x5771f7))_0x121a5f['push'](_0x5771f7);}return _0x121a5f['map'](_0x4714eb=>'\x27'+_0x4714eb+'\x27')[_0x43e69f(0x1da)](_0x10359d['ZaUZr']);}function buildFormatResponseDataBody(_0x5b736e){const _0x578c94=a0_0xd0d7,_0x10ca51={'hvDIq':_0x578c94(0x1f1),'FAeXw':'\x20\x20\x20\x20return\x20super.formatResponseData(data);','yqFSh':function(_0x44cf93,_0x4bd0bf){return _0x44cf93(_0x4bd0bf);},'riVAt':function(_0x5d3670,_0x3202fc){return _0x5d3670+_0x3202fc;},'SofEh':function(_0x27e8d3,_0x26cea6){return _0x27e8d3+_0x26cea6;},'WHCzq':_0x578c94(0xcd),'bQstU':_0x578c94(0x121),'WIIZp':'\x20\x20\x20\x20\x20\x20\x20\x20delete\x20formatted[__sdCol];\x0a','CDxxo':'\x20\x20\x20\x20}\x0a','ZwNGc':_0x578c94(0x1d1)},_0x29b0a9=_0x10ca51['hvDIq']+_0x10ca51['FAeXw'];if(!_0x10ca51['yqFSh'](isSoftDeleteEnabled,_0x5b736e))return _0x29b0a9;return _0x10ca51[_0x578c94(0x1f8)](_0x10ca51['riVAt'](_0x10ca51[_0x578c94(0x108)](_0x10ca51['SofEh'](_0x10ca51[_0x578c94(0x1f8)]('\x20\x20\x20\x20//\x20Gunakan\x20parent\x20method\x20yang\x20sudah\x20include\x20datetime\x20formatting\x0a','\x20\x20\x20\x20const\x20formatted\x20=\x20super.formatResponseData(data);\x0a'),_0x578c94(0x197))+_0x10ca51['WHCzq'],'\x20\x20\x20\x20//\x20(/read,\x20/first,\x20datatables,\x20create,\x20update)\x20di\x20satu\x20chokepoint,\x20tanpa\x20ubah\x20BaseModel/getReadQuery.\x0a'),_0x10ca51[_0x578c94(0x11a)])+('\x20\x20\x20\x20\x20\x20for\x20(const\x20__sdCol\x20of\x20'+JSON[_0x578c94(0x15d)](SOFT_DELETE_COLUMNS)+')\x20{\x0a')+_0x10ca51[_0x578c94(0xe7)],_0x578c94(0x1c4))+_0x10ca51[_0x578c94(0xad)]+_0x10ca51[_0x578c94(0x13f)];}function buildAuditColumnsSection(_0x6d3b67,_0x3ce3ef){const _0x3c3f4b=a0_0xd0d7,_0x459027={'cZiMd':function(_0x2f3f3e,_0x217ed7){return _0x2f3f3e!==_0x217ed7;},'bjucA':'createdAt','YoFiL':'createdBy','BzltZ':_0x3c3f4b(0x1fa),'vAijJ':_0x3c3f4b(0x150)};if(!(_0x3c3f4b(0x17e)in _0x6d3b67))return'';const _0xdbc6c6=_0x6d3b67['auditColumns'];if(_0xdbc6c6===![]||_0xdbc6c6===null)return'\x0a'+_0x3ce3ef+_0x3c3f4b(0x15b)+_0x3ce3ef+'this.auditColumns\x20=\x20null;\x0a';if(typeof _0xdbc6c6===_0x3c3f4b(0x12d)&&!Array['isArray'](_0xdbc6c6)){const _0x266d5e=[_0x459027[_0x3c3f4b(0xd8)],_0x459027[_0x3c3f4b(0x152)],_0x459027['BzltZ'],_0x459027[_0x3c3f4b(0xf8)]],_0x4bfe42={};_0x266d5e['forEach'](_0x542de6=>{const _0x3a18d3=_0x3c3f4b;if(_0x459027[_0x3a18d3(0x195)](_0xdbc6c6[_0x542de6],undefined))_0x4bfe42[_0x542de6]=_0xdbc6c6[_0x542de6];});const _0xd109ab=JSON['stringify'](_0x4bfe42,null,0x2)['split']('\x0a')[_0x3c3f4b(0x242)]((_0x325b70,_0x391fae)=>_0x391fae===0x0?_0x325b70:_0x3ce3ef+_0x325b70)[_0x3c3f4b(0x1da)]('\x0a');return'\x0a'+_0x3ce3ef+_0x3c3f4b(0x1e0)+_0x3ce3ef+_0x3c3f4b(0x255)+_0xd109ab+';\x0a';}throw new Error(_0x3c3f4b(0xa1)+_0x6d3b67[_0x3c3f4b(0x86)]+':\x20must\x20be\x20false,\x20null,\x20or\x20object');}function buildSearchColumnsCode(_0x107a94){const _0x30372c=a0_0xd0d7;if(!_0x107a94[_0x30372c(0x96)]||!Array[_0x30372c(0xa0)](_0x107a94['searchColumns']))return'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20definisi\x20kolom\x20yang\x20dapat\x20dicari\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Kolom\x20yang\x20dapat\x20dicari\x0a\x20\x20\x20*/\x0a\x20\x20getSearchableColumns()\x20{\x0a\x20\x20\x20\x20return\x20'+JSON['stringify'](_0x107a94[_0x30372c(0x96)],null,0x4)+_0x30372c(0x1bf);}function buildFiltersCode(_0x32a3b4){const _0x11c0f4=a0_0xd0d7;if(!_0x32a3b4[_0x11c0f4(0x8c)]||!Array['isArray'](_0x32a3b4['filters']))return'';return _0x11c0f4(0x222)+JSON['stringify'](_0x32a3b4[_0x11c0f4(0x8c)],null,0x4)+_0x11c0f4(0x143);}function buildDefaultScopeSQL(_0x13dd6d,_0x34356c='a.'){const _0x21ae71=a0_0xd0d7,_0x1785eb={'QQVwE':function(_0x3100e5,_0x279390){return _0x3100e5!==_0x279390;},'tsjEM':'object','zManB':function(_0xb9890b,_0x103f20){return _0xb9890b===_0x103f20;},'zVmuI':_0x21ae71(0x22d),'vrfqK':'number','VzyAf':_0x21ae71(0x1d2)};if(!_0x13dd6d||_0x1785eb[_0x21ae71(0x20a)](typeof _0x13dd6d,_0x1785eb[_0x21ae71(0x1d3)]))return'';const _0x189252=[];for(const [_0x1ec9f0,_0x1ff0df]of Object[_0x21ae71(0x185)](_0x13dd6d)){if(_0x1785eb[_0x21ae71(0xca)](typeof _0x1ff0df,_0x1785eb['zVmuI']))_0x189252['push'](''+_0x34356c+_0x1ec9f0+'\x20=\x20'+_0x1ff0df);else{if(_0x1785eb[_0x21ae71(0xca)](typeof _0x1ff0df,'string'))_0x189252['push'](''+_0x34356c+_0x1ec9f0+'\x20=\x20\x27'+_0x1ff0df['replace'](/'/g,'\x27\x27')+'\x27');else typeof _0x1ff0df===_0x1785eb['vrfqK']&&_0x189252[_0x21ae71(0x13a)](''+_0x34356c+_0x1ec9f0+_0x21ae71(0xab)+_0x1ff0df);}}return _0x189252['join'](_0x1785eb['VzyAf']);}function buildRequestScopeMiddleware(_0x225a85,_0x4d27c6){const _0xd44f90=a0_0xd0d7,_0x4b915d={'PpuBu':function(_0x32bedf,_0xc6862){return _0x32bedf||_0xc6862;}};if(!_0x225a85['requestScope'])return'';const {column:_0x36374d,source:_0x4d0ba8,bypassRoles:_0x2862f3}=_0x225a85[_0xd44f90(0x25e)],_0x392a03=JSON[_0xd44f90(0x15d)](_0x2862f3||[]),_0xc7b496=_0x4b915d['PpuBu'](_0x4d27c6,'')['replace'](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x36374d+_0xd44f90(0x1f3)+_0x4d0ba8+_0xd44f90(0xb1)+_0x392a03+_0xd44f90(0x71)+_0x4d0ba8+';\x0a\x20\x20if\x20(scopeValue\x20===\x20undefined\x20||\x20scopeValue\x20===\x20null)\x20{\x0a\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27Request\x20scope\x20value\x20not\x20available\x20in\x20user\x20context\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Expose\x20scope\x20info\x20for\x20route\x20handlers\x20(ownership\x20verification\x20in\x20/first,\x20/update,\x20/update-composite)\x0a\x20\x20req._requestScope\x20=\x20{\x20column:\x20\x27'+_0x36374d+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x36374d+_0xd44f90(0x19f)+_0x36374d+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20UPDATE:\x20force\x20scope\x20column\x20value\x20(ownership\x20verified\x20in\x20/update\x20handler)\x0a\x20\x20if\x20(endpoint\x20===\x20\x27update\x27)\x20{\x0a\x20\x20\x20\x20req.body[\x27'+_0x36374d+_0xd44f90(0x257)+_0xc7b496+_0xd44f90(0x1af)+_0x36374d+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildSoftDeleteReadMiddleware(_0x7b3d3f){const _0x18256e=a0_0xd0d7,_0x3c4a13={'SYDmZ':_0x18256e(0x1f2)},_0x480080=softDeleteVisibilityFilter(_0x7b3d3f);if(_0x480080===null)return'';const _0x52144c=_0x7b3d3f['softDelete']&&_0x7b3d3f[_0x18256e(0x113)][_0x18256e(0xfb)]||_0x3c4a13[_0x18256e(0x15a)];return'\x0a//\x20───\x20Soft-Delete\x20Read\x20Filter\x20Middleware\x20(R15)\x20─────────────────────\x0a//\x20Default\x20Invisible:\x20inject\x20filter\x20\x27'+IS_DELETED_COLUMN+_0x18256e(0x17b)+_0x52144c+'\x27).\x20Config-driven\x20(tanpa\x20body\x20options),\x20diterapkan\x20tanpa\x0a//\x20syarat\x20auth\x20(visibility\x20filter,\x20BUKAN\x20RLS\x20—\x20karena\x20itu\x20tidak\x20ada\x20guard\x20!req.user).\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20!==\x20\x27POST\x27)\x20return\x20next();\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20if\x20(![\x27datatables\x27,\x20\x27read\x27,\x20\x27lookup\x27,\x20\x27aggregate\x27].includes(endpoint))\x20return\x20next();\x0a\x0a\x20\x20const\x20softDeleteCondition\x20=\x20{\x20key:\x20\x27'+IS_DELETED_COLUMN+_0x18256e(0x239)+_0x480080+'\x20};\x0a\x0a\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20req.body.where\x20=\x20[softDeleteCondition];\x0a\x20\x20}\x20else\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20req.body.where.unshift(softDeleteCondition);\x0a\x20\x20}\x20else\x20if\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions))\x20{\x0a\x20\x20\x20\x20const\x20originalLogic\x20=\x20req.body.where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20if\x20(originalLogic\x20===\x20\x27AND\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where.conditions.unshift(softDeleteCondition);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logic:\x20\x27AND\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20softDeleteCondition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20logic:\x20originalLogic,\x20conditions:\x20req.body.where.conditions\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildLookupOverrideCode(_0x386b23,_0x2b468a){const _0x2637c8=a0_0xd0d7,_0x5fabce={'eFktk':function(_0x3b8ae2,_0x22aa32){return _0x3b8ae2+_0x22aa32;},'hFtni':function(_0x4af61a,_0x3fbe6e){return _0x4af61a+_0x3fbe6e;},'qeuFF':function(_0x2de8a7,_0x51a0d1){return _0x2de8a7+_0x51a0d1;},'lJPqM':'\x20=\x20'},_0xfe8c7e=FileUtils['detectTextColumn'](_0x2b468a[_0x2637c8(0xa4)]||[]),_0x12b7fa=FileUtils['toPascalCase'](_0x386b23),_0x362b83=_0x2b468a['_extendedFields']||{'all':_0x2b468a[_0x2637c8(0xa4)]||[]},_0x5cbaef=_0x2b468a['primaryKey']||_0x2b468a[_0x2637c8(0xa4)]&&_0x2b468a[_0x2637c8(0xa4)][0x0]||'id',_0x548738=_0x2b468a['_fieldProjections']||{},_0x1bb5ce=_0x548738[_0x2637c8(0x117)]||_0x2b468a[_0x2637c8(0xa4)]||[],_0xd17dfb=_0x2b468a[_0x2637c8(0x7d)]&&_0x2b468a['defaultScope']['lookup']?buildDefaultScopeSQL(_0x2b468a[_0x2637c8(0x7d)][_0x2637c8(0x226)]):'',_0x319966=((()=>{const _0x17d7f5=_0x2637c8,_0xbf0c26=softDeleteVisibilityFilter(_0x2b468a);return _0xbf0c26!==null?_0x5fabce[_0x17d7f5(0x1e1)](_0x5fabce[_0x17d7f5(0x1b4)](_0x5fabce['qeuFF']('a.',IS_DELETED_COLUMN),_0x5fabce[_0x17d7f5(0x82)]),_0xbf0c26):'';})()),_0x5a0433=[_0xd17dfb,_0x319966]['filter'](Boolean)[_0x2637c8(0x1da)]('\x20AND\x20');return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20FROM\x20clause\x20untuk\x20lookup\x20berdasarkan\x20prioritas\x20resolusi\x20sumber\x20data\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(konsisten\x20dengan\x20/read\x20dan\x20/first)\x0a\x20\x20\x20*\x20@returns\x20{string}\x20FROM\x20clause\x20dengan\x20alias\x20\x27a\x27\x0a\x20\x20\x20*/\x0a\x20\x20getLookupSource()\x20{\x0a\x20\x20\x20\x20const\x20readQuery\x20=\x20this.getReadQuery();\x0a\x20\x20\x20\x20const\x20simpleQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20if\x20(readQuery.trim()\x20!==\x20simpleQuery)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20viewName\x20atau\x20viewQuery\x20aktif\x20—\x20bungkus\x20sebagai\x20subquery\x0a\x20\x20\x20\x20\x20\x20return\x20\x27(\x27\x20+\x20readQuery\x20+\x20\x27)\x20a\x27;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20this.readSource\x20+\x20\x27\x20a\x27;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0xfe8c7e+_0x2637c8(0x19d)+_0x5cbaef+',\x20'+_0xfe8c7e+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20`\x20WHERE\x20upper(a.'+_0xfe8c7e+')\x20LIKE\x20upper($1)'+(_0xd17dfb?_0x2637c8(0x1d2)+_0xd17dfb:'')+(_0x319966?_0x2637c8(0x1d2)+_0x319966:'')+'\x20ORDER\x20BY\x20a.'+_0xfe8c7e+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x5cbaef+_0x2637c8(0x209)+_0xfe8c7e+_0x2637c8(0x1de)+_0x12b7fa+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Dynamic\x20lookup\x20dengan\x20support\x20filtering\x20tambahan\x20dan\x20pencarian\x20multi-field\x0a\x20\x20\x20*\x20@param\x20{string}\x20search\x20-\x20Kata\x20kunci\x20pencarian\x0a\x20\x20\x20*\x20@param\x20{Object}\x20extraFilters\x20-\x20Filter\x20tambahan\x20(misal:\x20company_id)\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getLookupDataDynamic(search,\x20extraFilters\x20=\x20{})\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20custom\x20lookup\x20config\x20jika\x20ada,\x20fallback\x20ke\x20textFields\x20detection\x0a\x20\x20\x20\x20\x20\x20const\x20lookupConfig\x20=\x20'+JSON['stringify'](_0x2b468a[_0x2637c8(0x21b)]||null)+_0x2637c8(0x1cf)+JSON['stringify'](_0x362b83[_0x2637c8(0x1e8)]||[_0xfe8c7e])+_0x2637c8(0x10e)+(_0xd17dfb?'\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0xd17dfb+'`);\x0a':'')+(_0x319966?'\x0a\x20\x20\x20\x20\x20\x20//\x20Soft-delete\x20visibility\x20scope\x20(R15)\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0x319966+'`);\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20//\x20Add\x20search\x20conditions\x20untuk\x20text\x20fields\x0a\x20\x20\x20\x20\x20\x20if\x20(search\x20&&\x20search.trim())\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20searchConditions\x20=\x20textFields.map(field\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`upper(a.${field})\x20LIKE\x20upper($${paramIndex++})`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`(${searchConditions.join(\x27\x20OR\x20\x27)})`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20search\x20parameter\x20for\x20each\x20text\x20field\x0a\x20\x20\x20\x20\x20\x20\x20\x20textFields.forEach(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${search.trim()}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Add\x20extra\x20filters\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(extraFilters))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20&&\x20'+JSON['stringify'](_0x1bb5ce)+'.includes(key))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`a.${key}\x20=\x20$${paramIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20final\x20query\x20-\x20gunakan\x20custom\x20select\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20idField\x20=\x20lookupConfig\x20?\x20lookupConfig.idField\x20:\x20\x27'+_0x5cbaef+_0x2637c8(0x158)+_0x5cbaef+_0x2637c8(0x1f0)+_0x12b7fa+_0x2637c8(0x236)+_0xfe8c7e+'\x27\x20yang\x20benar\x0a\x20\x20\x20*\x20@param\x20{string}\x20selectedTag\x20-\x20ID\x20yang\x20dipilih\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Array\x20objek\x20hasil\x20lookup\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getStaticLookupData(selectedTag)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20(if\x20enabled)\x20-\x20cache\x20tanpa\x20selectedTag\x20karena\x20data\x20sama\x0a\x20\x20\x20\x20\x20\x20const\x20cacheOptions\x20=\x20{\x20type:\x20\x27static\x27\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedLookup(cacheOptions,\x20\x27static\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Apply\x20selectedTag\x20to\x20cached\x20result\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.id\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x20...item,\x20selected:\x20\x27true\x27\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x20id:\x20item.id,\x20text:\x20item.text\x20};\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20\x27SELECT\x20'+_0x5cbaef+',\x20'+_0xfe8c7e+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20`'+(_0x5a0433?_0x2637c8(0x165)+_0x5a0433:'')+_0x2637c8(0x1db)+_0xfe8c7e+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20result\x20tanpa\x20selected\x20flag\x0a\x20\x20\x20\x20\x20\x20const\x20cacheData\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x5cbaef+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0xfe8c7e+_0x2637c8(0xf5)+_0x5cbaef+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0xfe8c7e+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.'+_0x5cbaef+'\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.selected\x20=\x20\x27true\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getStaticLookupData\x20('+_0x12b7fa+_0x2637c8(0x24d)+_0x5cbaef+'\x27,\x20\x27'+_0xfe8c7e+'\x27];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Parse\x20dan\x20validasi\x20select\x20columns\x20untuk\x20support\x20SQL\x20expressions\x0a\x20\x20\x20\x20\x20\x20const\x20validTextFields\x20=\x20'+JSON['stringify'](_0x362b83[_0x2637c8(0x1e8)]||[])+';\x0a\x20\x20\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x5cbaef+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0xfe8c7e+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x5cbaef+'\x27.toLowerCase())\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x20//\x20primary\x20key\x20sudah\x20ada\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20ada\x20SQL\x20expression\x20dengan\x20alias\x20(menggunakan\x20AS)\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20aliasRegex\x20=\x20new\x20RegExp(\x27(.+)\x5c\x5cs+as\x5c\x5cs+(\x5c\x5cw+)$\x27,\x20\x27i\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20aliasMatch\x20=\x20column.match(aliasRegex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(aliasMatch)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20expression\x20=\x20aliasMatch[1].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20alias\x20=\x20aliasMatch[2].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${expression}\x20AS\x20${alias}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20aliasField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x20//\x20gunakan\x20yang\x20pertama\x20sebagai\x20text\x20field\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20simple\x20field\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(validTextFields.includes(column)\x20||\x20column\x20===\x20\x27'+_0xfe8c7e+'\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x20//\x20gunakan\x20yang\x20pertama\x20sebagai\x20text\x20field\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Jika\x20bukan\x20recognized\x20field,\x20masih\x20tambahkan\x20(mungkin\x20computed\x20column)\x0a\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Bangun\x20query\x20SELECT\x20dengan\x20support\x20expressions\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${selectClause}\x20FROM\x20${this.getLookupSource()}\x20'+(_0xd17dfb?_0x2637c8(0x1ee)+_0xd17dfb+'\x20':'')+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Bangun\x20WHERE\x20clause\x20jika\x20ada\x20dan\x20tidak\x20kosong\x0a\x20\x20\x20\x20\x20\x20if\x20((options.where\x20&&\x20Array.isArray(options.where)\x20&&\x20options.where.length\x20>\x200)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(options.where\x20&&\x20options.where.conditions\x20&&\x20Array.isArray(options.where.conditions)\x20&&\x20options.where.conditions.length\x20>\x200))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex,\x20\x27\x27,\x20this.readableFields);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`'+(_0xd17dfb?_0x2637c8(0x1eb):'WHERE\x20')+'${whereResult.sql}'+(_0xd17dfb?')':'')+_0x2637c8(0x1c9)+_0x5cbaef+'\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(direction\x20!==\x20\x27ASC\x27\x20&&\x20direction\x20!==\x20\x27DESC\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${column}\x20${direction}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}).filter(Boolean);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(orderParts.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27No\x20valid\x20sort\x20columns\x20provided\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${orderParts.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Order\x20by\x20text\x20field\x20(gunakan\x20alias\x20jika\x20ada)\x20-\x20default\x20behavior\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${aliasField\x20||\x20textField}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20DEBUG\x20'+_0x386b23['toUpperCase']()+_0x2637c8(0x6e)+_0x5cbaef+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[textFieldName]\x20||\x20item.'+_0xfe8c7e+'\x20||\x20item.name\x20||\x20item.code\x20||\x20item.description\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter\x20('+_0x12b7fa+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}';}function buildAdvancedQuerySection(_0x268afe){const _0x52a349=a0_0xd0d7,_0x5d76c6={'vKuPy':'//\x20No\x20advanced\x20queries\x20defined'},_0x38334b=_0x268afe['advancedQueries']||{};if(Object['keys'](_0x38334b)['length']===0x0)return _0x5d76c6['vKuPy'];return'\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20const\x20queryDefinitions\x20=\x20{\x0a'+Object[_0x52a349(0x185)](_0x38334b)['map'](([_0x52d90b,_0x184e83])=>_0x52a349(0x16b)+_0x52d90b+_0x52a349(0x1c7)+JSON['stringify'](_0x184e83))[_0x52a349(0x1da)](',\x0a')+'\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[queryName,\x20querySource]\x20of\x20Object.entries(queryDefinitions))\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Cek\x20apakah\x20string\x20dimulai\x20dengan\x20\x22file:\x22\x20untuk\x20menentukan\x20apakah\x20ini\x20path\x20file\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20querySource\x20===\x20\x27string\x27\x20&&\x20querySource.startsWith(\x27file:\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ambil\x20path\x20relatif\x20dari\x20querySource\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20relativePath\x20=\x20querySource.replace(\x27file:\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20filePath\x20=\x20path.join(__dirname,\x20relativePath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Attempting\x20to\x20read\x20template\x20file\x20${queryName}\x20from\x20path:\x20${filePath}`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(filePath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20fs.readFileSync(filePath,\x20\x27utf8\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20template\x20${queryName}\x20loaded\x20successfully\x20from\x20file:\x20${relativePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`SQL\x20template\x20file\x20${queryName}\x20not\x20found:\x20${filePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Jika\x20bukan\x20path\x20file,\x20gunakan\x20string\x20SQL\x20langsung\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20querySource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20template\x20${queryName}\x20loaded\x20successfully\x20from\x20SQL\x20string`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20SQL\x20template\x20${queryName}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}';}function buildQueryLoadingCode(_0x3b02d1,_0x14bde6){const _0x521d76=a0_0xd0d7;if(!_0x3b02d1)return _0x521d76(0x234);const _0x43c864=_0x3b02d1['replace'](/\$\{tableName\}/g,_0x521d76(0x183))['replace'](/\$\{this\.table\}/g,'${payload.tableName\x20||\x20\x22undefined_table\x22}');return'let\x20baseQuery\x20=\x20`'+_0x43c864+_0x521d76(0x79);}function buildFieldMappingCode(_0x35f3f3){const _0x64a3c3=a0_0xd0d7,_0x666a=_0x35f3f3[_0x64a3c3(0x1b3)]||{};return _0x64a3c3(0xba)+JSON['stringify'](_0x666a[_0x64a3c3(0x1e8)]||[])+_0x64a3c3(0xfa)+JSON[_0x64a3c3(0x15d)](_0x666a['dateFields']||[])+',\x0a\x20\x20\x20\x20\x20\x20requiredFields:\x20'+JSON['stringify'](_0x666a[_0x64a3c3(0x201)]||[])+_0x64a3c3(0x24f)+(_0x666a['primaryTextField']||'name')+'\x27,\x0a\x20\x20\x20\x20\x20\x20searchableFields:\x20this.getSearchableColumns\x20?\x20this.getSearchableColumns().map(col\x20=>\x20col.name)\x20:\x20[]\x0a\x20\x20\x20\x20};\x0a\x20\x20}';}function _generateValidationConfig(_0x46cb75){const _0x33c72f=a0_0xd0d7,_0x3bcc1b={'esEaa':_0x33c72f(0x118)};if(!_0x46cb75||!Array['isArray'](_0x46cb75)||_0x46cb75['length']===0x0)return _0x3bcc1b[_0x33c72f(0x1df)];const _0x38343e=_0x46cb75['map'](_0x1a4860=>{const _0x164e66=_0x33c72f,_0x146b93=JSON['stringify'](_0x1a4860[_0x164e66(0x92)]||{},null,0x6)['replace'](/\n/g,_0x164e66(0x1b7));return'\x20\x20\x20\x20\x20\x20\x27'+_0x1a4860['name']+_0x164e66(0x1bd)+_0x1a4860['type']+_0x164e66(0x1ef)+_0x146b93+'\x0a\x20\x20\x20\x20\x20\x20}';})[_0x33c72f(0x1da)](',\x0a');return _0x33c72f(0x20c)+_0x38343e+'\x0a\x20\x20\x20\x20};\x0a';}function _generateValidateFieldConstraints(){return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20field\x20dengan\x20constraints\x0a\x20\x20\x20*\x20@param\x20{string}\x20fieldName\x20-\x20Nama\x20field\x0a\x20\x20\x20*\x20@param\x20{*}\x20value\x20-\x20Nilai\x20field\x0a\x20\x20\x20*\x20@param\x20{string}\x20operation\x20-\x20Operation\x20(insert/update)\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Validation\x20result\x20{valid,\x20errors,\x20warnings,\x20sanitized}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20validateFieldConstraints(fieldName,\x20value,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20if\x20(!config)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20true,\x20sanitized:\x20value,\x20errors:\x20[],\x20warnings:\x20[]};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20true,\x0a\x20\x20\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x20\x20\x20\x20const\x20fieldType\x20=\x20config.type\x20||\x20\x27string\x27;\x0a\x0a\x20\x20\x20\x20//\x201.\x20Check\x20required\x0a\x20\x20\x20\x20if\x20(constraints.required\x20&&\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(constraints.autoGenerate\x20||\x20constraints.primaryKey))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20else\x20if\x20(operation\x20===\x20\x27update\x27\x20&&\x20value\x20===\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.requiredMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20is\x20required`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.valid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x202.\x20Type-specific\x20validation\x0a\x20\x20\x20\x20switch\x20(fieldType)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27string\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27text\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20text\x20divalidasi\x20identik\x20dengan\x20string\x20(unbounded\x20string);\x20hanya\x20berbeda\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20pemetaan\x20UI\x20(→\x20textarea),\x20bukan\x20aturan\x20validasi\x20data.\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20await\x20this._validateStringConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27integer\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27decimal\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27number\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateNumberConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27datetime\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27timestamp\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27time\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateDateConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27boolean\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateBooleanConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27uuid\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateUuidConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27array\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateArrayConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27json\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateJsonConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20string\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20async\x20_validateStringConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20String(value);\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field\x20—\x20tidak\x20relevan\x20untuk\x20password)\x0a\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Pattern\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Format\x20validation\x20(email,\x20phone,\x20url,\x20uuid)\x0a\x20\x20\x20\x20if\x20(constraints.format)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20formatValid\x20=\x20this._validateFormat(sanitized,\x20constraints.format);\x0a\x20\x20\x20\x20\x20\x20if\x20(!formatValid.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20${constraints.format}\x20format`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Enum\x20validation\x0a\x20\x20\x20\x20if\x20(constraints.enum\x20&&\x20Array.isArray(constraints.enum))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!constraints.enum.includes(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.enumMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20one\x20of:\x20${constraints.enum.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Skip\x20unique\x20constraint\x20-\x20database\x20akan\x20handle\x20via\x20UNIQUE\x20index\x0a\x20\x20\x20\x20//\x20if\x20(constraints.unique)\x20{\x20/*\x20handled\x20by\x20database\x20*/\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass,\x20sebelum\x20return)\x0a\x20\x20\x20\x20if\x20(isHashField\x20&&\x20errors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20number\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateNumberConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20to\x20number\x0a\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20parseFloat(sanitized);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(isNaN(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20number`);\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Min/Max\x0a\x20\x20\x20\x20if\x20(constraints.min\x20!==\x20undefined\x20&&\x20sanitized\x20<\x20constraints.min)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.min}`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.max\x20!==\x20undefined\x20&&\x20sanitized\x20>\x20constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.max}`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Positive/Negative\x0a\x20\x20\x20\x20if\x20(constraints.positive\x20&&\x20sanitized\x20<=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.positiveMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20positive`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.negative\x20&&\x20sanitized\x20>=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.negativeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20negative`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Integer\x20check\x0a\x20\x20\x20\x20if\x20(constraints.integer\x20&&\x20!Number.isInteger(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.integerMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20an\x20integer`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Precision/Scale\x20for\x20decimal\x0a\x20\x20\x20\x20if\x20(constraints.precision\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20decimals\x20=\x20(sanitized.toString().split(\x27.\x27)[1]\x20||\x20\x27\x27).length;\x0a\x20\x20\x20\x20\x20\x20if\x20(decimals\x20>\x20constraints.precision)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.precisionMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20at\x20most\x20${constraints.precision}\x20decimal\x20places`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20date\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateDateConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20//\x20Basic\x20date\x20validation\x20(more\x20complex\x20parsing\x20handled\x20by\x20DateTimeParser\x20in\x20basemodel)\x0a\x20\x20\x20\x20//\x20Min/Max\x20date\x20range\x0a\x20\x20\x20\x20if\x20(constraints.min\x20||\x20constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20dateValue\x20=\x20new\x20Date(sanitized);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isNaN(dateValue.getTime()))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20date`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.min)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20minDate\x20=\x20new\x20Date(constraints.min);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(dateValue\x20<\x20minDate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20on\x20or\x20after\x20${constraints.min}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20maxDate\x20=\x20new\x20Date(constraints.max);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(dateValue\x20>\x20maxDate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20on\x20or\x20before\x20${constraints.max}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20date`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Before/After\x20relasi\x20akan\x20divalidasi\x20di\x20_validateCrossFieldConstraints\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20boolean\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateBooleanConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20if\x20(constraints.strict)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20!==\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Terima\x20hanya\x20set\x20kanonik\x20(selaras\x20MySQL/Oracle/SQLite):\x20true/\x27true\x27/1/\x271\x27\x0a\x20\x20\x20\x20\x20\x20//\x20dan\x20false/\x27false\x27/0/\x270\x27.\x20Nilai\x20lain\x20DITOLAK,\x20bukan\x20dipaksa\x20via\x20Boolean()\x0a\x20\x20\x20\x20\x20\x20//\x20(yang\x20membuat\x20string\x20non-kosong\x20seperti\x20\x27not-a-boolean\x27\x20diam-diam\x20jadi\x0a\x20\x20\x20\x20\x20\x20//\x20true).\x20Menjamin\x201\x20input\x20->\x20behavior\x20identik\x20lintas\x20dialect.\x0a\x20\x20\x20\x20\x20\x20if\x20(sanitized\x20===\x20true\x20||\x20sanitized\x20===\x20\x27true\x27\x20||\x20sanitized\x20===\x201\x20||\x20sanitized\x20===\x20\x271\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(sanitized\x20===\x20false\x20||\x20sanitized\x20===\x20\x27false\x27\x20||\x20sanitized\x20===\x200\x20||\x20sanitized\x20===\x20\x270\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20UUID\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateUuidConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20const\x20uuidRegex\x20=\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\x0a\x0a\x20\x20\x20\x20if\x20(!uuidRegex.test(value))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20UUID`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20array\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateArrayConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20an\x20array`);\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20minItems/maxItems\x0a\x20\x20\x20\x20if\x20(constraints.minItems\x20&&\x20value.length\x20<\x20constraints.minItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20at\x20least\x20${constraints.minItems}\x20items`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.maxItems\x20&&\x20value.length\x20>\x20constraints.maxItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxItems}\x20items`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20uniqueItems\x0a\x20\x20\x20\x20if\x20(constraints.uniqueItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20unique\x20=\x20[...new\x20Set(value)];\x0a\x20\x20\x20\x20\x20\x20if\x20(unique.length\x20!==\x20value.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.uniqueItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20unique\x20items`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20JSON\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateJsonConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20jika\x20string\x0a\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20JSON.parse(sanitized);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20valid\x20JSON`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20JSON\x20Schema\x20validation\x20bisa\x20ditambahkan\x20di\x20sini\x20jika\x20diperlukan\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20format\x20(email,\x20phone,\x20url,\x20uuid)\x0a\x20\x20\x20*/\x0a\x20\x20_validateFormat(value,\x20format)\x20{\x0a\x20\x20\x20\x20const\x20patterns\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20email:\x20/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/,\x0a\x20\x20\x20\x20\x20\x20phone:\x20/^[\x5cd\x5cs\x5c-\x5c+\x5c(\x5c)]+$/,\x0a\x20\x20\x20\x20\x20\x20url:\x20/^https?:\x5c/\x5c/.+/,\x0a\x20\x20\x20\x20\x20\x20uuid:\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20pattern\x20=\x20patterns[format];\x0a\x20\x20\x20\x20if\x20(!pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20true};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{valid:\x20pattern.test(value)};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20cross-field\x20constraints\x20(before/after\x20date)\x0a\x20\x20\x20*/\x0a\x20\x20async\x20_validateCrossFieldConstraints(data,\x20operation)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.before)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeField\x20=\x20constraints.before;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data[fieldName]\x20&&\x20data[beforeField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(new\x20Date(data[fieldName])\x20>=\x20new\x20Date(data[beforeField]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.beforeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20before\x20\x27${beforeField}\x27`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Invalid\x20date\x20format\x20for\x20field\x20\x27${fieldName}\x27:\x20cannot\x20compare\x20dates`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.after)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterField\x20=\x20constraints.after;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data[fieldName]\x20&&\x20data[afterField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(new\x20Date(data[fieldName])\x20<=\x20new\x20Date(data[afterField]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.afterMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20after\x20\x27${afterField}\x27`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Invalid\x20date\x20format\x20for\x20field\x20\x27${fieldName}\x27:\x20cannot\x20compare\x20dates`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a';}function generateCompositeMethods(_0x47403d){const _0x681be6=a0_0xd0d7,_0xbd03e6={'RVDqU':function(_0x254708,_0x20b8cb){return _0x254708===_0x20b8cb;},'jZtSV':function(_0x5a8f97,_0x1d62e3){return _0x5a8f97+_0x1d62e3;},'CRvLT':'generated','duQHq':_0x681be6(0x24c),'aFLcg':function(_0x8f46d0,_0x16b2dd){return _0x8f46d0>_0x16b2dd;},'yrzhC':function(_0x475bc3,_0x24235b){return _0x475bc3+_0x24235b;},'KBKtT':function(_0x31fe0e,_0x4fea50){return _0x31fe0e>_0x4fea50;},'KMSeW':_0x681be6(0x7f)},_0xd7f101=_0x47403d['action']||{},_0x20a640=_0x47403d['masterDetail']&&_0x47403d['masterDetail'][_0x681be6(0x1a2)];if(!_0x20a640||!_0xd7f101[_0x681be6(0x1dd)]&&!_0xd7f101['updateComposite']&&!_0xd7f101[_0x681be6(0x103)])return'';const _0x15f690=_0x47403d['masterDetail'][_0x681be6(0x169)],_0x2c42f6=_0x47403d['masterDetail'][_0x681be6(0x135)],_0x5ac6fb=_0x47403d['primaryKey']||'id';let _0x2f8167='\x0a';if(_0xd7f101['createComposite']){const _0x48fa13=_0x47403d[_0x681be6(0xf0)]?.[_0x681be6(0x254)]?.['primaryKey']||_0x15f690['split']('.')[_0x681be6(0x1d4)]()+_0x681be6(0x1ad),_0x23284e=_0x47403d[_0x681be6(0xf0)]?.[_0x681be6(0x254)]?.['autoCalculateFields']||{},_0x49dc75=[],_0x589628=[];for(const [_0x2b5f70,_0x3607ec]of Object['entries'](_0x23284e)){if(_0xbd03e6['RVDqU'](_0x3607ec[_0x681be6(0x8a)],'generated'))_0x49dc75['push'](_0x2b5f70);else{const _0x54b89a=(_0x3607ec['formula']||'')['split']('*')[_0x681be6(0x242)](_0x22fc93=>_0x22fc93[_0x681be6(0xa7)]());_0x589628['push']({'fieldName':_0x2b5f70,'qtyField':_0x54b89a[0x0],'priceField':_0x54b89a[0x1]});}}const _0xbe4613=_0x589628[_0x681be6(0x242)](_0x4b466c=>{const _0x310fc4=_0x681be6;return _0x310fc4(0xc7)+_0x4b466c['fieldName']+_0x310fc4(0xab)+_0x4b466c['qtyField']+'\x20*\x20'+_0x4b466c['priceField']+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x4b466c[_0x310fc4(0xa4)]+_0x310fc4(0x16f)+_0x4b466c[_0x310fc4(0x7b)]+_0x310fc4(0x8d)+_0x4b466c[_0x310fc4(0x1d0)]+')\x20||\x200);';})[_0x681be6(0x1da)]('\x0a');_0x2f8167+=_0x681be6(0x162)+_0x15f690[_0x681be6(0x110)]('.')[_0x681be6(0x1d4)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeInsert\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailItems\x20=\x20data[detailKey]\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeInsertBeforeContext(headerData,\x20detailItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x47403d['tableName']+_0x681be6(0x1cb)+_0x15f690+_0x681be6(0xe1)+_0x2c42f6+_0x681be6(0xdf)+_0x15f690+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20foreignKey\x20=\x20\x27'+_0x2c42f6+_0x681be6(0xb4)+(_0x49dc75[_0x681be6(0xd6)]>0x0?'const\x20generatedFields\x20=\x20'+JSON[_0x681be6(0x15d)](_0x49dc75)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x48fa13+'\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20data[detailKey]\x20||\x20[])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20foreign\x20key\x20to\x20item\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[foreignKey]\x20=\x20masterPrimaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Konsisten\x20dengan\x20konvensi\x20autoGenerate+primaryKey\x20di\x20single-table\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(lihat\x20validateData)\x20dan\x20seragam\x20lintas\x20dialect:\x20semua\x20generator\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20memakai\x20uuid.v7()\x20sehingga\x20format\x20UUID\x20dan\x20titik\x20generasi\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20identik,\x20independen\x20dari\x20DEFAULT\x20expression\x20di\x20DDL.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item[detailPrimaryKey]\x20===\x20undefined\x20||\x20item[detailPrimaryKey]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item[detailPrimaryKey]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0xbe4613?_0xbd03e6[_0x681be6(0x84)](_0xbd03e6[_0x681be6(0x84)]('\x0a',_0xbe4613),'\x0a'):'')+_0x681be6(0x166)+(_0x49dc75[_0x681be6(0xd6)]>0x0?_0x681be6(0x114):'')+_0x681be6(0xd7)+_0x47403d[_0x681be6(0x86)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x15f690+_0x681be6(0xe1)+_0x2c42f6+_0x681be6(0xb8);}if(_0xd7f101['updateComposite']){const _0x1045c3=_0x47403d[_0x681be6(0xf0)]?.['detailConfig']?.['primaryKey']||_0x15f690['split']('.')[_0x681be6(0x1d4)]()+_0x681be6(0x1ad),_0x3cdd3e=_0x47403d['masterDetail']?.['headerCalculations']||null,_0x720f8c=_0x47403d['masterDetail']?.['detailConfig']?.[_0x681be6(0x1d9)]||{},_0x28b10f=[],_0x304244=[];for(const [_0x1a4dcf,_0x3ee51e]of Object[_0x681be6(0x185)](_0x720f8c)){if(_0x3ee51e[_0x681be6(0x8a)]===_0xbd03e6[_0x681be6(0x189)])_0x28b10f['push'](_0x1a4dcf);else{const _0x538bd9=(_0x3ee51e[_0x681be6(0x148)]||'')[_0x681be6(0x110)]('*')[_0x681be6(0x242)](_0x5a3657=>_0x5a3657[_0x681be6(0xa7)]());_0x304244[_0x681be6(0x13a)]({'fieldName':_0x1a4dcf,'qtyField':_0x538bd9[0x0],'priceField':_0x538bd9[0x1]});}}const _0x4eabb7=_0x304244[_0x681be6(0x242)](_0x3e9f05=>{const _0x2868b9=_0x681be6;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x3e9f05[_0x2868b9(0xa4)]+'\x20=\x20'+_0x3e9f05['qtyField']+_0x2868b9(0x17d)+_0x3e9f05[_0x2868b9(0x1d0)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x3e9f05['fieldName']+'\x20=\x20(Number(item.'+_0x3e9f05['qtyField']+')\x20||\x200)\x20*\x20(Number(item.'+_0x3e9f05['priceField']+_0x2868b9(0x1e2);})['join']('\x0a'),_0x33ef4e=_0x47403d['masterDetail']?.['detailConfig']?.['autoCalculateFields']?.['total_amount']?.[_0x681be6(0x148)]||'',_0x476cb6=_0x33ef4e['split']('*')['map'](_0x11cc6a=>_0x11cc6a[_0x681be6(0xa7)]()),_0x3a48a8=_0x47403d['masterDetail']?.['headerCalculations']?.[_0x681be6(0x168)]?.[_0x681be6(0x215)]?.['replace']('items.','')||'',_0x39f8ed=_0x476cb6[0x0]||_0x3a48a8,_0x4f1eb5=_0x476cb6[0x1]||_0xbd03e6['duQHq'];_0x2f8167+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(insert/update/delete)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail_lines\x20with\x20insert/update/delete\x20arrays\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Updated\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20primary\x20key\x20value\x0a\x20\x20\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Primary\x20key\x20${this.primaryKey}\x20is\x20required\x20for\x20update`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20\x20\x20const\x20checkQuery\x20=\x20`SELECT\x20*\x20FROM\x20${this.writeSource}\x20WHERE\x20${this.primaryKey}\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20checkResult\x20=\x20await\x20client.query(checkQuery,\x20[primaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(checkResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20oldData\x20=\x20checkResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items\x20and\x20primary\x20key)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x15f690['split']('.')['pop']()+_0x681be6(0x202)+_0x47403d['tableName']+_0x681be6(0x1cb)+_0x15f690+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x2c42f6+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27update\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeUpdate\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(`${key}\x20=\x20$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20const\x20headerUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${headerFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${placeholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20headerUpdateQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerUpdateQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20updatedHeader\x20=\x20headerResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20updated\x20successfully:\x20${this.primaryKey}=${primaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Process\x20detail\x20items\x20with\x20insert/update/delete\x20pattern\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x15f690+_0x681be6(0x171)+_0x2c42f6+_0x681be6(0x233)+_0x1045c3+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x28b10f[_0x681be6(0xd6)]>0x0?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x28b10f)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailOperations\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20insert:\x20insertItems\x20=\x20[],\x20update:\x20updateItems\x20=\x20[],\x20delete:\x20deleteItems\x20=\x20[]\x20}\x20=\x20detailOperations;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20updatedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Process\x20DELETE\x20operations\x20first\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20deleteItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!item[detailPrimaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Missing\x20${detailPrimaryKey}\x20in\x20delete\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20deleteQuery\x20=\x20`DELETE\x20FROM\x20${detailTableName}\x20WHERE\x20${detailPrimaryKey}\x20=\x20$1\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20deleteResult\x20=\x20await\x20client.query(deleteQuery,\x20[item[detailPrimaryKey]]);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(deleteResult.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deletedItems.push(deleteResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Deleted\x20${deletedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Process\x20UPDATE\x20operations\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20updateItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!item[detailPrimaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Missing\x20${detailPrimaryKey}\x20in\x20update\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x4eabb7?_0xbd03e6['jZtSV']('\x0a',_0x4eabb7)+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(key\x20===\x20detailPrimaryKey)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0xbd03e6[_0x681be6(0x214)](_0x28b10f['length'],0x0)?_0x681be6(0x114):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(`${key}\x20=\x20$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20detail\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendUpdateAuditColumns(detailFields,\x20detailValues,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(item[detailPrimaryKey]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${detailTableName}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${detailFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${detailPrimaryKey}\x20=\x20$${detailPlaceholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailUpdateQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(detailResult.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updatedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Updated\x20${updatedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Process\x20INSERT\x20operations\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20insertItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20foreign\x20key\x20to\x20item\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[foreignKey]\x20=\x20primaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20dengan\x20createComposite\x20dan\x20konvensi\x20autoGenerate)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item[detailPrimaryKey]\x20===\x20undefined\x20||\x20item[detailPrimaryKey]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item[detailPrimaryKey]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x4eabb7?_0xbd03e6[_0x681be6(0x90)]('\x0a',_0x4eabb7)+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0xbd03e6['KBKtT'](_0x28b10f['length'],0x0)?_0x681be6(0x114):'')+_0x681be6(0x1a4)+(_0x3cdd3e?'\x0a\x20\x20\x20\x20\x20\x20const\x20calculations\x20=\x20'+JSON[_0x681be6(0x15d)](_0x3cdd3e)+_0x681be6(0x9e)+(_0x39f8ed?_0x681be6(0xcb)+_0x39f8ed+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x4f1eb5+_0x681be6(0x170):_0xbd03e6['KMSeW'])+'\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(recalculatedFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20recalc\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalcPlaceholder\x20=\x20this._appendUpdateAuditColumns(recalculatedFields,\x20recalculatedValues,\x20data,\x20eventContext,\x20recalcPlaceholder);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${recalculatedFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${recalcPlaceholder}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcQuery,\x20values:\x20recalculatedValues\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcResult\x20=\x20await\x20client.query(recalcQuery,\x20recalculatedValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20Object.assign(updatedHeader,\x20recalcResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20':'')+_0x681be6(0x1b5)+_0x47403d['tableName']+_0x681be6(0x1cb)+_0x15f690+_0x681be6(0xe1)+_0x2c42f6+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterResult\x20=\x20await\x20ce.executeOnAfterComposite(\x27update\x27,\x20afterCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onAfterCompositeUpdate\x20failed:\x20${afterResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...updatedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20allItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20_operations:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems.length\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20updateComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}if(_0xd7f101['readComposite']){const _0x353779=_0x47403d[_0x681be6(0xf0)]?.[_0x681be6(0x254)]?.[_0x681be6(0x259)]||null;let _0x2f1cff;_0x353779?_0x2f1cff=_0x681be6(0x237)+_0x353779+'`;':_0x2f1cff='const\x20detailQuery\x20=\x20`SELECT\x20*\x20FROM\x20'+_0x15f690+_0x681be6(0x165)+_0x2c42f6+'\x20=\x20$1\x20ORDER\x20BY\x20line_number`;',_0x2f8167+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20read\x20-\x20Read\x20header\x20with\x20detail\x20items\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Options\x20with\x20where\x20clause\x20(same\x20format\x20as\x20getData)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Records\x20with\x20detail\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20readComposite(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x0a\x20\x20\x20\x20\x20\x20if\x20(!options.where)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20let\x20whereClauseSql;\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fail-closed\x20where-field:\x20teruskan\x20error\x20terstruktur\x20apa\x20adanya.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(e.code\x20===\x20\x27INVALID_WHERE_FIELD\x27)\x20throw\x20e;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Query\x20header\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20whereClauseSql.sql;\x0a\x20\x20\x20\x20\x20\x20params\x20=\x20whereClauseSql.params;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerResults\x20=\x20await\x20db.executeQuery(headerQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(headerResults.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20each\x20header,\x20fetch\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20compositeResults\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x15f690[_0x681be6(0x110)]('.')['pop']()+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+_0x2f1cff+_0x681be6(0x247);}return _0x2f8167;}function generateSoftDeleteOverride(_0xcfc6e){const _0x410c33=a0_0xd0d7,_0x836634={'XMbIA':function(_0x14950c,_0x501f42){return _0x14950c===_0x501f42;},'cncBi':function(_0x162e93,_0x4dd41c){return _0x162e93(_0x4dd41c);}},_0x1acc9a=_0xcfc6e['primaryKey']||_0xcfc6e['fieldName']&&_0xcfc6e['fieldName'][0x0]||'id',_0x1bbd67=_0xcfc6e[_0x410c33(0x113)]&&Array[_0x410c33(0xa0)](_0xcfc6e[_0x410c33(0x113)][_0x410c33(0x14b)])?_0xcfc6e[_0x410c33(0x113)][_0x410c33(0x14b)]:[];if(_0x836634['cncBi'](hasCascadeChildren,_0xcfc6e))return generateSoftDeleteCascadeOverride(_0xcfc6e);const _0x488078=Array[_0x410c33(0xa0)](_0xcfc6e[_0x410c33(0x188)])?_0xcfc6e[_0x410c33(0x188)][_0x410c33(0x144)](_0x37beee=>_0x37beee&&_0x37beee[_0x410c33(0xe6)]===_0x410c33(0x186)&&typeof _0x37beee['childTable']===_0x410c33(0x9a)&&_0x37beee[_0x410c33(0x24e)]&&Array[_0x410c33(0xa0)](_0x37beee['childColumns'])&&_0x37beee[_0x410c33(0x145)][_0x410c33(0xd6)]===0x1&&typeof _0x37beee[_0x410c33(0x145)][0x0]==='string'&&typeof _0x37beee['parentColumn']==='string'&&_0x37beee['parentColumn']):[],_0x49a49a=[_0x1acc9a];for(const _0x26a70d of _0x1bbd67){if(_0x26a70d&&_0x26a70d[_0x410c33(0x80)]&&!_0x49a49a[_0x410c33(0xf7)](_0x26a70d[_0x410c33(0x80)]))_0x49a49a[_0x410c33(0x13a)](_0x26a70d['field']);}for(const _0x1b6233 of _0x488078){if(!_0x49a49a['includes'](_0x1b6233[_0x410c33(0x184)]))_0x49a49a[_0x410c33(0x13a)](_0x1b6233[_0x410c33(0x184)]);}const _0x2e8956=_0x49a49a[_0x410c33(0x1da)](',\x20'),_0x28f3f1=_0x488078['map']((_0x866fde,_0x3dab04)=>{const _0x4e80f6=_0x410c33,_0x50bd69=_0x866fde['childTable'],_0x129ff8=_0x866fde['childColumns'][0x0],_0x386b3b=_0x866fde['parentColumn'],_0x1e6f85=_0x836634['XMbIA'](_0x866fde[_0x4e80f6(0x93)],!![]),_0x1c632f=_0x1e6f85?_0x4e80f6(0x1d2)+IS_DELETED_COLUMN+'\x20=\x20FALSE':'';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK-SD-2\x20restrict\x20#'+_0x3dab04+':\x20anak\x20\x27'+_0x50bd69+'\x27.'+_0x129ff8+_0x4e80f6(0x1ed)+_0x386b3b+_0x4e80f6(0x1a1)+_0x1e6f85+')\x20→\x20409\x20bila\x20masih\x20direferensikan\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__restrictVal\x20=\x20lockedRow[\x27'+_0x386b3b+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__restrictVal\x20!==\x20null\x20&&\x20__restrictVal\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__restrictCheck\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20'+_0x50bd69+_0x4e80f6(0x165)+_0x129ff8+_0x4e80f6(0x1c6)+_0x1c632f+'\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__restrictVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__restrictCheck.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20restrictError\x20=\x20new\x20Error(\x22Cannot\x20delete:\x20record\x20is\x20still\x20referenced\x20by\x20\x27'+_0x50bd69+'\x27\x20(onDelete:\x20restrict)\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20restrictError.statusCode\x20=\x20409;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20restrictError;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})['join'](''),_0x59f7b5=_0x1bbd67['map'](_0x101035=>{const _0x4f1ad8=_0x410c33,_0x50f715=_0x101035['field'],_0x258e05=_0x101035[_0x4f1ad8(0xd6)];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20reusable\x20\x27'+_0x50f715+_0x4f1ad8(0x1e6)+_0x258e05+')\x20→\x20original\x20+\x20\x27##\x27\x20+\x20uuidv7()\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__orig\x20=\x20lockedRow[\x27'+_0x50f715+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__orig\x20!==\x20null\x20&&\x20__orig\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__str\x20=\x20String(__orig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__str.length\x20>\x20'+_0x258e05+_0x4f1ad8(0x9c)+_0x50f715+_0x4f1ad8(0x193)+_0x258e05+_0x4f1ad8(0x216)+_0x50f715+_0x4f1ad8(0x19c);})['join']('');return _0x410c33(0x164)+DELETED_BY_COLUMN+_0x410c33(0xa8)+_0x2e8956+_0x410c33(0x120)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20FOR\x20UPDATE\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20lockResult\x20=\x20await\x20client.query(lockQuery,\x20whereBuilt.params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(lockResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tidak\x20ada\x20row\x20aktif:\x20tidak\x20ditemukan,\x20sudah\x20ter-soft-delete,\x20atau\x20kalah\x20race.\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20notFoundError\x20=\x20new\x20Error(\x27Record\x20not\x20found\x20or\x20already\x20deleted\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20notFoundError.statusCode\x20=\x20404;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20notFoundError;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Soft-delete\x20tiap\x20row\x20aktif\x20(multi-row:\x20tiap\x20row\x20memakai\x20suffix\x20uuidv7\x20sendiri).\x0a\x20\x20\x20\x20\x20\x20const\x20deletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20lockedRow\x20of\x20lockResult.rows)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20setClauses\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20p\x20=\x201;\x0a'+_0x28f3f1+_0x59f7b5+_0x410c33(0xc1)+IS_DELETED_COLUMN+_0x410c33(0x105)+DELETED_AT_COLUMN+'\x20=\x20NOW()\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+DELETED_BY_COLUMN+_0x410c33(0x73)+_0x1acc9a+'\x27]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateQuery\x20=\x20\x27UPDATE\x20\x27\x20+\x20writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20setClauses.join(\x27,\x20\x27)\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27\x20WHERE\x20'+_0x1acc9a+'\x20=\x20$\x27\x20+\x20p\x20+\x20\x27\x20RETURNING\x20\x27\x20+\x20returningFields;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateResult\x20=\x20await\x20client.query(updateQuery,\x20updateParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(updateResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deletedItems.push(updateResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Invalidate\x20cache\x20setelah\x20COMMIT\x20(WAJIB:\x20jalur\x20custom\x20tidak\x20auto-invalidate;\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20bila\x20terlewat,\x20/datatables\x20dan\x20/read\x20ter-cache\x20menyajikan\x20record\x20yang\x20sudah\x20terhapus).\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Successfully\x20deleted\x20\x27\x20+\x20deletedItems.length\x20+\x20\x27\x20record(s)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted_count:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted_items:\x20deletedItems\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}function generateSoftDeleteCascadeOverride(_0x7d2bdd){const _0x44ebdf=a0_0xd0d7,_0x4f398e=_0x7d2bdd[_0x44ebdf(0x167)];return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Soft-delete\x20cascade\x20override\x20(R14\x20+\x20FK-SD-3).\x20/delete\x20men-soft-delete\x20master\x20+\x20seluruh\x0a\x20\x20\x20*\x20descendant\x20cascade\x20dalam\x20SATU\x20transaction\x20(atomic\x20all-or-nothing),\x20restrict-per-node\x20409\x20di\x0a\x20\x20\x20*\x20setiap\x20node.\x20Response\x20backward-compat\x20(master\x20depth-0).\x20updated_*\x20tidak\x20disentuh.\x0a\x20\x20\x20*\x20@param\x20{Object}\x20criteria\x20-\x20{\x20where:\x20[...]\x20}\x20mengikuti\x20format\x20/delete\x20existing\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(opsional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20{\x20success,\x20message,\x20deleted_count,\x20deleted_items\x20}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20deleteData(criteria,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0a\x0a\x20\x20\x20\x20if\x20(!criteria\x20||\x20!criteria.where)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20FK-SD-3\x20closure\x20cascade\x20(master\x20+\x20seluruh\x20descendant\x20lewat\x20edge\x20cascade\x20ke\x20anak\x0a\x20\x20\x20\x20//\x20soft-delete).\x20Map-free:\x20seluruh\x20metadata\x20descendant\x20dipersist\x20generate-time\x20di\x20RDF.\x0a\x20\x20\x20\x20const\x20__sdCascadeMeta\x20=\x20'+JSON['stringify'](_0x4f398e)+';\x0a\x0a\x20\x20\x20\x20const\x20writeSource\x20=\x20this.getTableSource(\x27write\x27);\x0a\x20\x20\x20\x20const\x20returningFields\x20=\x20this.getReturningFields();\x0a\x20\x20\x20\x20//\x20deleted_by:\x20body\x20eksplisit\x20→\x20eventContext.additionalContext.user_id\x20→\x20\x27system\x27.\x20Resolusi\x0a\x20\x20\x20\x20//\x20yang\x20SAMA\x20dipakai\x20untuk\x20master\x20DAN\x20seluruh\x20descendant\x20pada\x20cascade\x20(FK-SD-3\x20#6).\x0a\x20\x20\x20\x20const\x20deletedBy\x20=\x20this._resolveAuditUserId(criteria,\x20eventContext,\x20\x27'+DELETED_BY_COLUMN+_0x44ebdf(0xe2)+IS_DELETED_COLUMN+_0x44ebdf(0x156)+IS_DELETED_COLUMN+_0x44ebdf(0x105)+DELETED_AT_COLUMN+_0x44ebdf(0x16d)+DELETED_BY_COLUMN+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(deletedBy);\x0a\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(pkVal);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Master\x20(depth-0)\x20di-UPDATE\x20ke\x20writeSource\x20(read/write\x20split-aware,\x20identik\x20jalur\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20existing)\x20+\x20RETURNING\x20untuk\x20response.\x20Descendant\x20ke\x20nama\x20tabel\x20closure\x20(qualified).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__target\x20=\x20current.isMaster\x20?\x20writeSource\x20:\x20current.table;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__returning\x20=\x20current.isMaster\x20?\x20(\x27\x20RETURNING\x20\x27\x20+\x20returningFields)\x20:\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20__updateResult\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27UPDATE\x20\x27\x20+\x20__target\x20+\x20\x27\x20SET\x20\x27\x20+\x20setClauses.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20node.pk\x20+\x20\x27\x20=\x20$\x27\x20+\x20p\x20+\x20__returning,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20touched.add(current.table);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(current.isMaster\x20&&\x20__updateResult.rows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20masterDeletedItems.push(__updateResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(3)\x20expand:\x20anak\x20AKTIF\x20(is_deleted=FALSE)\x20lewat\x20edge\x20cascade\x20ke\x20anak\x20soft-delete,\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x20\x20FOR\x20UPDATE\x20(kunci\x20sebelum\x20mutasi),\x20skip\x20parentColumn\x20NULL.\x20Enqueue\x20tiap\x20row.\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20ch\x20of\x20node.children)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ch.onDelete\x20!==\x20\x27cascade\x27\x20||\x20ch.childSoftDelete\x20!==\x20true)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__expandVal\x20=\x20current.row[ch.parentColumn];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__expandVal\x20===\x20null\x20||\x20__expandVal\x20===\x20undefined)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__childNode\x20=\x20__sdCascadeMeta.nodes[ch.childTable];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20ORDER\x20BY\x20<childPk>\x20sebelum\x20FOR\x20UPDATE\x20→\x20urutan\x20akuisisi\x20lock\x20deterministik\x20(mitigasi\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20ringan\x20konkurensi;\x20deadlock\x20penuh\x20=\x20Phase\x2004d).\x20Hanya\x20mengubah\x20URUTAN\x20baris,\x20bukan\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20himpunan\x20hasil\x20→\x20hasil\x20cascade\x20identik.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__childRows\x20=\x20(await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20\x27\x20+\x20__sdSelectCols(__childNode)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20ch.childTable\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20ch.childColumn\x20+\x20\x27\x20=\x20$1\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20ORDER\x20BY\x20\x27\x20+\x20__childNode.pk\x20+\x20\x27\x20FOR\x20UPDATE\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__expandVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)).rows;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20cr\x20of\x20__childRows)\x20work.push({\x20table:\x20ch.childTable,\x20row:\x20cr,\x20isMaster:\x20false\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20touched:\x20[...touched],\x20masterDeletedItems,\x20deletedCount:\x20visited.size\x20};\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Kunci\x20baris\x20master\x20AKTIF\x20yang\x20cocok\x20kriteria\x20(FOR\x20UPDATE\x20+\x20is_deleted=FALSE):\x0a\x20\x20\x20\x20\x20\x20//\x20\x20\x20\x200\x20row\x20→\x20404.\x20selectCols\x20cukup\x20untuk\x20node\x20master\x20(pk\x20+\x20reusable\x20+\x20parentColumn\x20anak).\x0a\x20\x20\x20\x20\x20\x20const\x20selectParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20whereBuilt\x20=\x20this.buildComplexWhereClause(criteria.where,\x20selectParams,\x201);\x0a\x20\x20\x20\x20\x20\x20const\x20__masterNode\x20=\x20__sdCascadeMeta.nodes[__sdCascadeMeta.master];\x0a\x20\x20\x20\x20\x20\x20const\x20lockQuery\x20=\x20\x27SELECT\x20\x27\x20+\x20__sdSelectCols(__masterNode)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20writeSource\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27\x20WHERE\x20(\x27\x20+\x20whereBuilt.sql\x20+\x20\x27)\x20AND\x20'+IS_DELETED_COLUMN+_0x44ebdf(0x6f);}function generateDeleteMethod(_0x18dfb7){const _0x2a6f04=a0_0xd0d7,_0x452f78={'UishC':function(_0x38fe47,_0x47f278){return _0x38fe47(_0x47f278);}},_0x126b13=_0x18dfb7['action']||{},_0x4c2dbb=_0x18dfb7[_0x2a6f04(0xf0)]&&_0x18dfb7['masterDetail'][_0x2a6f04(0x1a2)],_0x54d61d=_0x18dfb7['masterDetail']?.['cascadeDelete']||![];if(!_0x126b13[_0x2a6f04(0x22c)])return'';const _0x1632d6=_0x18dfb7[_0x2a6f04(0x1cd)]||'id';if(isSoftDeleteEnabled(_0x18dfb7))return _0x452f78[_0x2a6f04(0x160)](generateSoftDeleteOverride,_0x18dfb7);if(!_0x4c2dbb)return'';const _0x2dc50b=_0x18dfb7['masterDetail'][_0x2a6f04(0x169)],_0x545d96=_0x18dfb7[_0x2a6f04(0xf0)]['foreignKey'];let _0x530655='\x0a';return _0x530655+=_0x2a6f04(0x91)+(_0x54d61d?_0x2a6f04(0xb5)+_0x2dc50b+'...\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Get\x20primary\x20key\x20value\x20untuk\x20delete\x20child\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20`SELECT\x20'+_0x1632d6+'\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}`;\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(headerResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerPrimaryKeyValue\x20=\x20headerResult.rows[0][\x27'+_0x1632d6+'\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20DELETE\x20child\x20records\x20menggunakan\x20foreignKey\x0a\x20\x20\x20\x20\x20\x20const\x20deleteChildQuery\x20=\x20`DELETE\x20FROM\x20'+_0x2dc50b+'\x20WHERE\x20'+_0x545d96+'\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteChildResult\x20=\x20await\x20client.query(deleteChildQuery,\x20[headerPrimaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Deleted\x20${deleteChildResult.rowCount}\x20child\x20record(s)\x20from\x20'+_0x2dc50b+'`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20DELETE\x20header\x20record\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderQuery\x20=\x20`DELETE\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderResult\x20=\x20await\x20client.query(deleteHeaderQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(deleteHeaderResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedData\x20=\x20deleteHeaderResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Header\x20record\x20deleted\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20':_0x2a6f04(0x210))+'\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Data\x20successfully\x20deleted\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20deletedData'+(_0x54d61d?',\x0a\x20\x20\x20\x20\x20\x20\x20\x20deletedChildRecords:\x20deleteChildResult.rowCount':'')+'\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20deleteData:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a',_0x530655;}function generateSoftDeleteRestoreOverride(_0x4b6e4a){const _0xeeb127=a0_0xd0d7,_0x5f13b0={'aKkDL':'\x20AND\x20','PTJlJ':'missing\x20or\x20soft-deleted','RCSlN':'missing','JiNCC':_0xeeb127(0xd5),'ytyJn':'ada'},_0x5173cb=_0x4b6e4a[_0xeeb127(0x1cd)]||_0x4b6e4a[_0xeeb127(0xa4)]&&_0x4b6e4a['fieldName'][0x0]||'id',_0x2ba5f4=_0x4b6e4a['softDelete']&&Array['isArray'](_0x4b6e4a[_0xeeb127(0x113)][_0xeeb127(0x14b)])?_0x4b6e4a['softDelete']['reusable']:[],_0x3977b1=Array['isArray'](_0x4b6e4a['softDeleteFkChecks'])?_0x4b6e4a[_0xeeb127(0x13d)][_0xeeb127(0x144)](_0x1ebe44=>_0x1ebe44&&Array['isArray'](_0x1ebe44[_0xeeb127(0x249)])&&_0x1ebe44[_0xeeb127(0x249)]['length']>0x0&&typeof _0x1ebe44['refTable']==='string'&&_0x1ebe44[_0xeeb127(0x22a)]&&Array[_0xeeb127(0xa0)](_0x1ebe44[_0xeeb127(0x228)])&&_0x1ebe44['refColumns']['length']===_0x1ebe44['columns'][_0xeeb127(0xd6)]):[],_0x18839e=[_0x5173cb];for(const _0x18ab28 of _0x2ba5f4){if(_0x18ab28&&_0x18ab28['field']&&!_0x18839e['includes'](_0x18ab28['field']))_0x18839e[_0xeeb127(0x13a)](_0x18ab28['field']);}for(const _0x3e0664 of _0x3977b1){for(const _0xa5fb7d of _0x3e0664['columns']){if(_0xa5fb7d&&!_0x18839e['includes'](_0xa5fb7d))_0x18839e[_0xeeb127(0x13a)](_0xa5fb7d);}}const _0x3d7361=_0x18839e['join'](',\x20'),_0x46adbc=_0x2ba5f4['map'](_0x4e12a2=>{const _0x1593e0=_0xeeb127,_0x3fddb0=_0x4e12a2[_0x1593e0(0x80)],_0x477083=_0x4e12a2[_0x1593e0(0xd6)];return _0x1593e0(0x157)+_0x3fddb0+'\x27\x20(base\x20length\x20'+_0x477083+_0x1593e0(0x230)+_0x3fddb0+'\x27];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__cur\x20!==\x20null\x20&&\x20__cur\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__curStr\x20=\x20String(__cur);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__sepIdx\x20=\x20__curStr.lastIndexOf(\x27##\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Legacy\x20tanpa\x20\x27##\x27\x20→\x20original\x20=\x20nilai\x20apa\x20adanya\x20(strip\x20dilewati\x20di\x20bawah).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__original\x20=\x20__sepIdx\x20>=\x200\x20?\x20__curStr.substring(0,\x20__sepIdx)\x20:\x20__curStr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Konflik\x20(409):\x20original\x20kini\x20dipakai\x20record\x20aktif\x20lain\x20selain\x20row\x20ini.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__conflict\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20\x27\x20+\x20writeSource\x20+\x20\x27\x20WHERE\x20'+_0x3fddb0+_0x1593e0(0x7a)+IS_DELETED_COLUMN+_0x1593e0(0x99)+_0x5173cb+_0x1593e0(0x174)+_0x5173cb+_0x1593e0(0x16e)+_0x3fddb0+_0x1593e0(0x23f)+_0x3fddb0+'\x20=\x20$\x27\x20+\x20p);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20p++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updateParams.push(__original);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0xeeb127(0x1da)](''),_0xa60b5=_0x3977b1[_0xeeb127(0x242)]((_0x2e9e5f,_0x2b2d01)=>{const _0x1d8c6f=_0xeeb127,_0x496b0f=_0x2e9e5f['parentSoftDelete']===!![],_0x47e9d6=_0x2e9e5f[_0x1d8c6f(0x22a)],_0xcc80f4=_0x2e9e5f[_0x1d8c6f(0x249)]['map'](_0x3a3366=>'lockedRow[\x27'+_0x3a3366+'\x27]')['join'](',\x20'),_0x12e757=_0x2e9e5f[_0x1d8c6f(0x228)][_0x1d8c6f(0x242)]((_0x2a3590,_0x47d606)=>_0x2a3590+'\x20=\x20$'+(_0x47d606+0x1))[_0x1d8c6f(0x1da)](_0x5f13b0[_0x1d8c6f(0x256)]),_0x556e4d=_0x496b0f?'\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20FALSE':'',_0x398d7e=_0x496b0f?_0x5f13b0['PTJlJ']:_0x5f13b0[_0x1d8c6f(0x101)];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK\x20#'+_0x2b2d01+'\x20→\x20'+_0x47e9d6+'\x20(parentSoftDelete='+_0x496b0f+_0x1d8c6f(0x1a3)+(_0x496b0f?_0x5f13b0[_0x1d8c6f(0xb0)]:_0x5f13b0['ytyJn'])+_0x1d8c6f(0x161)+_0xcc80f4+'];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK\x20nullable:\x20bila\x20ada\x20nilai\x20NULL,\x20parent\x20tidak\x20diwajibkan\x20→\x20skip\x20cek.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkVals.every((v)\x20=>\x20v\x20!==\x20null\x20&&\x20v\x20!==\x20undefined))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__fkCheck\x20=\x20await\x20client.query(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x201\x20FROM\x20'+_0x47e9d6+_0x1d8c6f(0x165)+_0x12e757+_0x556e4d+'\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20__fkVals\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkCheck.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fkError\x20=\x20new\x20Error(\x22Cannot\x20restore:\x20referenced\x20parent\x20record\x20in\x20\x27'+_0x47e9d6+'\x27\x20is\x20'+_0x398d7e+_0x1d8c6f(0x181);})['join']('');return _0xeeb127(0xec)+_0x3d7361+'\x20FROM\x20\x27\x20+\x20writeSource\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27\x20WHERE\x20(\x27\x20+\x20whereBuilt.sql\x20+\x20\x27)\x20AND\x20'+IS_DELETED_COLUMN+'\x20=\x20TRUE\x20FOR\x20UPDATE\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20lockResult\x20=\x20await\x20client.query(lockQuery,\x20whereBuilt.params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(lockResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tidak\x20ada\x20row\x20terhapus:\x20tidak\x20ditemukan,\x20atau\x20record\x20aktif\x20(bukan\x20terhapus).\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20notFoundError\x20=\x20new\x20Error(\x27Record\x20not\x20found\x20or\x20not\x20deleted\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20notFoundError.statusCode\x20=\x20404;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20notFoundError;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Restore\x20tiap\x20row\x20terhapus\x20(strip\x20suffix\x20→\x20konflik\x20→\x20FK\x20→\x20reset).\x0a\x20\x20\x20\x20\x20\x20const\x20restoredItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20lockedRow\x20of\x20lockResult.rows)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20setClauses\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20updateParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20p\x20=\x201;\x0a'+_0x46adbc+_0xa60b5+_0xeeb127(0x17f)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+DELETED_AT_COLUMN+'\x20=\x20NULL\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20setClauses.push(\x27'+DELETED_BY_COLUMN+_0xeeb127(0x1ac)+_0x5173cb+_0xeeb127(0xce)+_0x5173cb+_0xeeb127(0xa3);}function generateRestoreMethod(_0x629e28){const _0x5e32a7=a0_0xd0d7,_0xbff6a1={'CqAlb':function(_0x311f90,_0xe65f39){return _0x311f90(_0xe65f39);}},_0x1a5bac=_0x629e28[_0x5e32a7(0x1bb)]||{};if(!_0x1a5bac['restore']||!isSoftDeleteEnabled(_0x629e28))return'';return _0xbff6a1['CqAlb'](generateSoftDeleteRestoreOverride,_0x629e28);}function hasSoftDeleteFkParents(_0x286e5d){const _0x2f5091=a0_0xd0d7;return Array[_0x2f5091(0xa0)](_0x286e5d[_0x2f5091(0x19e)])&&_0x286e5d['softDeleteFkParents'][_0x2f5091(0xd6)]>0x0;}function generateSoftDeleteFkParentsCheck(_0x4f168c){const _0x43b35d=a0_0xd0d7,_0x3870aa={'tNcez':function(_0x5a4a4a,_0x462644){return _0x5a4a4a(_0x462644);}};if(!_0x3870aa['tNcez'](hasSoftDeleteFkParents,_0x4f168c))return'';const _0x341990=_0x4f168c['softDeleteFkParents'][_0x43b35d(0x242)]((_0x53532f,_0x379702)=>{const _0xb45815=_0x43b35d,_0x106a00=_0x53532f['columns'][0x0],_0x100e9a=_0x53532f[_0xb45815(0x22a)],_0x5bc720=_0x53532f['refColumns'][0x0];return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20FK\x20#'+_0x379702+'\x20\x27'+_0x106a00+'\x27\x20→\x20'+_0x100e9a+'.'+_0x5bc720+_0xb45815(0x1f4)+_0x106a00+_0xb45815(0x83)+_0x100e9a+'\x20WHERE\x20'+_0x5bc720+_0xb45815(0x7a)+IS_DELETED_COLUMN+'\x20=\x20FALSE\x20LIMIT\x201\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[__fkVal]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(__fkRes.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20__fkErr\x20=\x20new\x20Error(\x22Cannot\x20\x22\x20+\x20operation\x20+\x20\x22:\x20referenced\x20parent\x20record\x20in\x20\x27'+_0x100e9a+'\x27\x20is\x20missing\x20or\x20soft-deleted\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20__fkErr.statusCode\x20=\x20422;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20__fkErr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}';})[_0x43b35d(0x1da)]('');return _0x43b35d(0x15c)+_0x341990+_0x43b35d(0x23a);}function createPostgresModelTemplate(_0x26887f,_0x1f0f67,_0x2357cd){const _0x331a2f=a0_0xd0d7,_0x18a2e8={'ISfMg':function(_0x58ab77,_0x4184b8){return _0x58ab77(_0x4184b8);},'HjPMl':function(_0x18f371,_0x54ff89){return _0x18f371!==_0x54ff89;},'yxGWN':function(_0x5dc39b,_0x3f6dab){return _0x5dc39b(_0x3f6dab);},'xtHcs':function(_0x352d05,_0xb08c1f){return _0x352d05(_0xb08c1f);},'SCPpc':_0x331a2f(0x1ea),'PckZm':function(_0x45ef1e,_0x56ebbb){return _0x45ef1e(_0x56ebbb);},'ufcte':function(_0x3d8205,_0x129cf7,_0xe461ce){return _0x3d8205(_0x129cf7,_0xe461ce);},'maOsV':function(_0x4bb01a,_0x494353,_0x21ddf1){return _0x4bb01a(_0x494353,_0x21ddf1);},'TEzcu':_0x331a2f(0x1e3),'rNqlI':function(_0x5f0650,_0x4c6b5c,_0x2597c2){return _0x5f0650(_0x4c6b5c,_0x2597c2);},'IgkeN':_0x331a2f(0x218),'xBHMs':function(_0x46e35a,_0x445e0b){return _0x46e35a+_0x445e0b;},'KRPAd':'\x20+\x20\x27','WCVKq':function(_0x543ac8){return _0x543ac8();},'FHqXA':function(_0x46e214,_0x13f091){return _0x46e214(_0x13f091);},'aJqzb':function(_0x13eb8d,_0x2ea9b7){return _0x13eb8d(_0x2ea9b7);}};_0x18a2e8[_0x331a2f(0x23c)](assertNoFileReferenceLeftover,_0x2357cd);const _0x2bfb9a=FileUtils[_0x331a2f(0xe5)](_0x1f0f67),_0x469b1f=new Date()[_0x331a2f(0x16a)]()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x419c96=_0x18a2e8['xtHcs'](buildValidFieldsString,_0x2357cd),_0x20fa8d=_0x2357cd[_0x331a2f(0x6c)]||{},_0x2e19fd=(_0x2357cd['fieldName']||[])['map'](_0x55b159=>'\x27'+_0x55b159+'\x27')[_0x331a2f(0x1da)](_0x18a2e8['SCPpc']),_0x3e49d5=(_0x20fa8d[_0x331a2f(0x75)]||_0x2357cd[_0x331a2f(0xa4)]||[])[_0x331a2f(0x242)](_0x5d1afd=>'\x27'+_0x5d1afd+'\x27')[_0x331a2f(0x1da)](',\x0a\x20\x20\x20\x20\x20\x20'),_0x53ce38=(_0x20fa8d[_0x331a2f(0x117)]||_0x2357cd['fieldName']||[])['map'](_0x6eba4d=>'\x27'+_0x6eba4d+'\x27')[_0x331a2f(0x1da)](_0x331a2f(0x1ea)),_0x137a7d=(_0x20fa8d[_0x331a2f(0x220)]||_0x20fa8d[_0x331a2f(0x75)]||_0x2357cd['fieldName']||[])['map'](_0x531268=>'\x27'+_0x531268+'\x27')[_0x331a2f(0x1da)](_0x331a2f(0x1ea)),_0xea1e3b=_0x18a2e8['PckZm'](buildSearchColumnsCode,_0x2357cd),_0x354b7e=buildFiltersCode(_0x2357cd),_0x2e04e5=_0x18a2e8['ufcte'](buildLookupOverrideCode,_0x1f0f67,_0x2357cd),_0x4c757a=buildAdvancedQuerySection(_0x2357cd),_0x265df1=buildFieldMappingCode(_0x2357cd),_0x556dac=_0x18a2e8[_0x331a2f(0x25c)](buildAuditColumnsSection,_0x2357cd,_0x331a2f(0x1c3)),_0x3c9c7e=_0x18a2e8[_0x331a2f(0x23c)](buildFormatResponseDataBody,_0x2357cd),_0x1a2b85=isSoftDeleteEnabled(_0x2357cd)?'(data\x20||\x20[]).map(__row\x20=>\x20{\x20const\x20__r\x20=\x20{\x20...__row\x20};\x20for\x20(const\x20__sdCol\x20of\x20'+JSON['stringify'](SOFT_DELETE_COLUMNS)+_0x331a2f(0xc8):_0x18a2e8[_0x331a2f(0x140)],_0x58dbb8=_0x2357cd[_0x331a2f(0x7d)]&&_0x2357cd['defaultScope'][_0x331a2f(0x1fb)]?_0x18a2e8['ufcte'](buildDefaultScopeSQL,_0x2357cd[_0x331a2f(0x7d)][_0x331a2f(0x1fb)],''):'',_0x17fa86=((()=>{const _0x33574b=_0x331a2f,_0x3fa2a1=_0x18a2e8[_0x33574b(0x13b)](softDeleteVisibilityFilter,_0x2357cd);return _0x18a2e8[_0x33574b(0x1c0)](_0x3fa2a1,null)?_0x33574b(0x165)+IS_DELETED_COLUMN+_0x33574b(0xab)+_0x3fa2a1:'';})()),_0x13cc79=_0x2357cd['viewName']||_0x2357cd[_0x331a2f(0x86)],_0x77c1e0=_0x2357cd[_0x331a2f(0x86)];return'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a//\x20AdvancedFilterHelper\x20dihapus\x20—\x20semua\x20filtering\x20ditangani\x20oleh\x20buildObjectFilterClause\x20dan\x20buildComplexWhereClause\x0a\x0a/**\x0a\x20*\x20'+_0x2bfb9a+_0x331a2f(0xdd)+_0x469b1f+'\x0a\x20*\x0a\x20*\x20Model\x20untuk\x20'+_0x1f0f67+'\x20yang\x20mewarisi\x20fungsi-fungsi\x20dari\x20BaseModel\x0a\x20*\x20Table:\x20'+_0x2357cd['tableName']+(_0x2357cd['viewName']?'\x0a\x20*\x20View:\x20'+_0x2357cd['viewName']:'')+'\x0a\x20*\x20Fields:\x20'+(_0x2357cd[_0x331a2f(0xa4)]?_0x2357cd['fieldName'][_0x331a2f(0xd6)]:0x0)+'\x20fields\x0a\x20*\x20Database:\x20PostgreSQL\x0a\x20*/\x0aclass\x20'+_0x2bfb9a+_0x331a2f(0x19b)+_0x1f0f67+'\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x419c96+'\x0a\x20\x20\x20\x20];\x0a\x20\x20\x20\x20const\x20schemaFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x3e49d5+'\x0a\x20\x20\x20\x20];\x0a\x20\x20\x20\x20const\x20readableFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x53ce38+'\x0a\x20\x20\x20\x20];\x0a\x20\x20\x20\x20const\x20datatablesFields\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20'+_0x137a7d+_0x331a2f(0xee)+(_0x2357cd['datatablesWhere']?JSON[_0x331a2f(0x15d)](_0x2357cd[_0x331a2f(0x1a7)]):_0x331a2f(0x154))+';\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20constructor\x20parent\x20dengan\x20nama\x20tabel,\x20validFields,\x20datatablesWhere,\x20dan\x20proyeksi\x20whitelist\x0a\x20\x20\x20\x20super(\x27'+_0x2357cd[_0x331a2f(0x86)]+_0x331a2f(0x18e)+(_0x2357cd['primaryKey']||_0x2357cd[_0x331a2f(0xa4)]&&_0x2357cd['fieldName'][0x0]||'id')+'\x27;\x0a\x0a\x20\x20\x20\x20//\x20Setup\x20viewName\x20untuk\x20operasi\x20read\x20jika\x20berbeda\x20dari\x20tableName\x0a\x20\x20\x20\x20this.viewName\x20=\x20\x27'+_0x13cc79+_0x331a2f(0x139)+_0x13cc79+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20read\x20(get,\x20list,\x20lookup,\x20datatables)\x0a\x20\x20\x20\x20this.writeSource\x20=\x20\x27'+_0x77c1e0+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20write\x20(add,\x20update,\x20delete)\x0a'+_0x556dac+'\x0a\x20\x20\x20\x20//\x20Flag\x20untuk\x20self-documenting\x20API\x20(endpoint\x20/info)\x0a\x20\x20\x20\x20this.hasViewQuery\x20=\x20'+!!_0x2357cd['viewQuery']+_0x331a2f(0x20b)+!!_0x2357cd['exportQuery']+';\x0a\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20this.advancedQueryTemplates\x20=\x20this.loadAdvancedQueryTemplates();\x0a\x20\x20\x20\x20'+(_0x2357cd['dateTimeFields']&&Object['keys'](_0x2357cd[_0x331a2f(0x172)])[_0x331a2f(0xd6)]>0x0?'\x0a\x20\x20\x20\x20//\x20DateTime\x20fields\x20configuration\x0a\x20\x20\x20\x20this.dateTimeFields\x20=\x20'+JSON['stringify'](_0x2357cd['dateTimeFields'],null,0x6)+_0x331a2f(0x9d):'')+(_0x2357cd['uploadConfig']&&_0x2357cd[_0x331a2f(0x133)]['fields']?_0x331a2f(0x1b2)+JSON[_0x331a2f(0x15d)](Object['keys'](_0x2357cd['uploadConfig']['fields']))+_0x331a2f(0x9d):'')+'\x0a'+_0x18a2e8[_0x331a2f(0x205)](_generateValidationConfig,_0x2357cd[_0x331a2f(0x1fc)])+'\x0a\x20\x20\x20\x20//\x20Model\x20metadata\x0a\x20\x20\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20endpointName:\x20\x27'+_0x1f0f67+_0x331a2f(0xb7)+_0x26887f+_0x331a2f(0xaf)+_0x2357cd['tableName']+_0x331a2f(0x20d)+_0x13cc79+'\x27,\x0a\x20\x20\x20\x20\x20\x20fieldCount:\x20'+(_0x2357cd['fieldName']?_0x2357cd['fieldName']['length']:0x0)+',\x0a\x20\x20\x20\x20\x20\x20databaseType:\x20\x27postgres\x27,\x0a\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x469b1f+_0x331a2f(0x18b)+JSON[_0x331a2f(0x15d)](_0x2357cd['_metadata']?.[_0x331a2f(0x207)]||[])+_0x331a2f(0x1b6)+_0x4c757a+'\x0a\x0a\x20\x20\x20\x20return\x20templates;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getListQuery\x20untuk\x20menyesuaikan\x20dengan\x20kebutuhan\x20'+_0x1f0f67+'\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20'+_0x1f0f67+_0x331a2f(0xcf)+_0x18a2e8[_0x331a2f(0x116)](buildQueryLoadingCode,_0x2357cd['datatablesQuery'],_0x331a2f(0x1be))+'\x0a\x0a\x20\x20\x20\x20//\x20Replace\x20any\x20remaining\x20placeholders\x20-\x20gunakan\x20readSource\x20untuk\x20operasi\x20read\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${tableName}/g,\x20this.readSource);\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${this.table}/g,\x20this.readSource);\x0a\x0a\x20\x20\x20\x20return\x20baseQuery;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20->\x20viewQuery\x20->\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20/read\x0a\x20\x20\x20*/\x0a\x20\x20getReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Priority\x201:\x20viewName\x20(real\x20database\x20view)\x0a\x20\x20\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20\x20\x20}\x0a'+(_0x2357cd['viewQuery']?'\x20\x20\x20\x20//\x20Priority\x202:\x20viewQuery\x20(virtual\x20view\x20dari\x20payload)\x0a\x20\x20\x20\x20'+buildQueryLoadingCode(_0x2357cd['viewQuery'],_0x18a2e8[_0x331a2f(0x1f5)])+_0x331a2f(0x258):'\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20readSource\x20langsung\x20(semua\x20kolom\x20tersedia)\x0a\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;')+_0x331a2f(0x10f)+_0x17fa86+'\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource'+(_0x17fa86?_0x331a2f(0x194)+_0x17fa86+'\x27':'')+';\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Always\x20wrap\x20CTE/JOIN\x20query\x20for\x20counting\x20with\x20filters\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Query:\x27,\x20countFilteredQuery);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Membuat\x20order\x20clause\x20menggunakan\x20buildSortColumnsClause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(resolvedSortColumns,\x20this.datatablesFields);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Menambahkan\x20pagination\x0a\x20\x20\x20\x20\x20\x20const\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${start}`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20-\x20wrap\x20CTE/JOIN\x20query\x20to\x20avoid\x20column\x20ambiguity\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20(whereClause\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20limitClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20+\x20\x22\x20\x22\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20draw:\x20parseInt(options.draw\x20||\x20\x271\x27,\x2010),\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsTotal:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsFiltered:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20data\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedDatatables(options,\x20result);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getDatatables:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Get\x20data\x20list\x20dengan\x20manual\x20pagination\x20untuk\x20endpoint\x20/list\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x20list\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20list\x20pagination\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getList(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20page\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20offset\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27code\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20select\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20limit\x20=\x201000\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20paginate\x20=\x20page\x20!==\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Check\x20if\x20data\x20exists\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20const\x20scInfo\x20=\x20sort_columns\x20&&\x20sort_columns.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20sort_columns.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20cacheInfo\x20=\x20`page:${page},\x20perPage:${perPage},\x20sort:${scInfo},\x20search:${searchValue\x20||\x20\x27none\x27}${where\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`;\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedList(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20HIT\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20MISS\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20let\x20baseQuery;\x0a\x20\x20\x20\x20\x20\x20if\x20(select\x20&&\x20Array.isArray(select)\x20&&\x20select.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20selectedValidColumns\x20=\x20select.filter(col\x20=>\x20this.readableFields.includes(col));\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(selectedValidColumns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20select\x20adalah\x20lapisan\x20di\x20atas\x20sumber\x20hasil\x20resolusi\x20(viewName\x20→\x20viewQuery\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20→\x20tableName),\x20bukan\x20jalur\x20terpisah\x20ke\x20tabel\x20mentah.\x20Bila\x20sumber\x20berupa\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20view/query\x20kompleks,\x20kolom\x20dipilih\x20dari\x20subquery\x20sumber\x20tersebut.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20readQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20isViewSource\x20=\x20readQuery.trim()\x20!==\x20(\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20isViewSource\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20(\x27\x20+\x20readQuery\x20+\x20\x27)\x20rf_read\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201b.\x20Deteksi\x20apakah\x20query\x20mengandung\x20JOIN\x20atau\x20CTE\x20(perlu\x20subquery\x20wrapping)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Build\x20WHERE\x20clause\x20untuk\x20search\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20`'+(_0x58dbb8?_0x331a2f(0x1ee)+_0x58dbb8:'')+_0x331a2f(0x1b9)+(_0x58dbb8?'whereClause\x20+=\x20`\x20AND\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;':'whereClause\x20=\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;')+'\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20\x20\x20let\x20whereParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(where\x20&&\x20(Array.isArray(where)\x20||\x20(where.conditions\x20&&\x20Array.isArray(where.conditions))))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(where,\x20params,\x20paramIndex,\x20\x27\x27,\x20this.readableFields);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20(\x27\x20+\x20whereResult.sql\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20whereResult.sql;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fail-closed\x20where-field:\x20teruskan\x20error\x20terstruktur\x20apa\x20adanya\x20(jangan\x20bungkus\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20jadi\x20pesan\x20generik)\x20agar\x20handler\x20bisa\x20memformat\x20respons\x20+\x20dev-gate\x20validFields.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(e.code\x20===\x20\x27INVALID_WHERE_FIELD\x27)\x20throw\x20e;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Menghitung\x20total\x20data\x20keseluruhan\x20(tanpa\x20filter)\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query'+_0x17fa86+_0x331a2f(0x1c1)+(_0x17fa86?_0x18a2e8['xBHMs'](_0x18a2e8['KRPAd'],_0x17fa86)+'\x27':'')+_0x331a2f(0x21a)+_0x1a2b85+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalRecords:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalUnfiltered:\x20totalRecords\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Store\x20result\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedList(options,\x20result);\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20SET\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getList:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20WHERE\x20clause\x20dari\x20filter\x20object\x0a\x20\x20\x20*\x20@param\x20{Object}\x20filters\x20-\x20Object\x20filter\x20dengan\x20format\x20{column:\x20value}\x0a\x20\x20\x20*\x20@returns\x20{string}\x20WHERE\x20clause\x20SQL\x20atau\x20empty\x20string\x0a\x20\x20\x20*/\x0a\x20\x20buildObjectFilterClause(filters)\x20{\x0a\x20\x20\x20\x20if\x20(!filters\x20||\x20typeof\x20filters\x20!==\x20\x27object\x27\x20||\x20Object.keys(filters).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[column,\x20value]\x20of\x20Object.entries(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20kolom\x20harus\x20ada\x20dalam\x20validFields\x0a\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(column)\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Escape\x20value\x20untuk\x20mencegah\x20SQL\x20injection\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20value.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20\x27${escapedValue}\x27`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20conditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a\x20\x20}\x0a\x0a'+_0xea1e3b+'\x0a\x0a'+_0x354b7e+'\x0a\x0a'+_0x2e04e5+'\x0a\x0a'+_0x265df1+'\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20formatResponseData\x20untuk\x20'+_0x1f0f67+_0x331a2f(0xf1)+_0x1f0f67+_0x331a2f(0x1b1)+_0x3c9c7e+_0x331a2f(0x109)+_0x18a2e8['WCVKq'](_generateValidateFieldConstraints)+'\x0a\x20\x20'+_0x18a2e8['FHqXA'](generateCompositeMethods,_0x2357cd)+generateDeleteMethod(_0x2357cd)+_0x18a2e8[_0x331a2f(0x131)](generateRestoreMethod,_0x2357cd)+_0x18a2e8[_0x331a2f(0x23c)](generateSoftDeleteFkParentsCheck,_0x2357cd)+'\x0a}\x0a\x0a//\x20Export\x20singleton\x20instance\x0amodule.exports\x20=\x20new\x20'+_0x2bfb9a+_0x331a2f(0x1ff);}function getEnabledActions(_0x539494){const _0x51e5dc=a0_0xd0d7,_0x25ac39={'wtcLS':function(_0x370897,_0x5e4c52){return _0x370897!==_0x5e4c52;},'JyDXw':'object'};if(!_0x539494[_0x51e5dc(0x1bb)]||_0x25ac39['wtcLS'](typeof _0x539494[_0x51e5dc(0x1bb)],_0x25ac39[_0x51e5dc(0x1cc)]))return[];return Object['entries'](_0x539494['action'])['filter'](([,_0xe41460])=>_0xe41460)['map'](([_0x21e491])=>_0x21e491);}function buildEndpointFunctions(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0x8a0354,_0x3b764d,_0xb536a=null,_0x3e141e=![]){const _0x44f80d=a0_0xd0d7,_0x1bf7b6={'KYzCG':function(_0x59e84e,_0x42c38e,_0x598563,_0xe15874,_0x4040bc,_0x36f682){return _0x59e84e(_0x42c38e,_0x598563,_0xe15874,_0x4040bc,_0x36f682);},'vTjGR':function(_0x146440,_0xf634ee,_0x14447d,_0x386eab,_0x5e7d82,_0x154371){return _0x146440(_0xf634ee,_0x14447d,_0x386eab,_0x5e7d82,_0x154371);},'DVLBs':function(_0x58d403,_0x235c03){return _0x58d403(_0x235c03);},'ZzxgS':function(_0x2bb927,_0x24e462,_0x4b279e,_0x161d59,_0x218bbe){return _0x2bb927(_0x24e462,_0x4b279e,_0x161d59,_0x218bbe);},'gyxbW':function(_0xa287f2,_0xabd1c9,_0x12ac93,_0x4e2609,_0x620362){return _0xa287f2(_0xabd1c9,_0x12ac93,_0x4e2609,_0x620362);}},_0x34d68b=_0x38a5e7['action']||{},_0x2b9096=getEnabledActions(_0x38a5e7);let _0xa610e0='';if(!_0xb536a){const _0x224ad3=FileUtils['toCamelCase'](_0x2aff0a);_0xb536a=_0x224ad3+'Model';}return _0x34d68b[_0x44f80d(0xea)]&&(_0xa610e0+=generateDatatablesFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b[_0x44f80d(0xd1)]&&(_0xa610e0+=generateCreateFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a,_0x3e141e)),_0x34d68b[_0x44f80d(0x232)]&&(_0xa610e0+=_0x1bf7b6['KYzCG'](generateUpdateFunction,_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a,_0x3e141e)),_0x34d68b[_0x44f80d(0x74)]&&(_0xa610e0+=generateAdjustFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b[_0x44f80d(0xfc)]&&(_0xa610e0+=generateAggregateFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b[_0x44f80d(0x22c)]&&(_0xa610e0+=_0x1bf7b6[_0x44f80d(0x1ab)](generateDeleteFunction,_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a,_0x3e141e)),_0x34d68b['restore']&&_0x1bf7b6['DVLBs'](isSoftDeleteEnabled,_0x38a5e7)&&(_0xa610e0+=_0x1bf7b6[_0x44f80d(0xd3)](generateRestoreFunction,_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b['first']&&(_0xa610e0+=generateFirstFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0x8a0354,_0x3b764d,_0xb536a)),_0x34d68b[_0x44f80d(0x226)]&&(_0xa610e0+=generateLookupFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0x8a0354,_0x3b764d,_0xb536a)),_0x34d68b['read']&&(_0xa610e0+=generateReadFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b[_0x44f80d(0x1dd)]&&(_0xa610e0+=generateCreateCompositeFunction(_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b['updateComposite']&&(_0xa610e0+=_0x1bf7b6['ZzxgS'](generateUpdateCompositeFunction,_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b[_0x44f80d(0x103)]&&(_0xa610e0+=_0x1bf7b6[_0x44f80d(0xd3)](generateReadCompositeFunction,_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x34d68b['workflow']&&(_0xa610e0+=_0x1bf7b6['gyxbW'](generateWorkflowFunction,_0x4f5ddb,_0x2aff0a,_0x38a5e7,_0xb536a)),_0x2b9096[_0x44f80d(0xd6)]===0x0&&(_0xa610e0+=_0x44f80d(0x187)),_0xa610e0;}function generateDatatablesFunction(_0x240807,_0x3565f7,_0x60cd17,_0x3c3190=null){const _0x4b1df8=a0_0xd0d7;if(!_0x3c3190){const _0x5506f8=FileUtils['toCamelCase'](_0x3565f7);_0x3c3190=_0x5506f8+_0x4b1df8(0x125);}return'\x0a//\x20POST\x20/api/'+_0x240807+'/'+_0x3565f7+'/datatables\x20-\x20Data\x20untuk\x20DataTables\x0arouter.post(\x27/datatables\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x3565f7+'/datatables:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Extract\x20parameters\x20dari\x20request\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20req.body.search?.value\x20||\x20req.body.searchValue\x20||\x20req.body.search_value\x20||\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20req.body.searchBy\x20||\x20req.body.search_by\x20||\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage:\x20parseInt(req.body.length\x20||\x20req.body.pagination?.perpage\x20||\x2010,\x2010),\x0a\x20\x20\x20\x20\x20\x20start:\x20parseInt(req.body.start\x20||\x200,\x2010),\x0a\x20\x20\x20\x20\x20\x20draw:\x20req.body.draw\x20||\x20\x271\x27\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20sort_columns\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20options.sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Pass\x20format\x20DataTables\x20parameters\x20jika\x20ada\x20(fallback)\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][column]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20=\x20req.body[\x27order[0][column]\x27];\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][dir]\x27]\x20=\x20req.body[\x27order[0][dir]\x27];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20filter\x20dalam\x20format\x20filters\x20object\x0a\x20\x20\x20\x20if\x20(req.body.filters\x20&&\x20typeof\x20req.body.filters\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Filter\x20out\x20values\x20that\x20should\x20be\x20ignored\x20(\x22all\x22,\x20\x22-\x22,\x20\x22\x22,\x20null,\x20undefined)\x0a\x20\x20\x20\x20\x20\x20const\x20filteredFilters\x20=\x20{};\x0a\x20\x20\x20\x20\x20\x20Object.keys(req.body.filters).forEach(key\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20req.body.filters[key];\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ignore\x20filter\x20if\x20value\x20is\x20\x22all\x22,\x20\x22-\x22,\x20empty\x20string,\x20null,\x20or\x20undefined\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20\x22all\x22\x20&&\x20value\x20!==\x20\x22-\x22\x20&&\x20value\x20!==\x20\x22\x22\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20filteredFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Only\x20set\x20filters\x20if\x20there\x20are\x20valid\x20filters\x20remaining\x0a\x20\x20\x20\x20\x20\x20if\x20(Object.keys(filteredFilters).length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.filters\x20=\x20filteredFilters;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Applied\x20filters\x20(ignoring\x20\x22all\x22,\x20\x22-\x22,\x20empty\x20values):\x27,\x20JSON.stringify(filteredFilters,\x20null,\x202));\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27All\x20filters\x20ignored\x20due\x20to\x20\x22all\x22,\x20\x22-\x22,\x20or\x20empty\x20values\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20typeof\x20req.body.where\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x20(mendukung\x20format\x20array\x20legacy\x20dan\x20format\x20object\x20baru)\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20||\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Applied\x20where\x20conditions:\x27,\x20JSON.stringify(req.body.where,\x20null,\x202));\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Invalid\x20where\x20format,\x20ignoring\x20where\x20parameter\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20parameters\x0a\x20\x20\x20\x20if\x20(options.perPage\x20>\x201000)\x20{\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x201000;\x20//\x20Limit\x20untuk\x20mencegah\x20overload\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(options.perPage\x20<\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x2010;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x3c3190+_0x4b1df8(0x1f7)+_0x3565f7+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20options:\x20options,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json(result);\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x3565f7+'\x20datatables:\x27,\x20error);\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27INVALID_WHERE_FIELD\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${error.invalidField}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields:\x20error.validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x3565f7+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateFunction(_0x337736,_0x4de05f,_0x2d1a70,_0x41c212=null,_0xbb9e1c=![]){const _0x3ff499=a0_0xd0d7,_0x496052={'oomXn':function(_0x435fd1,_0x41c990){return _0x435fd1(_0x41c990);}};if(!_0x41c212){const _0x50a1b6=FileUtils['toCamelCase'](_0x4de05f);_0x41c212=_0x50a1b6+_0x3ff499(0x125);}const _0x19c8f7=_0x496052[_0x3ff499(0x1e5)](isSoftDeleteEnabled,_0x2d1a70)?'\x0a\x20\x20\x20\x20for\x20(const\x20__sdCol\x20of\x20'+JSON[_0x3ff499(0x15d)](SOFT_DELETE_COLUMNS)+_0x3ff499(0x180):'',_0x45070c=hasSoftDeleteFkParents(_0x2d1a70)?_0x3ff499(0x14a)+_0x41c212+'.checkSoftDeleteFkParents(req.body,\x20\x27create\x27);\x0a':'',_0x2b469c=hasSoftDeleteFkParents(_0x2d1a70)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20parent\x20soft-delete\x20terhapus/absen\x20→\x20422\x20(shape\x20selaras\x20FK\x20restore\x20R20).\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'',_0x491ef3=_0xbb9e1c?_0x3ff499(0x10b)+_0x337736+_0x3ff499(0x235)+_0x4de05f+_0x3ff499(0x119)+(_0x2d1a70['primaryKey']||'id')+_0x3ff499(0xb6)+_0x2d1a70['tableName']+_0x3ff499(0x24a):'',_0x5d6cb7=_0xbb9e1c?_0x3ff499(0x244):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x337736+'/'+_0x4de05f+_0x3ff499(0xff)+_0x4de05f+_0x3ff499(0x1d8)+_0x4de05f+'/create:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x5d6cb7+'\x0a\x20\x20\x20\x20//\x20Validasi\x20data\x20dengan\x20model\x20jika\x20tersedia\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x41c212+_0x3ff499(0xae)+_0x41c212+_0x3ff499(0x198)+_0x19c8f7+'\x0a'+_0x45070c+_0x3ff499(0xfd)+_0x2d1a70[_0x3ff499(0x86)]+_0x3ff499(0xcc)+_0x41c212+'.addData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x41c212+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x4de05f+_0x3ff499(0x199)+(_0x2d1a70['primaryKey']||'id')+_0x3ff499(0xe9)+_0x491ef3+_0x3ff499(0x18f)+_0x4de05f+_0x3ff499(0x227)+_0x4de05f+':\x27,\x20error);\x0a'+_0x2b469c+'\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x20//\x20PostgreSQL\x20foreign\x20key\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adding\x20'+_0x4de05f+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateUpdateFunction(_0x1474f9,_0x2e86e4,_0x18d015,_0x50910e=null,_0x132881=![]){const _0x66b310=a0_0xd0d7,_0x2e2524={'HbiCE':function(_0x13a59c,_0x215421){return _0x13a59c(_0x215421);}};if(!_0x50910e){const _0x2c5e92=FileUtils[_0x66b310(0x8f)](_0x2e86e4);_0x50910e=_0x2c5e92+'Model';}const _0x3ea3b2=_0x18d015[_0x66b310(0x1d6)]?',\x20'+JSON['stringify'](_0x18d015[_0x66b310(0x1d6)]):'',_0x1a9ad1=_0x18d015['requestScope']?_0x66b310(0xb9)+_0x50910e+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x2e86e4+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x2c9034=_0x2e2524[_0x66b310(0x14f)](softDeleteVisibilityFilter,_0x18d015),_0x59415f=_0x2c9034!==null?_0x66b310(0x11b)+_0x50910e+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20\x27'+IS_DELETED_COLUMN+_0x66b310(0x239)+_0x2c9034+'\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!__sdCheck.success\x20||\x20!__sdCheck.data\x20||\x20__sdCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x2e86e4+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}':'',_0x523f46=isSoftDeleteEnabled(_0x18d015)?'\x0a\x20\x20\x20\x20for\x20(const\x20__sdCol\x20of\x20'+JSON[_0x66b310(0x15d)](SOFT_DELETE_COLUMNS)+_0x66b310(0x180):'',_0x4288dd=hasSoftDeleteFkParents(_0x18d015)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20cek\x20parent\x20aktif\x20hanya\x20untuk\x20kolom\x20FK\x20yang\x20disertakan\x20body\x20(pre-check\x20422).\x0a\x20\x20\x20\x20await\x20'+_0x50910e+'.checkSoftDeleteFkParents(req.body,\x20\x27update\x27);\x0a':'',_0xdabec9=_0x2e2524[_0x66b310(0x14f)](hasSoftDeleteFkParents,_0x18d015)?'\x0a\x20\x20\x20\x20//\x20FK-SD-1:\x20parent\x20soft-delete\x20terhapus/absen\x20→\x20422\x20(shape\x20selaras\x20FK\x20restore\x20R20).\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'',_0x334f2e=_0x132881?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20UPDATE\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabledUpdate\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabledUpdate\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.update)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishUpdate(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x1474f9+_0x66b310(0x235)+_0x2e86e4+_0x66b310(0x1f9)+(_0x18d015['primaryKey']||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x18d015[_0x66b310(0x86)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0x9f7019=_0x132881?_0x66b310(0x244):_0x66b310(0xe8);return _0x66b310(0x246)+_0x1474f9+'/'+_0x2e86e4+_0x66b310(0x98)+_0x2e86e4+'\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x2e86e4+'/update:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x9f7019+_0x66b310(0x22f)+(_0x18d015[_0x66b310(0x1cd)]||'id')+_0x66b310(0x221)+_0x1a9ad1+_0x59415f+'\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20primary\x20key\x20adalah\x20UUID\x20yang\x20valid\x20(jika\x20primary\x20key\x20adalah\x20\x27id\x27)\x0a\x20\x20\x20\x20const\x20uuidRegex\x20=\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\x0a\x20\x20\x20\x20const\x20isValidUUID\x20=\x20primaryKey\x20===\x20\x27id\x27\x20&&\x20uuidRegex.test(req.body[primaryKey]);\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20data\x20dengan\x20model\x20jika\x20tersedia\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x50910e+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x50910e+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20sanitized\x20data\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}'+_0x523f46+'\x0a'+_0x4288dd+_0x66b310(0xc3)+_0x18d015['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x50910e+_0x66b310(0x10d)+_0x3ea3b2+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x50910e+_0x66b310(0x1a5)+_0x3ea3b2+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20UPDATE\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x2e86e4+'\x20data\x20updated\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a'+_0x334f2e+_0x66b310(0x196)+_0x2e86e4+_0x66b310(0x127)+_0x2e86e4+':\x27,\x20error);\x0a'+_0xdabec9+_0x66b310(0xc9)+_0x2e86e4+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x2e86e4+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAdjustFunction(_0x239013,_0x5affcb,_0x448229,_0x53a422=null){const _0x4777a9=a0_0xd0d7;if(!_0x53a422){const _0xa156b1=FileUtils['toCamelCase'](_0x5affcb);_0x53a422=_0xa156b1+_0x4777a9(0x125);}const _0x522a73=_0x448229['adjustConfig']?JSON['stringify'](_0x448229['adjustConfig']):'{}',_0x557613=_0x448229['fieldPolicy']?',\x20'+JSON['stringify'](_0x448229['fieldPolicy']):'',_0x59595a=_0x448229[_0x4777a9(0x1d6)]?',\x20null,\x20'+JSON[_0x4777a9(0x15d)](_0x448229[_0x4777a9(0x1d6)]):'',_0x496033=_0x448229[_0x4777a9(0x25e)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x53a422+_0x4777a9(0x179)+_0x5affcb+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return _0x4777a9(0x246)+_0x239013+'/'+_0x5affcb+_0x4777a9(0x16c)+_0x5affcb+'\x20(atomic\x20increment/decrement)\x0arouter.post(\x27/adjust\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x448229[_0x4777a9(0x1cd)]||'id')+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20adjust`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20adjustments\x20array\x0a\x20\x20\x20\x20if\x20(!req.body.adjustments\x20||\x20!Array.isArray(req.body.adjustments)\x20||\x20req.body.adjustments.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27adjustments\x20array\x20is\x20required\x20and\x20must\x20not\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x496033+_0x4777a9(0x13e)+_0x522a73+';\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x448229['tableName']+_0x4777a9(0xcc)+_0x53a422+'.adjustData(req.body,\x20adjustConfig,\x20eventContext'+_0x557613+_0x4777a9(0x225)+_0x53a422+_0x4777a9(0x9f)+_0x59595a+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x5affcb+_0x4777a9(0x104)+_0x5affcb+_0x4777a9(0xef)+_0x5affcb+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20403)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Pro\x20Feature\x20Required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upgrade:\x20\x27https://restforge.dev/pricing\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27constraint\x20violation\x27)\x20||\x20error.message.includes(\x27below\x20minimum\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Constraint\x20violation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27not\x20configured\x20for\x20adjustment\x27)\x20||\x20error.message.includes(\x27is\x20required\x20for\x20adjust\x27)\x20||\x20error.message.includes(\x27must\x20be\x20a\x20non-zero\x20number\x27)\x20||\x20error.message.includes(\x27not\x20a\x20valid\x20field\x27)\x20||\x20error.message.includes(\x27must\x20not\x20be\x20empty\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x5affcb+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adjusting\x20'+_0x5affcb+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAggregateFunction(_0x1d4c69,_0x81e718,_0x47d3ef,_0x1ba768=null){const _0x660922=a0_0xd0d7;if(!_0x1ba768){const _0x5f3339=FileUtils['toCamelCase'](_0x81e718);_0x1ba768=_0x5f3339+_0x660922(0x125);}const _0x4548b1=_0x47d3ef['aggregateConfig']?JSON[_0x660922(0x15d)](_0x47d3ef['aggregateConfig']):'{}';return'\x0a//\x20POST\x20/api/'+_0x1d4c69+'/'+_0x81e718+_0x660922(0x240)+_0x4548b1+_0x660922(0x128)+_0x1ba768+_0x660922(0x22b)+_0x81e718+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20403)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Pro\x20Feature\x20Required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upgrade:\x20\x27https://restforge.dev/pricing\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20400\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20a\x20valid\x20field\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20aggregate\x20function\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20alias\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27only\x20allowed\x20with\x20COUNT\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20defined\x20in\x20aggregate\x20config\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27no\x20join\x20definitions\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20aggregating\x20'+_0x81e718+_0x660922(0xf4);}function hasSoftDeleteFkRestrictChildren(_0x202bbe){const _0x3cafec=a0_0xd0d7;return Array[_0x3cafec(0xa0)](_0x202bbe['softDeleteFkChildren'])&&_0x202bbe['softDeleteFkChildren']['some'](_0x47685f=>_0x47685f&&_0x47685f['onDelete']===_0x3cafec(0x186));}function hasCascadeChildren(_0x484a06){const _0x5c5743=a0_0xd0d7,_0x42f32d={'hzdrn':_0x5c5743(0x9a)},_0x46bf0b=_0x484a06&&_0x484a06['softDeleteCascadeTree'];return!!(_0x46bf0b&&typeof _0x46bf0b===_0x5c5743(0x12d)&&typeof _0x46bf0b[_0x5c5743(0x212)]===_0x42f32d[_0x5c5743(0x21c)]&&_0x46bf0b[_0x5c5743(0x212)]&&_0x46bf0b[_0x5c5743(0x24b)]&&typeof _0x46bf0b['nodes']==='object'&&_0x46bf0b['nodes'][_0x46bf0b['master']]);}function generateDeleteFunction(_0x212f25,_0x270b6a,_0x2ac632,_0x15ace6=null,_0x20a8d9=![]){const _0xc7a7f0=a0_0xd0d7,_0x56f602={'DhLZK':function(_0x5c4d98,_0x2fd9f0){return _0x5c4d98(_0x2fd9f0);}};if(!_0x15ace6){const _0x2b42ad=FileUtils['toCamelCase'](_0x270b6a);_0x15ace6=_0x2b42ad+_0xc7a7f0(0x125);}const _0x4bbb75=_0x20a8d9?_0xc7a7f0(0x175)+_0x212f25+_0xc7a7f0(0x235)+_0x270b6a+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x2ac632[_0xc7a7f0(0x1cd)]||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2ac632['tableName']+_0xc7a7f0(0x24a):'',_0x5d66b4=_0x20a8d9?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x212f25+'/'+_0x270b6a+'/delete\x20-\x20Menghapus\x20data\x20'+_0x270b6a+'\x0arouter.post(\x27/delete\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x270b6a+'/delete:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x5d66b4+_0xc7a7f0(0xc0)+_0x15ace6+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20firstCondition.key,\x20value:\x20firstCondition.value\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!existingData.success\x20||\x20!existingData.data\x20||\x20existingData.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x270b6a+_0xc7a7f0(0xa2)+_0x2ac632[_0xc7a7f0(0x86)]+_0xc7a7f0(0xcc)+_0x15ace6+_0xc7a7f0(0x1b8)+_0x15ace6+_0xc7a7f0(0x11e)+_0x270b6a+_0xc7a7f0(0x200)+_0x4bbb75+'\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menghapus\x20data\x20'+_0x270b6a+':\x27,\x20error);\x0a'+(_0x2ac632['softDelete']?.['enabled']?_0xc7a7f0(0x18d)+_0x270b6a+_0xc7a7f0(0x147):'')+(_0x56f602['DhLZK'](hasSoftDeleteFkRestrictChildren,_0x2ac632)||hasCascadeChildren(_0x2ac632)?_0xc7a7f0(0xdb):'')+'\x0a\x20\x20\x20\x20//\x20Handle\x20foreign\x20key\x20constraint\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x20//\x20PostgreSQL\x20foreign\x20key\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Cannot\x20delete:\x20record\x20is\x20still\x20referenced\x20by\x20other\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20deleting\x20'+_0x270b6a+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateRestoreFunction(_0x372fe8,_0x293ee0,_0x2a29c5,_0xf2682f=null){const _0x1203d1=a0_0xd0d7;if(!_0xf2682f){const _0x2dca15=FileUtils['toCamelCase'](_0x293ee0);_0xf2682f=_0x2dca15+_0x1203d1(0x125);}return'\x0a//\x20POST\x20/api/'+_0x372fe8+'/'+_0x293ee0+_0x1203d1(0x252)+_0x293ee0+'\x20yang\x20ter-soft-delete\x20(R20)\x0arouter.post(\x27/restore\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Restore\x20adalah\x20event\x20lifecycle:\x20model.restoreData\x20menjalankan\x20transaksinya\x20sendiri\x0a\x20\x20\x20\x20//\x20(SELECT\x20FOR\x20UPDATE\x20→\x20strip/konflik/FK\x20→\x20reset\x20→\x20COMMIT\x20→\x20invalidateCache).\x0a\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2a29c5[_0x1203d1(0x86)]+_0x1203d1(0x10c)+_0xf2682f+'.restoreData(req.body,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x293ee0+'\x20data\x20restored\x20successfully`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20me-restore\x20data\x20'+_0x293ee0+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20R20:\x20restoreData\x20melempar\x20statusCode\x20untuk\x20kondisi\x20terkontrol.\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20404)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x293ee0+'\x20data\x20not\x20found\x20or\x20not\x20deleted\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Unprocessable\x20Entity\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20Backstop\x20konflik:\x20UNIQUE\x20violation\x20saat\x20UPDATE\x20(race\x20konkuren)\x20→\x20409.\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Conflict\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Cannot\x20restore:\x20the\x20reusable\x20code\x20is\x20already\x20in\x20use\x20by\x20an\x20active\x20record\x20(unique\x20constraint)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20restoring\x20'+_0x293ee0+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateFirstFunction(_0x450a3e,_0x125980,_0x21eadd,_0x4e516e,_0x41bb2e,_0x3ec7b1=null){const _0x14a6bb=a0_0xd0d7,_0x30a267={'PFqIc':function(_0x4578fb,_0xbbcbda){return _0x4578fb(_0xbbcbda);},'icjAx':function(_0x76d7c,_0x2e0bb1){return _0x76d7c!==_0x2e0bb1;}};if(!_0x3ec7b1){const _0x90459=FileUtils['toCamelCase'](_0x125980);_0x3ec7b1=_0x90459+'Model';}const _0x41e1f2=_0x21eadd[_0x14a6bb(0x6c)]||{},_0x3a866e=_0x41e1f2[_0x14a6bb(0x117)]||_0x21eadd[_0x14a6bb(0xa4)]||[],_0x4d7fce=_0x21eadd['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope\x20&&\x20result.data\x20&&\x20result.data.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20record\x20=\x20result.data[0];\x0a\x20\x20\x20\x20\x20\x20if\x20(record[req._requestScope.column]\x20!==\x20undefined\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20String(record[req._requestScope.column])\x20!==\x20String(req._requestScope.value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x125980+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x19aa8e=_0x30a267['PFqIc'](softDeleteVisibilityFilter,_0x21eadd),_0x415cf6=_0x30a267['icjAx'](_0x19aa8e,null)?_0x14a6bb(0x248)+IS_DELETED_COLUMN+'\x27,\x20value:\x20'+_0x19aa8e+'\x20});':'',_0x3d3b01=_0x19aa8e!==null?'\x0a\x20\x20\x20\x20if\x20(!result.data\x20||\x20result.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x125980+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}':'';return'\x0a//\x20POST\x20/api/'+_0x450a3e+'/'+_0x125980+_0x14a6bb(0x224)+_0x125980+_0x14a6bb(0x1dc)+_0x125980+_0x14a6bb(0x17c)+(_0x21eadd['primaryKey']||'id')+_0x14a6bb(0x12c)+(_0x21eadd[_0x14a6bb(0x1cd)]||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Tolak\x20format\x20advanced\x20(conditions/logic)\x0a\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20ada\x20di\x20readableFields\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x3a866e)+';\x0a\x20\x20\x20\x20if\x20(!validFields.includes(req.body.where.key))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field:\x20${req.body.where.key}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x0a\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20req.body.select.filter(field\x20=>\x20!validFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20{\x20validFields\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Convert\x20ke\x20array\x20format\x20untuk\x20kompatibilitas\x20dengan\x20model.getData()\x20->\x20buildComplexWhereClause()\x0a\x20\x20\x20\x20const\x20getPayload\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20req.body.where.key,\x20value:\x20req.body.where.value\x20}],\x0a\x20\x20\x20\x20\x20\x20select:\x20req.body.select\x0a\x20\x20\x20\x20};'+_0x415cf6+'\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x3ec7b1+'.getData(getPayload);'+_0x3d3b01+'\x0a'+_0x4d7fce+_0x14a6bb(0x178)+_0x125980+_0x14a6bb(0xc4)+_0x125980+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x125980+_0x14a6bb(0xf4);}function generateLookupFunction(_0x68c825,_0x3fc5af,_0x1ac0a1,_0x233fce,_0x57b3b3,_0x2f0f01=null){const _0x40522e=a0_0xd0d7,_0xaff95a={'mRLkI':'code','xArMm':'\x22,\x20\x22'};if(!_0x2f0f01){const _0x3e1edd=FileUtils['toCamelCase'](_0x3fc5af);_0x2f0f01=_0x3e1edd+'Model';}const _0x49d012=_0x1ac0a1[_0x40522e(0x21b)]||null,_0x1a0dd9=_0x1ac0a1['_fieldProjections']||{},_0x673a72=_0x1a0dd9['readableFields']||_0x1ac0a1[_0x40522e(0xa4)]||[];return'\x0a//\x20GET\x20/api/'+_0x68c825+'/'+_0x3fc5af+'/lookup\x20-\x20Pencarian\x20'+_0x3fc5af+_0x40522e(0x251)+_0x3fc5af+'\x20lookup\x20request:\x20search=${search},\x20filters=`,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20lookup\x20data\x20dengan\x20filters\x20tambahan\x0a\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x2f0f01+_0x40522e(0x241)+_0x3fc5af+'\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20looking\x20up\x20'+_0x3fc5af+_0x40522e(0x23b)+_0x68c825+'/'+_0x3fc5af+'/lookup\x20-\x20Mendapatkan\x20data\x20'+_0x3fc5af+'\x20untuk\x20lookup\x20dengan\x20filtering\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20X-Request-Mode\x20header\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x20\x20\x20\x20console.log(`X-Request-Mode\x20header\x20for\x20POST\x20lookup:\x20${requestMode}`);\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27static\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20static\x20for\x20POST\x20method\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20\x27Contoh\x20penggunaan:\x20Tambahkan\x20header\x20X-Request-Mode:\x20static\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Support\x20untuk\x20fieldNameLookup\x20config\x0a\x20\x20\x20\x20\x20\x20const\x20lookupConfig\x20=\x20'+JSON[_0x40522e(0x15d)](_0x49d012)+_0x40522e(0x176)+_0x57b3b3+_0x40522e(0x23e)+(_0x233fce['all']?_0x233fce['all']['find'](_0x4c938e=>_0x4c938e!=='id')||_0x40522e(0x107):_0xaff95a[_0x40522e(0x137)])+'\x22,\x20\x22value\x22:\x20\x22AP2506-01\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20defaultSelect\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_sql_expression:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0x57b3b3+'||\x27\x20-\x20\x27||code\x20as\x20display_text\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_custom_lookup:\x20lookupConfig\x20?\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[lookupConfig.idField,\x20lookupConfig.textField],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22note\x22:\x20\x22Using\x20fieldNameLookup\x20configuration\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20:\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x57b3b3+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%Portal%\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x57b3b3+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%system%\x22,\x20\x22sensitive\x22:\x20false\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+(_0x233fce['textFields']?_0x233fce[_0x40522e(0x1e8)]['slice'](0x0,0x4)['join'](_0xaff95a['xArMm']):_0x1ac0a1['fieldName'][_0x40522e(0x7c)](0x0,0x4)['join'](_0xaff95a['xArMm']))+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_with_ordering:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0x57b3b3+_0x40522e(0x1ae)+(_0x1ac0a1[_0x40522e(0xa4)][0x1]||_0x57b3b3)+_0x40522e(0xfe)+_0x57b3b3+_0x40522e(0xc6)+_0x3fc5af+'/lookup:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20ada\x20where\x20clause\x20(format\x20baru)\x20atau\x20selected_tag\x20(format\x20lama)\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20baru\x20dengan\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20new\x20format\x20with\x20where\x20clause\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x233fce[_0x40522e(0x1a0)]?_0x233fce[_0x40522e(0x1a0)][_0x40522e(0x1a6)](_0x4a6812=>_0x4a6812!=='id')||_0xaff95a['mRLkI']:_0xaff95a['mRLkI'])+_0x40522e(0xbf)+_0x57b3b3+_0x40522e(0x250)+_0x57b3b3+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%Portal%\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x57b3b3+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%system%\x22,\x20\x22sensitive\x22:\x20false\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+(_0x233fce['textFields']?_0x233fce['textFields']['slice'](0x0,0x4)['join'](_0xaff95a['xArMm']):_0x1ac0a1['fieldName']['slice'](0x0,0x4)['join']('\x22,\x20\x22'))+_0x40522e(0x1bc)+JSON[_0x40522e(0x15d)](_0x673a72)+_0x40522e(0x142)+_0x2f0f01+_0x40522e(0x25d)+_0x3fc5af+'\x20static\x20lookup\x20request\x20with\x20selected_tag:\x20${selectedTag}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Jika\x20ada\x20field\x20select\x20atau\x20sort_columns,\x20gunakan\x20getLookupDataWithFilter\x20dengan\x20body\x20yang\x20dimodifikasi\x0a\x20\x20\x20\x20\x20\x20if\x20((req.body.select\x20&&\x20Array.isArray(req.body.select))\x20||\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Found\x20select\x20fields\x20or\x20sort_columns,\x20using\x20getLookupDataWithFilter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Buat\x20body\x20baru\x20dengan\x20where\x20kosong\x20untuk\x20mengambil\x20semua\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20modifiedBody\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[]\x20//\x20Empty\x20where\x20untuk\x20mengambil\x20semua\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x2f0f01+'.getLookupDataWithFilter(modifiedBody);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Static\x20lookup\x20with\x20select/order\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectedTag:\x20selectedTag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20query:\x20modifiedBody,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x20dengan\x20method\x20lama\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x2f0f01+_0x40522e(0x1a8)+_0x3fc5af+_0x40522e(0x217)+_0x3fc5af+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateReadFunction(_0xde5799,_0x2a81e9,_0x5603a3,_0xa7c32a=null){const _0x2bacfc=a0_0xd0d7;if(!_0xa7c32a){const _0x5a139e=FileUtils[_0x2bacfc(0x8f)](_0x2a81e9);_0xa7c32a=_0x5a139e+'Model';}const _0x458cde=_0x5603a3[_0x2bacfc(0x6c)]||{},_0x35e194=_0x458cde[_0x2bacfc(0x117)]||_0x5603a3['fieldName']||[];return _0x2bacfc(0x246)+_0xde5799+'/'+_0x2a81e9+'/read\x20-\x20Manual\x20pagination\x20endpoint\x0arouter.post(\x27/read\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x2a81e9+'/read:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Deteksi\x20mode:\x20paginasi\x20(page\x20dikirim)\x20atau\x20non-paginasi\x20(page\x20tidak\x20dikirim)\x0a\x20\x20\x20\x20const\x20paginate\x20=\x20req.body.page\x20!==\x20undefined;\x0a\x20\x20\x20\x20const\x20page\x20=\x20paginate\x20?\x20parseInt(req.body.page,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20perPage\x20=\x20paginate\x20?\x20parseInt(req.body.per_page\x20||\x2010,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20limit\x20=\x20!paginate\x20?\x20Math.min(Math.max(parseInt(req.body.limit\x20||\x201000,\x2010),\x201),\x205000)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20searchValue\x20=\x20req.body.search_value\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20const\x20searchBy\x20=\x20req.body.search_by\x20||\x20\x27'+(_0x5603a3['primaryKey']||_0x5603a3[_0x2bacfc(0xa4)][0x0]||'id')+'\x27;\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20sort_columns\x0a\x20\x20\x20\x20let\x20sort_columns\x20=\x20[];\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20let\x20where\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20typeof\x20req.body.where\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20||\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20select\x20untuk\x20kolom\x20selektif\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON[_0x2bacfc(0x15d)](_0x35e194)+_0x2bacfc(0xdc)+_0xa7c32a+_0x2bacfc(0x126)+_0x2a81e9+_0x2bacfc(0x97)+_0x2a81e9+'\x20list\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateCompositeFunction(_0x278250,_0x42ed14,_0x8bd309,_0x49e0dd=null){const _0xde856d=a0_0xd0d7,_0x4332e2={'lzvAd':_0xde856d(0x141),'uQkmw':'\x20(with\x20detail\x20items)'};if(!_0x49e0dd){const _0x4bbba1=FileUtils[_0xde856d(0x8f)](_0x42ed14);_0x49e0dd=_0x4bbba1+_0xde856d(0x125);}const _0x29d5ec=_0x8bd309['masterDetail']&&_0x8bd309[_0xde856d(0xf0)]['enabled'],_0x384a43=_0x29d5ec?_0x8bd309[_0xde856d(0xf0)]['detailTable']:null,_0x3d5704=_0x384a43?_0x384a43[_0xde856d(0x110)]('.')['pop']():_0xde856d(0x1d5),_0x36ce79=_0x42ed14['replace'](/-/g,'_'),_0x5d28a5=_0x8bd309['masterDetail']?.['detailConfig']?.['autoCalculateFields']?.[_0xde856d(0xda)]?.['formula']||'',_0x3dc640=_0x5d28a5[_0xde856d(0x110)]('*')[_0xde856d(0x242)](_0x12dd2a=>_0x12dd2a[_0xde856d(0xa7)]()),_0x15790a=_0x8bd309[_0xde856d(0xf0)]?.['headerCalculations']?.[_0xde856d(0x168)]?.[_0xde856d(0x215)]?.[_0xde856d(0x1aa)](_0xde856d(0x229),'')||'',_0x57add7=_0x3dc640[0x0]||_0x15790a,_0x3a8d26=_0x3dc640[0x1]||'unit_price';return _0xde856d(0x246)+_0x278250+'/'+_0x42ed14+_0xde856d(0x112)+(_0x29d5ec?_0xde856d(0x1c5):'')+'\x0arouter.post(\x27/create-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x42ed14+_0xde856d(0xc5)+_0x36ce79+_0xde856d(0x18c)+_0x36ce79+'\x22\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20'+(_0x29d5ec?_0xde856d(0x12b)+_0x36ce79+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x3d5704+_0xde856d(0xd9):'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x36ce79+_0xde856d(0x94))+_0xde856d(0x1b0)+_0x36ce79+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x49e0dd+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20saja\x20(exclude\x20detail\x20array)\x20untuk\x20validation\x0a\x20\x20\x20\x20\x20\x20const\x20headerDataForValidation\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20'+(_0x29d5ec?_0xde856d(0x1e9)+_0x3d5704+';':'')+_0xde856d(0x89)+_0x49e0dd+'.validateData(headerDataForValidation,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Merge\x20sanitized\x20data\x20(termasuk\x20hash\x20result)\x20kembali\x20ke\x20data\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20'+(_0x29d5ec?_0xde856d(0xd4)+_0x3d5704+'\x20||\x20!Array.isArray(data.'+_0x3d5704+_0xde856d(0xb2)+_0x3d5704+'.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x3d5704+_0xde856d(0x21d)+(_0x8bd309['masterDetail']['headerCalculations']?_0xde856d(0x1ec)+JSON['stringify'](_0x8bd309['masterDetail'][_0xde856d(0x77)])+_0xde856d(0x153)+_0x3d5704+'.length;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(headerCalc.total_qty\x20&&\x20headerCalc.total_qty.source)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20qtyField\x20=\x20headerCalc.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20data.total_qty\x20=\x20data.'+_0x3d5704+_0xde856d(0x238)+(_0x57add7?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Calculate\x20total_amount\x20as\x20sum\x20of\x20('+_0x57add7+'\x20*\x20'+_0x3a8d26+')\x20from\x20all\x20items\x0a\x20\x20\x20\x20\x20\x20data.total_amount\x20=\x20data.'+_0x3d5704+_0xde856d(0x159)+_0x57add7+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x3a8d26+_0xde856d(0x20f):_0x4332e2['lzvAd'])+'\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20console.log(\x27Calculated\x20totals:\x27,\x20{\x0a\x20\x20\x20\x20\x20\x20total_items:\x20data.total_items,\x0a\x20\x20\x20\x20\x20\x20total_qty:\x20data.total_qty,\x0a\x20\x20\x20\x20\x20\x20total_amount:\x20data.total_amount\x0a\x20\x20\x20\x20});\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x8bd309['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x384a43+_0xde856d(0xe1)+(_0x29d5ec?_0x8bd309['masterDetail'][_0xde856d(0x135)]:'')+_0xde856d(0x149)+_0x49e0dd+_0xde856d(0x13c)+_0x42ed14+_0xde856d(0x151)+_0x42ed14+_0xde856d(0x130)+(_0x29d5ec?_0x4332e2['uQkmw']:'')+_0xde856d(0x21e)+_0x42ed14+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20creating\x20'+_0x42ed14+_0xde856d(0xf4);}function generateUpdateCompositeFunction(_0x489ffc,_0x4feb27,_0x697961,_0x558592=null){const _0x4cafd2=a0_0xd0d7,_0x3fb630={'xQfUi':_0x4cafd2(0x1d5),'yozEO':'\x20(with\x20detail\x20items)'};if(!_0x558592){const _0x4d3ebc=FileUtils[_0x4cafd2(0x8f)](_0x4feb27);_0x558592=_0x4d3ebc+_0x4cafd2(0x125);}const _0x1af750=_0x697961['masterDetail']&&_0x697961['masterDetail'][_0x4cafd2(0x1a2)],_0x1293e0=_0x1af750?_0x697961['masterDetail']['detailTable']:null,_0x2da19a=_0x1293e0?_0x1293e0['split']('.')['pop']():_0x3fb630[_0x4cafd2(0x15e)],_0x2f3a46=_0x4feb27['replace'](/-/g,'_'),_0x3716fa=_0x697961['primaryKey']||'id',_0x236824=_0x697961[_0x4cafd2(0x25e)]?_0x4cafd2(0x122)+_0x558592+_0x4cafd2(0xa9)+_0x3716fa+'\x27,\x20value:\x20data.'+_0x3716fa+_0x4cafd2(0xbc):'';return _0x4cafd2(0x246)+_0x489ffc+'/'+_0x4feb27+_0x4cafd2(0x1a9)+(_0x1af750?'(master-detail\x20transaction)':'')+'\x0arouter.post(\x27/update-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x4feb27+_0x4cafd2(0xde)+_0x2f3a46+_0x4cafd2(0x18c)+_0x2f3a46+_0x4cafd2(0xbd)+(_0x1af750?_0x4cafd2(0x12b)+_0x2f3a46+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x3716fa+'\x22:\x20\x22existing-id\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x2da19a+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x2f3a46+_0x4cafd2(0xe4)+_0x3716fa+_0x4cafd2(0xe3))+_0x4cafd2(0x1b0)+_0x2f3a46+_0x4cafd2(0x1ba)+_0x3716fa+_0x4cafd2(0x191)+_0x3716fa+_0x4cafd2(0x19a)+_0x236824+'\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x558592+_0x4cafd2(0x146)+(_0x1af750?'delete\x20headerDataForValidation.'+_0x2da19a+';':'')+_0x4cafd2(0x89)+_0x558592+_0x4cafd2(0x72)+(_0x1af750?'\x0a\x20\x20\x20\x20//\x20Validasi\x20detail\x20items\x20untuk\x20master-detail\x20(opsional\x20untuk\x20update)\x0a\x20\x20\x20\x20//\x20Untuk\x20updateComposite,\x20detail\x20items\x20berupa\x20object\x20dengan\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x0a\x20\x20\x20\x20if\x20(data.'+_0x2da19a+')\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data.'+_0x2da19a+_0x4cafd2(0x192)+_0x2da19a+'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x2da19a+'\x22\x20must\x20be\x20an\x20object\x20with\x20structure\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20structure:\x20insert,\x20update,\x20delete\x20harus\x20array\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20operations\x20=\x20data.'+_0x2da19a+';\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.insert\x20&&\x20!Array.isArray(operations.insert))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x2da19a+'.insert\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.update\x20&&\x20!Array.isArray(operations.update))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x2da19a+_0x4cafd2(0xf9)+_0x2da19a+_0x4cafd2(0xa6):'')+_0x4cafd2(0x9b)+_0x697961['tableName']+_0x4cafd2(0x70)+_0x1293e0+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0x1af750?_0x697961[_0x4cafd2(0xf0)][_0x4cafd2(0x135)]:'')+_0x4cafd2(0x1c8)+_0x558592+_0x4cafd2(0x95)+_0x4feb27+'\x20composite\x20update\x20successful:\x20'+_0x3716fa+'=${data.'+_0x3716fa+'}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x4feb27+_0x4cafd2(0x18a)+(_0x1af750?_0x3fb630[_0x4cafd2(0x219)]:'')+_0x4cafd2(0x14e)+_0x4feb27+_0x4cafd2(0x182)+_0x4feb27+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x4feb27+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateReadCompositeFunction(_0x43bf73,_0x5d48e2,_0x461c78,_0x51afbd=null){const _0xcfa6ed=a0_0xd0d7;if(!_0x51afbd){const _0x215c8a=FileUtils['toCamelCase'](_0x5d48e2);_0x51afbd=_0x215c8a+_0xcfa6ed(0x125);}const _0x4e3d59=JSON['stringify'](_0x461c78[_0xcfa6ed(0xa4)]||[]);return _0xcfa6ed(0x246)+_0x43bf73+'/'+_0x5d48e2+'/read-composite\x20-\x20Read\x20header\x20with\x20detail\x20items\x0arouter.post(\x27/read-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x5d48e2+_0xcfa6ed(0x22e)+(_0x461c78['primaryKey']||'id')+_0xcfa6ed(0x11d)+_0x51afbd+'.readComposite(req.body);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x5d48e2+_0xcfa6ed(0xf2)+_0x5d48e2+_0xcfa6ed(0xd0)+_0x5d48e2+'\x20composite\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateWorkflowFunction(_0x3c77d7,_0x401220,_0x4144c4,_0x15d10a=null){const _0x5e9516=a0_0xd0d7;if(!_0x15d10a){const _0x1fc88c=FileUtils[_0x5e9516(0x8f)](_0x401220);_0x15d10a=_0x1fc88c+_0x5e9516(0x125);}const _0x41b490=_0x4144c4['workflow']?JSON['stringify'](_0x4144c4[_0x5e9516(0x8b)]):'{}',_0x4ab632=_0x4144c4[_0x5e9516(0x25e)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x15d10a+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20recordId\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x401220+_0x5e9516(0x14d):'';return _0x5e9516(0x246)+_0x3c77d7+'/'+_0x401220+'/change-status\x20-\x20Change\x20status\x20'+_0x401220+_0x5e9516(0x78)+(_0x4144c4[_0x5e9516(0x1cd)]||'id')+_0x5e9516(0x1ce)+_0x4ab632+_0x5e9516(0x25f)+_0x41b490+_0x5e9516(0x1d7)+_0x3c77d7+_0x5e9516(0x253)+_0x4144c4['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20services:\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20req.body.updated_by\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20JWT\x20forwarding\x20(Layer\x201\x20RLS):\x20Authorization\x20header\x20dari\x20request\x20asli\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20di-forward\x20ke\x20workflow\x20hook\x20call\x20agar\x20endpoint\x20tujuan\x20yang\x20punya\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20requestScope\x20aktif\x20tetap\x20menerima\x20req.user\x20dengan\x20scope\x20yang\x20sama.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Selalu\x20di-set\x20(bukan\x20kondisional\x20pada\x20payload.requestScope)\x20karena\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20hook\x20URL\x20tujuan\x20mungkin\x20punya\x20requestScope\x20sendiri\x20walaupun\x20module\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20sumber\x20tidak.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20services\x20jika\x20tersedia\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20resolveServices\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/service-resolver\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20eventContext.services\x20=\x20resolveServices();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Service\x20resolver\x20opsional\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x15d10a+_0x5e9516(0x6d)+_0x15d10a+_0x5e9516(0x76)+_0x401220+_0x5e9516(0x88)+_0x401220+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Status\x20transition\x20not\x20allowed\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422\x20||\x20error.message.includes(\x27Cannot\x20change\x20status\x27)\x20||\x20error.message.includes(\x27No\x20transitions\x20defined\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Status\x20transition\x20not\x20allowed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Concurrent\x20modification\x20(optimistic\x20concurrency\x20check\x20via\x20status\x20guard\x20clause)\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27WORKFLOW_CONCURRENT_MODIFICATION\x27\x20||\x20error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Concurrent\x20modification\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validation\x20errors\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27is\x20required\x20for\x27)\x20||\x20error.message.includes(\x27is\x20not\x20a\x20valid\x20field\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hook\x20execution\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27hook\x20failed\x27)\x20||\x20error.message.includes(\x27onBefore\x27)\x20||\x20error.message.includes(\x27onAfter\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(502).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Workflow\x20hook\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Record\x20not\x20found\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x401220+_0x5e9516(0xb3);}function createPostgresSubmoduleTemplate(_0x3e8cdc,_0xca6328,_0x57a8c6){const _0x22b196=a0_0xd0d7,_0x53728f={'xZDOQ':function(_0x55025c,_0x511bfa){return _0x55025c===_0x511bfa;},'YEiDE':function(_0x195966,_0x43220b,_0x496407,_0x5d6743,_0x419f01,_0x5cfe73,_0x23c2c1,_0x2d92f6){return _0x195966(_0x43220b,_0x496407,_0x5d6743,_0x419f01,_0x5cfe73,_0x23c2c1,_0x2d92f6);},'jTjjZ':_0x22b196(0xeb),'avltE':function(_0xf3a97a,_0x5be1f4){return _0xf3a97a(_0x5be1f4);},'LMfny':function(_0x491ffb,_0x57e82a,_0x1ddd5b){return _0x491ffb(_0x57e82a,_0x1ddd5b);},'CiZsv':function(_0x45228d,_0x308e29){return _0x45228d!==_0x308e29;},'GKONp':function(_0x1bc50e,_0x443d07){return _0x1bc50e!==_0x443d07;},'CNnjG':_0x22b196(0xd2)},_0x37d93b=FileUtils[_0x22b196(0xe5)](_0xca6328),_0x2e2f4a=new Date()[_0x22b196(0x16a)]()[_0x22b196(0x1aa)]('T','\x20')[_0x22b196(0x1aa)](/\.\d{3}Z$/,''),_0x4667d2=_0x57a8c6['_extendedFields']||{'all':_0x57a8c6[_0x22b196(0xa4)]||[]},_0xd04682=FileUtils['detectTextColumn'](_0x57a8c6['fieldName']||[]),_0x4ef49f=FileUtils[_0x22b196(0x8f)](_0xca6328),_0x3e360f=_0x4ef49f+'Model',_0x6e20f2=_0x57a8c6[_0x22b196(0x190)]&&_0x53728f[_0x22b196(0x10a)](_0x57a8c6[_0x22b196(0x190)]['enabled'],!![]),_0x44d2dc=_0x53728f['YEiDE'](buildEndpointFunctions,_0x3e8cdc,_0xca6328,_0x57a8c6,_0x4667d2,_0xd04682,_0x3e360f,_0x6e20f2),_0x1a7055=_0x6e20f2?_0x22b196(0x163)+JSON[_0x22b196(0x15d)](_0x57a8c6['kafka']||{'enabled':![]})+';\x0a':'';return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x3e360f+_0x22b196(0x1fd)+_0x3e8cdc+'/'+_0xca6328+_0x22b196(0x111)+_0x1a7055+'\x0a\x0a//\x20Component\x20Engine\x20untuk\x20event\x20lifecycle\x20(optional)\x0alet\x20componentEngine\x20=\x20null;\x0alet\x20ContextBuilder\x20=\x20null;\x0atry\x20{\x0a\x20\x20//\x20Hanya\x20load\x20component\x20engine\x20jika\x20payload\x20memiliki\x20components\x0a\x20\x20const\x20hasComponents\x20=\x20'+JSON['stringify'](_0x57a8c6[_0x22b196(0x243)])+'\x20&&\x20Array.isArray('+JSON['stringify'](_0x57a8c6[_0x22b196(0x243)])+_0x22b196(0x211)+JSON[_0x22b196(0x15d)](_0x57a8c6['components'])+'.length\x20>\x200;\x0a\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20componentEngine\x20=\x20require(\x27@restforgejs/platform/src/utils/component-engine\x27).componentEngine;\x0a\x20\x20\x20\x20ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a\x0a\x20\x20\x20\x20//\x20Load\x20component\x20configuration\x20dari\x20payload\x20yang\x20sedang\x20digunakan\x0a\x20\x20\x20\x20const\x20componentConfig\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x57a8c6[_0x22b196(0x86)]+_0x22b196(0x115)+JSON[_0x22b196(0x15d)](_0x57a8c6['fieldName'])+',\x0a\x20\x20\x20\x20\x20\x20exportQuery:\x20'+(_0x57a8c6[_0x22b196(0x87)]?'\x27'+_0x57a8c6['exportQuery']+'\x27':_0x53728f['jTjjZ'])+_0x22b196(0xaa)+(_0x57a8c6['columnFormats']?JSON[_0x22b196(0x15d)](_0x57a8c6['columnFormats']):_0x53728f[_0x22b196(0x12f)])+',\x0a\x20\x20\x20\x20\x20\x20fieldLabels:\x20'+(_0x57a8c6['fieldLabels']?JSON[_0x22b196(0x15d)](_0x57a8c6[_0x22b196(0xf3)]):_0x22b196(0xeb))+_0x22b196(0x132)+JSON[_0x22b196(0x15d)](_0x57a8c6[_0x22b196(0x243)])+',\x0a\x20\x20\x20\x20\x20\x20importConfig:\x20'+(_0x57a8c6[_0x22b196(0x129)]?JSON['stringify'](_0x57a8c6['importConfig']):'null')+_0x22b196(0xe0)+(_0x57a8c6[_0x22b196(0x1f6)]?JSON[_0x22b196(0x15d)](_0x57a8c6['adjustConfig']):_0x53728f['jTjjZ'])+',\x0a\x20\x20\x20\x20\x20\x20workflowConfig:\x20'+(_0x57a8c6[_0x22b196(0x8b)]?JSON['stringify'](_0x57a8c6['workflow']):_0x53728f['jTjjZ'])+_0x22b196(0xf6)+(_0x57a8c6[_0x22b196(0x133)]?JSON[_0x22b196(0x15d)](_0x57a8c6['uploadConfig']):_0x22b196(0xeb))+_0x22b196(0x23d)+(_0x57a8c6[_0x22b196(0x25e)]?JSON[_0x22b196(0x15d)](_0x57a8c6['requestScope']):_0x53728f[_0x22b196(0x12f)])+_0x22b196(0x124)+_0x3e8cdc+'/'+_0xca6328+_0x22b196(0x213)+_0x3e8cdc+'/'+_0xca6328+_0x22b196(0x1e4)+_0x3e8cdc+'/'+_0xca6328+_0x22b196(0x204)+_0x3e8cdc+'/'+_0xca6328+',\x20running\x20without\x20events`);\x0a}\x0a\x0a/**\x0a\x20*\x20'+_0x37d93b+'\x20Submodule\x20-\x20Auto-generated\x20on\x20'+_0x2e2f4a+'\x0a\x20*\x0a\x20*\x20Endpoints\x20untuk\x20'+_0xca6328+'\x20dengan\x20actions:\x20'+_0x53728f[_0x22b196(0xc2)](getEnabledActions,_0x57a8c6)[_0x22b196(0x1da)](',\x20')+_0x22b196(0x245)+_0x57a8c6[_0x22b196(0x86)]+'\x0a\x20*\x20Fields:\x20'+(_0x57a8c6[_0x22b196(0xa4)]?_0x57a8c6['fieldName'][_0x22b196(0xd6)]:0x0)+'\x20fields\x0a\x20*\x20Database:\x20PostgreSQL\x0a\x20*/\x0a\x0a//\x20CORS\x20ditangani\x20di\x20level\x20app\x20oleh\x20cors\x20middleware\x20(lihat\x20konfigurasi\x20CORS_ENABLED\x20dan\x20CORS_ORIGINS\x20di\x20.env)\x0a\x0a\x0a\x0a//\x20Middleware\x20untuk\x20validasi\x20payload\x20pada\x20metode\x20POST\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20===\x20\x27POST\x27)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Skip\x20validation\x20untuk\x20import\x20routes\x20(menggunakan\x20multipart/form-data,\x20bukan\x20JSON)\x0a\x20\x20\x20\x20\x20\x20if\x20(req.path.startsWith(\x27/import-\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20next();\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20umum\x20untuk\x20payload\x0a\x20\x20\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20\x27/api/'+_0x3e8cdc+'/'+_0xca6328+'\x27\x20+\x20req.path\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20spesifik\x20untuk\x20endpoint\x20tertentu\x0a\x20\x20\x20\x20\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x20//\x20menghapus\x20/\x20di\x20awal\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20get\x20membutuhkan\x20where\x20dalam\x20format\x20{key,\x20value}\x20atau\x20[{key,\x20value}]\x20(1\x20elemen)\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27first\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20must\x20be\x20a\x20single\x20condition\x20{key,\x20value}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20delete\x20membutuhkan\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27\x20&&\x20(!req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27DELETE\x20payload\x20must\x20include\x20a\x20where\x20property\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20add\x20membutuhkan\x20data\x20yang\x20valid\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27add\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Filter\x20field\x20yang\x20memiliki\x20autoGenerate\x20dari\x20required\x20check\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20autoGenerateFields\x20=\x20'+(_0x57a8c6[_0x22b196(0x1fc)]?JSON['stringify'](_0x57a8c6['fieldValidation']['filter'](_0x7d7b6d=>_0x7d7b6d['constraints']&&_0x7d7b6d[_0x22b196(0x92)]['autoGenerate'])[_0x22b196(0x242)](_0x2e9017=>_0x2e9017['name'])):'[]')+_0x22b196(0x155)+_0x57a8c6[_0x22b196(0xa4)][_0x22b196(0x144)](_0x287e9a=>_0x287e9a!=='id')['slice'](0x0,0x1)[_0x22b196(0x1da)](_0x22b196(0x138))+_0x22b196(0x21f)+(_0x57a8c6[_0x22b196(0x1cd)]||'id')+'\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a'+_0x53728f['LMfny'](buildRequestScopeMiddleware,_0x57a8c6,_0xca6328)+buildSoftDeleteReadMiddleware(_0x57a8c6)+'\x0a'+_0x44d2dc+'\x0a\x0a'+(_0x53728f['CiZsv'](_0x57a8c6[_0x22b196(0x1bb)]?.['info'],![])?_0x22b196(0x14c)+JSON['stringify']({'datatables':!!_0x57a8c6['action']?.['datatables'],'read':!!_0x57a8c6['action']?.['read'],'first':!!_0x57a8c6['action']?.['first'],'create':!!_0x57a8c6[_0x22b196(0x1bb)]?.['create'],'update':!!_0x57a8c6['action']?.['update'],'delete':!!_0x57a8c6['action']?.['delete'],'lookup':!!_0x57a8c6[_0x22b196(0x1bb)]?.['lookup'],'export':!!_0x57a8c6[_0x22b196(0x1bb)]?.[_0x22b196(0x20e)],'import':!!_0x57a8c6['action']?.['import'],'workflow':!!_0x57a8c6[_0x22b196(0x1bb)]?.[_0x22b196(0x8b)],'info':_0x53728f['GKONp'](_0x57a8c6['action']?.[_0x22b196(0xed)],![])})+_0x22b196(0x134)+_0x3e360f+'.getModelInfo(actions);\x0a\x0a\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0xca6328+'\x27,\x0a\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x3e8cdc+_0x22b196(0x11c)+_0x2e2f4a+'\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0xca6328+_0x22b196(0x12e):_0x53728f['CNnjG'])+_0x22b196(0x1c2)+_0xca6328+_0x22b196(0x25b);}function createPostgresMainModuleTemplate(_0x13c4cf){const _0xa87a8b=a0_0xd0d7,_0x455734=FileUtils[_0xa87a8b(0xe5)](_0x13c4cf),_0x24e13e=FileUtils[_0xa87a8b(0x8f)](_0x13c4cf),_0x3cc006=new Date()['toISOString']()['replace']('T','\x20')[_0xa87a8b(0x1aa)](/\.\d{3}Z$/,'');return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20bodyParser\x20=\x20require(\x27body-parser\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0aconst\x20{\x20logger,\x20logServerReady,\x20logEndpointRegistered,\x20createRequestLogger,\x20logRequest\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/logger\x27);\x0aconst\x20ExportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/export_handler\x27);\x0aconst\x20ImportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/import_handler\x27);\x0aconst\x20UploadHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/upload_handler\x27);\x0aconst\x20{\x20extractExportConfigFromEndpoint,\x20extractImportConfigFromEndpoint,\x20extractUploadConfigFromEndpoint\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/config-extractor\x27);\x0aconst\x20rateLimiter\x20=\x20require(\x27@restforgejs/platform/src/middleware/rate-limiter\x27);\x0aconst\x20idempotencyMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/idempotency\x27);\x0aconst\x20bodyOptionsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/body-options\x27);\x0aconst\x20corsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/cors\x27);\x0aconst\x20securityHeaders\x20=\x20require(\x27@restforgejs/platform/src/middleware/security-headers\x27);\x0a\x0a/**\x0a\x20*\x20'+_0x455734+'\x20Module\x20-\x20Auto-generated\x20on\x20'+_0x3cc006+'\x0a\x20*\x0a\x20*\x20Fungsi\x20untuk\x20mengeksekusi\x20modul\x20'+_0x13c4cf+_0xa87a8b(0x136)+_0x455734+_0xa87a8b(0xbe)+_0x13c4cf+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20pluginPath\x20=\x20path.join(__dirname,\x20\x27..\x27,\x20\x27plugins\x27,\x20`${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20let\x20plugin\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(pluginPath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin\x20=\x20require(pluginPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin.onBeforeEndpointsLoad)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onBeforeEndpointsLoad(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27plugin_loaded\x27,\x20plugin:\x20`${moduleName}-plugin`\x20},\x20`Plugin\x20loaded:\x20${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_load_error\x27,\x20error:\x20pluginError.message\x20},\x20`Failed\x20to\x20load\x20plugin:\x20${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20health\x20check\x20endpoint\x20(tanpa\x20prefix\x20module)\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x13c4cf+_0xa87a8b(0x208)+_0x13c4cf+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x13c4cf+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Service\x20info\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/api/'+_0x13c4cf+'/info\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name:\x20\x27'+_0x455734+_0xa87a8b(0x106)+_0x13c4cf+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20documentation:\x20\x27See\x20individual\x20endpoint\x20documentation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x3cc006+_0xa87a8b(0x81)+_0x13c4cf+'\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20path.join(workingDir,\x20\x27'+_0x13c4cf+_0xa87a8b(0x177)+_0x13c4cf+_0xa87a8b(0x25a)+_0x13c4cf+'\x27,\x20endpointName,\x20exportConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27export_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20exportError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(importConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ImportHandler.registerRoutes(app,\x20\x27'+_0x13c4cf+'\x27,\x20endpointName,\x20importConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27import_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20table:\x20importConfig.tableName\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Import\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(importError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27import_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20importError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Import\x20registration\x20failed\x20for\x20${endpointName}:\x20${importError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20upload\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20uploadConfig\x20=\x20extractUploadConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(uploadConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UploadHandler.registerRoutes(app,\x20\x27'+_0x13c4cf+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20uploadError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(endpointError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20endpoint\x20${file}:`,\x20endpointError.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Continue\x20loading\x20other\x20endpoints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(dirError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20reading\x20modules\x20directory\x20${modulesDir}:`,\x20dirError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20cleanup\x20route\x20(optional\x20admin\x20endpoint)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27cleanup_route_error\x27,\x20error:\x20cleanupError.message\x20},\x20\x27Export\x20cleanup\x20route\x20registration\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20root\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20404\x20handler\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20workbench\x20UI\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20404\x20handler\x20untuk\x20unknown\x20routes\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Global\x20Error\x20Handler\x20-\x20${req.method}\x20${req.url}:`,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20other\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20statusCode\x20=\x20err.statusCode\x20||\x20err.status\x20||\x20500;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20errorResponse\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20err.name\x20||\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20err.message\x20||\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20stack\x20trace\x20in\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20!==\x20\x27production\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errorResponse.stack\x20=\x20err.stack;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(statusCode).json(errorResponse);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Start\x20server\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x13c4cf+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20healthCheck:\x20`http://${displayHost}:${port}/api/'+_0x13c4cf+_0xa87a8b(0x12a)+_0x13c4cf+_0xa87a8b(0x223)+_0x24e13e+'\x20=\x20{\x20execute\x20};\x0amodule.exports.moduleName\x20=\x20\x27'+_0x13c4cf+_0xa87a8b(0x231)+_0x3cc006+'\x27;';}module[a0_0x4a746f(0x11f)]={'createPostgresModelTemplate':createPostgresModelTemplate,'createPostgresSubmoduleTemplate':createPostgresSubmoduleTemplate,'createPostgresMainModuleTemplate':createPostgresMainModuleTemplate};