@restforgejs/platform 5.1.16 → 5.1.20

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 (176) hide show
  1. package/build-info.json +2 -2
  2. package/cli/consumer-deploy.js +1 -1
  3. package/cli/consumer.js +1 -1
  4. package/generators/cli/catalog/dbschema.js +2 -1
  5. package/generators/cli/endpoint/list.js +264 -0
  6. package/generators/cli/fast-track.js +395 -37
  7. package/generators/cli/processor/create.js +7 -7
  8. package/generators/cli/processor/list.js +229 -0
  9. package/generators/lib/generators/dashboard-generator.js +5 -5
  10. package/generators/lib/payload/payload-runner.js +63 -0
  11. package/generators/lib/templates/dashboard-catalog.js +1 -1
  12. package/generators/lib/templates/db-connection-env.js +1 -1
  13. package/generators/lib/templates/dbschema-catalog.js +1 -1
  14. package/generators/lib/templates/field-validation-catalog.js +1 -1
  15. package/generators/lib/templates/mysql-template.js +1 -1
  16. package/generators/lib/templates/oracle-template.js +1 -1
  17. package/generators/lib/templates/postgres-template.js +1 -1
  18. package/generators/lib/templates/query-declarative-catalog.js +1 -1
  19. package/generators/lib/templates/sqlite-template.js +1 -1
  20. package/integrity-manifest.json +18 -18
  21. package/package.json +1 -1
  22. package/scripts/check-install.js +8 -8
  23. package/scripts/verify-integrity.js +1 -1
  24. package/server.js +1 -1
  25. package/src/components/handlers/adjust_handler.js +1 -1
  26. package/src/components/handlers/audit_handler.js +1 -1
  27. package/src/components/handlers/delete_handler.js +1 -1
  28. package/src/components/handlers/export_handler.js +1 -1
  29. package/src/components/handlers/import_handler.js +1 -1
  30. package/src/components/handlers/insert_handler.js +1 -1
  31. package/src/components/handlers/update_handler.js +1 -1
  32. package/src/components/handlers/upload_handler.js +1 -1
  33. package/src/components/handlers/workflow_handler.js +1 -1
  34. package/src/components/integrations/webhook.js +1 -1
  35. package/src/consumers/baseConsumer.js +1 -1
  36. package/src/consumers/declarativeMapper.js +1 -1
  37. package/src/consumers/handlers/apiHandler.js +1 -1
  38. package/src/consumers/handlers/consoleHandler.js +1 -1
  39. package/src/consumers/handlers/databaseHandler.js +1 -1
  40. package/src/consumers/handlers/index.js +1 -1
  41. package/src/consumers/handlers/kafkaHandler.js +1 -1
  42. package/src/consumers/index.js +1 -1
  43. package/src/consumers/messageTransformer.js +1 -1
  44. package/src/consumers/validator.js +1 -1
  45. package/src/core/db/dialect/base-dialect.js +1 -1
  46. package/src/core/db/dialect/index.js +1 -1
  47. package/src/core/db/dialect/mysql-dialect.js +1 -1
  48. package/src/core/db/dialect/oracle-dialect.js +1 -1
  49. package/src/core/db/dialect/postgres-dialect.js +1 -1
  50. package/src/core/db/dialect/sqlite-dialect.js +1 -1
  51. package/src/core/db/flatten-helper.js +1 -1
  52. package/src/core/db/query-builder-error.js +1 -1
  53. package/src/core/db/query-builder.js +1 -1
  54. package/src/core/db/relation-helper.js +1 -1
  55. package/src/core/handlers/delete_handler.js +1 -1
  56. package/src/core/handlers/insert_handler.js +1 -1
  57. package/src/core/handlers/update_handler.js +1 -1
  58. package/src/core/models/base-model.js +1 -1
  59. package/src/core/utils/cache-manager.js +1 -1
  60. package/src/core/utils/component-engine.js +1 -1
  61. package/src/core/utils/context-builder.js +1 -1
  62. package/src/core/utils/datetime-formatter.js +1 -1
  63. package/src/core/utils/datetime-parser.js +1 -1
  64. package/src/core/utils/db.js +1 -1
  65. package/src/core/utils/logger.js +1 -1
  66. package/src/core/utils/payload-loader.js +1 -1
  67. package/src/core/utils/security-checks.js +1 -1
  68. package/src/middleware/body-options.js +1 -1
  69. package/src/middleware/cors.js +1 -1
  70. package/src/middleware/idempotency.js +1 -1
  71. package/src/middleware/rate-limiter.js +1 -1
  72. package/src/middleware/request-logger.js +1 -1
  73. package/src/middleware/security-headers.js +1 -1
  74. package/src/models/base-model-mysql.js +1 -1
  75. package/src/models/base-model-oracle.js +1 -1
  76. package/src/models/base-model-sqlite.js +1 -1
  77. package/src/models/base-model.js +1 -1
  78. package/src/pro/caching/redis-client.js +1 -1
  79. package/src/pro/caching/redis-helper.js +1 -1
  80. package/src/pro/consumers/baseConsumer.js +1 -1
  81. package/src/pro/consumers/declarativeMapper.js +1 -1
  82. package/src/pro/consumers/handlers/apiHandler.js +1 -1
  83. package/src/pro/consumers/handlers/consoleHandler.js +1 -1
  84. package/src/pro/consumers/handlers/databaseHandler.js +1 -1
  85. package/src/pro/consumers/handlers/index.js +1 -1
  86. package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
  87. package/src/pro/consumers/index.js +1 -1
  88. package/src/pro/consumers/messageTransformer.js +1 -1
  89. package/src/pro/consumers/validator.js +1 -1
  90. package/src/pro/database/base-model-mysql.js +1 -1
  91. package/src/pro/database/base-model-oracle.js +1 -1
  92. package/src/pro/database/base-model-sqlite.js +1 -1
  93. package/src/pro/database/db-mysql.js +1 -1
  94. package/src/pro/database/db-oracle.js +1 -1
  95. package/src/pro/database/db-sqlite.js +1 -1
  96. package/src/pro/excel/excel-generator.js +1 -1
  97. package/src/pro/excel/excel-parser.js +1 -1
  98. package/src/pro/excel/export-service.js +1 -1
  99. package/src/pro/excel/export_handler.js +1 -1
  100. package/src/pro/excel/import-service.js +1 -1
  101. package/src/pro/excel/import-validator.js +1 -1
  102. package/src/pro/excel/import_handler.js +1 -1
  103. package/src/pro/excel/upsert-builder.js +1 -1
  104. package/src/pro/idgen/idgen-routes.js +1 -1
  105. package/src/pro/integrations/lookup-resolver.js +1 -1
  106. package/src/pro/integrations/upload-handler-v2.js +1 -1
  107. package/src/pro/integrations/upload-handler.js +1 -1
  108. package/src/pro/integrations/webhook.js +1 -1
  109. package/src/pro/locking/lock-routes.js +1 -1
  110. package/src/pro/locking/resource-lock-manager.js +1 -1
  111. package/src/pro/messaging/kafkaConsumerService.js +1 -1
  112. package/src/pro/messaging/kafkaService.js +1 -1
  113. package/src/pro/messaging/messagehubService.js +1 -1
  114. package/src/pro/messaging/rabbitmqService.js +1 -1
  115. package/src/pro/scheduler/job-manager.js +1 -1
  116. package/src/pro/scheduler/job-routes.js +1 -1
  117. package/src/pro/scheduler/job-validator.js +1 -1
  118. package/src/pro/storage/base-storage-provider.js +1 -1
  119. package/src/pro/storage/file-metadata-helper.js +1 -1
  120. package/src/pro/storage/index.js +1 -1
  121. package/src/pro/storage/local-storage-provider.js +1 -1
  122. package/src/pro/storage/s3-storage-provider.js +1 -1
  123. package/src/pro/storage/upload-cleanup-job.js +1 -1
  124. package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
  125. package/src/pro/storage/upload-pending-tracker.js +1 -1
  126. package/src/pro/websocket/broadcast-helper.js +1 -1
  127. package/src/pro/websocket/index.js +1 -1
  128. package/src/pro/websocket/livesync-server.js +1 -1
  129. package/src/pro/websocket/ws-broadcaster.js +1 -1
  130. package/src/services/export-service.js +1 -1
  131. package/src/services/import-service.js +1 -1
  132. package/src/services/kafkaConsumerService.js +1 -1
  133. package/src/services/kafkaService.js +1 -1
  134. package/src/services/messagehubService.js +1 -1
  135. package/src/services/rabbitmqService.js +1 -1
  136. package/src/utils/cache-invalidation-registry.js +1 -1
  137. package/src/utils/cache-manager.js +1 -1
  138. package/src/utils/component-engine.js +1 -1
  139. package/src/utils/config-extractor.js +1 -1
  140. package/src/utils/consumerLogger.js +1 -1
  141. package/src/utils/context-builder.js +1 -1
  142. package/src/utils/dashboard-helpers.js +1 -1
  143. package/src/utils/dateHelper.js +1 -1
  144. package/src/utils/datetime-formatter.js +1 -1
  145. package/src/utils/datetime-parser.js +1 -1
  146. package/src/utils/db-bootstrap.js +1 -1
  147. package/src/utils/db-mysql.js +1 -1
  148. package/src/utils/db-oracle.js +1 -1
  149. package/src/utils/db-sqlite.js +1 -1
  150. package/src/utils/db.js +1 -1
  151. package/src/utils/demo-generator.js +1 -1
  152. package/src/utils/excel-generator.js +1 -1
  153. package/src/utils/excel-parser.js +1 -1
  154. package/src/utils/file-watcher.js +1 -1
  155. package/src/utils/id-generator.js +1 -1
  156. package/src/utils/idempotency-manager.js +1 -1
  157. package/src/utils/import-validator.js +1 -1
  158. package/src/utils/license-client.js +1 -1
  159. package/src/utils/lock-manager.js +1 -1
  160. package/src/utils/logger.js +1 -1
  161. package/src/utils/lookup-resolver.js +1 -1
  162. package/src/utils/payload-loader.js +1 -1
  163. package/src/utils/processor-response.js +1 -1
  164. package/src/utils/rabbitmq.js +1 -1
  165. package/src/utils/redis-client.js +1 -1
  166. package/src/utils/redis-helper.js +1 -1
  167. package/src/utils/request-scope.js +1 -1
  168. package/src/utils/security-checks.js +1 -1
  169. package/src/utils/service-resolver.js +1 -1
  170. package/src/utils/shutdown-coordinator.js +1 -1
  171. package/src/utils/soft-delete-dashboard-guard.js +1 -1
  172. package/src/utils/sql-table-extractor.js +1 -1
  173. package/src/utils/trusted-keys.js +1 -1
  174. package/src/utils/upload-handler.js +1 -1
  175. package/src/utils/upsert-builder.js +1 -1
  176. package/src/utils/workflow-hook-executor.js +1 -1
@@ -1 +1 @@
1
- const a0_0x5b4501=a0_0x2fb5;(function(_0x12c5eb,_0x194d86){const _0x11b822=a0_0x2fb5,_0x43d3d0=_0x12c5eb();while(!![]){try{const _0x3b3e26=-parseInt(_0x11b822(0x191))/0x1+-parseInt(_0x11b822(0x1b1))/0x2*(parseInt(_0x11b822(0x160))/0x3)+parseInt(_0x11b822(0x181))/0x4*(parseInt(_0x11b822(0x21e))/0x5)+parseInt(_0x11b822(0x1c3))/0x6*(-parseInt(_0x11b822(0x1a8))/0x7)+parseInt(_0x11b822(0x19a))/0x8*(-parseInt(_0x11b822(0x157))/0x9)+-parseInt(_0x11b822(0x252))/0xa+parseInt(_0x11b822(0x1c7))/0xb;if(_0x3b3e26===_0x194d86)break;else _0x43d3d0['push'](_0x43d3d0['shift']());}catch(_0x47e03c){_0x43d3d0['push'](_0x43d3d0['shift']());}}}(a0_0x2ff5,0xb4840));function toCamelCase(_0x293bfc){const _0x5d8d73=a0_0x2fb5,_0x30e446={'DZOvy':'string'};if(!_0x293bfc||typeof _0x293bfc!==_0x30e446[_0x5d8d73(0x275)])return'';return _0x293bfc['replace'](/(?:^\w|[A-Z]|\b\w)/g,(_0x4708f8,_0x4a5fc9)=>{const _0x345447=_0x5d8d73;return _0x4a5fc9===0x0?_0x4708f8[_0x345447(0x20a)]():_0x4708f8['toUpperCase']();})['replace'](/\s+/g,'')[_0x5d8d73(0x180)](/[-_]/g,'');}function a0_0x2ff5(){const _0xa1aa41=['rfPpDNK','z1Diz24','ywDNCMvNyxrLq29UzMLN','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','iezst00GjhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9icr7D2HLCMvdBgf1C2v9ie9srevsiejzia','icOG','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','jZSkicb0AgLZlNjLywrtB3vYy2uGpsaN','Aw1WB3j0q29UzMLN','zMLLBgrqB2XPy3K','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGih0PoWOGicaGicaGih0kicaGicaGFsbJyxrJAcaOy2HLy2TfCNjVCIKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMvYAwzPy2f0Aw9UiezHAwXLzcCScIaGicaGicaGicbTzxnZywDLoIaNq291BgqGBM90ihzLCMLMEsbKyxrHigv4Axn0zw5JzsbIzwzVCMuGzgvSzxrLjYWkicaGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8Gy2HLy2TfCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOk','jYbMCM9Tia','ieforca','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','BwfW','DxbSB2fKq29UzMLN','cIaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGigrgAwvSzhmUChvZAcHRzxKGkYaNid0GpYCPoWOGicaGicaGicaGzfzHBhvLCY5WDxnOkhzHBhvLktSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8VieLUAMvJDcbHDwrPDcbJB2X1Bw5ZicH1CgrHDgvKx2f0lcb1CgrHDgvKx2j5ksb1BNr1AYbKzxrHAwWGvvbeqvrfihzPysbOzwXWzxikicaGicaGDgHPCY5FyxbWzw5KvxbKyxrLqxvKAxrdB2X1Bw5ZkgrgAwvSzhmSigrwywX1zxmSigL0zw0Sigv2zw50q29UDgv4DcK7cGOGicaGicbKvMfSDwvZlNb1C2GOAxrLBvTKzxrHAwXqA10PoWOGicaGicbJB25ZDcbKvxbKyxrLu3fSid0Gj1vqrefursaNicSGzgv0ywLSvgfIBgvgDwXSicSGjYbtrvqGjYaRigrgAwvSzhmUAM9PBIGNlcaNksaRicCGv0HfuKuGjYaRigrLDgfPBfbRicSGjYa9id8NoWOGicaGicbHD2fPDcbJB25Uzwn0Aw9UlMv4zwn1DguOzfvWzgf0zvnXBcWGzfzHBhvLCYK7cIaGicaGihvWzgf0zwrjDgvTCY5WDxnOkgL0zw0PoWOGicaGFqOGicaGy29UC29Szs5SB2COj1vWzgf0zwqGjYaRihvWzgf0zwrjDgvTCY5Szw5NDgGGkYaNigrLDgfPBcbPDgvTkhmPjYK7cGOGicaGlY8GmY4Gsu5trvjuig9WzxjHDgLVBNmkicaGigzVCIaOy29UC3qGAxrLBsbVzIbPBNnLCNrjDgvTCYKGEWOGicaGicbPDgvTw2zRxsa9ihbYAw1HCNLlzxLwywX1ztSkcIaGicaGic8Vief1Dg8Tz2vUzxjHDguGvvvjrcb1BNr1AYbKzxrHAwWGueSGyMLSysbJBgLLBNqGDgLKywSGBwvUExvWCgX5cIaGicaGic8VicHZyw1HihnLCgvYDgKGzgKGy3jLyxrLq29TCg9ZAxrLoYbRB25ZAxn0zw4GzgvUz2fUigTVBg9TifzbuKniqvikicaGicaGlY8GrevgqvvmvcaOvvvjrcGPksKkicaGicaGAwyGkgL0zw1Bzgv0ywLSugTDid09psb1BMrLzMLUzwqGFhWGAxrLBvTKzxrHAwXqA10Gpt09ig51BgWPihSkicaGicaGicbPDgvTw2rLDgfPBfbRxsa9ihjLCxvPCMuOj3v1AwqNks52nYGPoWOGicaGicb9cG','AxnbCNjHEq','C3rYAw5NAwz5','Bfr3BMO','tw9KzwWGzxH0zw5KCYbcyxnLtw9KzwWGEWOVkIOkicOGq29UC3rYDwn0B3ikicOVcMnVBNn0CNvJDg9YkcKGEWOGignVBNn0ihzHBgLKrMLLBgrZid0GwWOGicaG','lY8GtM8Gywr2yw5JzwqGCxvLCMLLCYbKzwzPBMvK','nte0nJK2nxzNzMv4wa','AM9PBG','oWOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','zxHWB3j0CW','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','y29UC3qGqMfZzu1VzgvSid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9TB2rLBhmVyMfZzs1TB2rLBc1TExnXBcCPoWPJB25ZDcbKyIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVDxrPBhmVzgiTBxLZCwWNktSky29UC3qGzNmGpsbYzxf1AxjLkcDMCYCPoWPJB25ZDcbWyxrOid0GCMvXDwLYzsGNCgf0AcCPoWOklYOQcIOG','jZSkicaGigrLBgv0zsbOzwfKzxjeyxrHw2rLDgfPBeTLEv07cIaGicbKzwXLDguGAgvHzgvYrgf0yvT0AgLZlNbYAw1HCNLlzxLDoWOkicaGic8Vic0TlsbiB29RoIbVBKjLzM9YzunVBxbVC2L0zvvWzgf0zsaTls0kicaGigLMicHLDMvUDenVBNrLEhqGjIyGzxzLBNrdB250zxH0lMnVBxbVBMvUDevUz2LUzsKGEWOGicaGicb2yxiGx2nLid0GzxzLBNrdB250zxH0lMnVBxbVBMvUDevUz2LUztSkicaGicaGDMfYif9dqIa9igv2zw50q29UDgv4Dc5dB250zxH0qNvPBgrLCJSkicaGicaGDMfYif9KzxrHAwXpChmGpsbKyxrHw2rLDgfPBeTLEv0GFhWGE307cIaGicaGihzHCIbFyMvMB3jLq3r4id0Gx0nclMj1AwXKq29TCg9ZAxrLvxbKyxrLqMvMB3jLq29UDgv4DcHOzwfKzxjeyxrHlcbVBgreyxrHlcb7cIaGicaGicaGAw5Zzxj0oIbFzgv0ywLSt3bZlMLUC2vYDcb8FcbBxsWkicaGicaGicb1CgrHDgu6if9KzxrHAwXpChmUDxbKyxrLihX8ifTDlaOGicaGicaGigrLBgv0ztOGx2rLDgfPBe9WCY5KzwXLDguGFhWGw10kicaGicaGFsWGEWOGicaGicaGihrHyMXLtMfTztOGjW','Dg90ywXFyw1VDw50','ntrUD0Pyswm','DhLWzq','Bg9VA3vW','BMfTzq','cIaGicaGia','iIa9pt0Gj3n0CMLUzYCGjIyGiG','igrHDgeGC3vJy2vZC2z1BgX5igfKANvZDgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fKANvZDcbKyxrHia','cGOGicaGy29UC3qGzgv0ywLSt3bLCMf0Aw9UCYa9igrHDgfBzgv0ywLSs2v5xsb8Fcb7FtSkicaGignVBNn0ihSGAw5Zzxj0oIbPBNnLCNrjDgvTCYa9ifTDlcb1CgrHDgu6ihvWzgf0zuL0zw1Zid0Gw10SigrLBgv0ztOGzgvSzxrLsxrLBxmGpsbBxsb9id0Gzgv0ywLSt3bLCMf0Aw9UCZSkcIaGicbJB25ZDcbKzwXLDgvKsxrLBxmGpsbBxtSkicaGignVBNn0ihvWzgf0zwrjDgvTCYa9ifTDoWOGicaGy29UC3qGAw5Zzxj0zwrjDgvTCYa9ifTDoWOkicaGic8VideUierftevursbVCgvYyxrPB25ZcIaGicbMB3iGkgnVBNn0igL0zw0GB2yGzgvSzxrLsxrLBxmPihSkicaGicaGAwyGkcfPDgvTw2rLDgfPBfbRxsKGDgHYB3CGBMv3ievYCM9YkcDnAxnZAw5NicCGkYbKzxrHAwXqAYaRicCGAw4GzgvSzxrLig9WzxjHDgLVBICPoWOGicaGicbJB25ZDcbKzwXtCwWGpsaNrevmrvrfiezst00GjYaRigrLDgfPBfrHyMXLrNvSBcaRicCGv0HfuKuGjYaRigrLDgfPBfbRicSGjYa9id8NoWOGicaGicbHD2fPDcbJB25Uzwn0Aw9UlMv4zwn1DguOzgvSu3fSlcbBAxrLBvTKzxrHAwXqA11DktSkicaGicaGzgvSzxrLzeL0zw1ZlNb1C2GOAxrLBsK7cIaGicb9cIaGicbJB25ZB2XLlMXVzYGNrgvSzxrLzcaNicSGzgvSzxrLzeL0zw1ZlMXLBMD0AcaRicCGzgv0ywLSigL0zw0OCYKNktSkcIaGicaVlYaYlIbvuerbveuGB3bLCMf0Aw9UCWOGicaGzM9YicHJB25ZDcbPDgvTig9MihvWzgf0zuL0zw1Zksb7cIaGicaGigLMicGHAxrLBvTKzxrHAwXqA10PihrOCM93ig5LDYbfCNjVCIGNtwLZC2LUzYaNicSGzgv0ywLSugSGkYaNigLUihvWzgf0zsbVCgvYyxrPB24NktSk','id0GjW','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkhjLCs5IB2r5ktSkicaGih0GzwXZzsb7cIaGicaGic8VieXLz2fJEsbMB3jTyxqGzgvUz2fUihnLBgvJDgvKx3rHzWOGicaGicbJB25ZDcbZzwXLy3rLzfrHzYa9ihjLCs5IB2r5lNnLBgvJDgvKx3rHzYb8FcaNjZSkicaGicaGBgLZDca9igf3ywL0ia','zMXhDLu','oWOkicaGigLMicGHzgf0ys4','cIOGrgf0ywjHC2u6ie15u1fmcIOVcMnSyxnZia','iICScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGDMfYigrHDgeGpsbYzxeUyM9KEs4','DuLsAxC','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOk','jZSkcI8VienVBxbVBMvUDcbJB25MAwD1CMf0Aw9UihvUDhvRigv4Cg9YDc9PBxbVCNqGkhbHCNnLzcbVBgvOignVBMzPzY1LEhrYywn0B3iGW6lIGQZIGj0GAMfUz2fUigrPBw9KAwzPA2fZAsKky29UC3qGy29TCg9Uzw50q29UzMLNid0GEWOGihrHyMXLtMfTztOGjW','iL0GpsbMCY5YzwfKrMLSzvn5BMmOzMLSzvbHDgGSicD1Dgy4jYK7cIaGicaGicaGy29UC29Szs5SB2COyfnrtcbuzw1WBgf0zsa','cIaGicaGih0','oMaSigvYCM9YktSkicaGicaGicaGihrOCM93igvYCM9YoWOGicaGicaGih0kicaGicaGFqOkicaGicaGlY8GuMvNAxn0zxiGzxHWB3j0ignSzwfUDxaGCM91DgukicaGicaGDhj5ihSkicaGicaGicbfEhbVCNriyw5KBgvYlNjLz2LZDgvYq2XLyw51CfjVDxrLkgfWCcK7cIaGicaGih0Gy2f0y2GGkgnSzwfUDxbfCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj0v4Cg9YDcbJBgvHBNvWihjVDxrLihjLz2LZDhjHDgLVBIbMywLSzwq6jYWGy2XLyw51CevYCM9YlM1LC3nHz2uPoWOGicaGicb9cGOGicaGicbHChaUz2v0kcCVjYWGkhjLCsWGCMvZksa9pIb7cIaGicaGicaGCMvZlMPZB24OEWOGicaGicaGicaGBwvZC2fNztOGjW','ywn0Aw9U','cIaGicb9ksK7cIaGicbHD2fPDcb0AgLZlNnLDenHy2HLzeXVB2T1CcHJywnOzu9WDgLVBNmSignHy2HLrgf0ysWGj3n0yxrPyYCPoWOkicaGic8VifjLDhvYBIbKzw5Nyw4GC2vSzwn0zwqGzMXHzWOGicaGCMv0DxjUigrHDgeUBwfWkgL0zw0Gpt4GEWOGicaGicbJB25ZDcbYB3CGpsb7cIaGicaGicaGAwq6igL0zw0U','zMLSDgvY','Dg90ywXFCxr5','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','CMvJB3jKswq','zgf0yxrHyMXLC1f1zxj5','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0Gj0vsx1jpv19ju19sruzfuKvoq0vexZiNihX8igvYCM9YlMvYCM5Vid09psaXnduXksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDgB3jLAwDUigTLEsbJB25ZDhjHAw50jYWkicaGicaGicbTzxnZywDLoIaNq2fUBM90igrLBgv0ztOGCMvJB3jKigLZihn0AwXSihjLzMvYzw5JzwqGyNKGB3rOzxiGzgf0ysCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigrLBgv0Aw5Nia','zgvZy3jPChrPB24','C291CMnL','cIaGicb9ksK7cGOGicaGCMv0DxjUihjLC3vSDdSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGAw4GtxLtuuWGz2v0tg9VA3vWrgf0ytONlcbLCNjVCIK7cIaGicb0AhjVDYbLCNjVCJSkicb9cN0kcI8QkGOGkIbeEw5HBwLJigXVB2T1CcbKzw5Nyw4GzxH0CMeGzMLSDgvYCYb1BNr1AYbnEvnrtaOGkI8kyxn5BMmGz2v0tg9VA3vWrgf0yur5BMfTAwmOC2vHCMnOlcbLEhrYyuzPBhrLCNmGpsb7FsKGEWOGihrYEsb7cIaGicbSzxqGCgfYyw1Zid0Gw107cIaGicbSzxqGD2HLCMvdB25KAxrPB25Zid0Gw107cG','CMvWBgfJzq','otG4BvfevgT0','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLicyMihjLC3vSDc5KyxrHicyMihjLC3vSDc5KyxrHlMXLBMD0Aca+idaPihSkicaGicaGy29UC3qGCMvJB3jKid0GCMvZDwX0lMrHDgfBmf07cIaGicaGigLMicHYzwnVCMrBCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1UxsaHpt0GDw5KzwzPBMvKicyMcIaGicaGicaGicbtDhjPBMCOCMvJB3jKw3jLCs5FCMvXDwvZDfnJB3bLlMnVBhvTBL0Pice9psbtDhjPBMCOCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicbTzxnZywDLoIaN','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0Gj0vsx0rvuf9ftLrswsCGFhWGzxjYB3iUzxjYBM8Gpt09ideWnJiPihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrQDxn0Aw5Nia','cIaGicb0CNKGEWOGicaGicb2yxiGCMvZDwX0id0GyxDHAxqG','ignVBxbVC2L0zsb1CgrHDguGC3vJy2vZC2z1BdOG','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGicaGCMvJywXJrMLLBgrZlNb1C2GOj3rVDgfSx2fTB3vUDca9id8NktSkicaGicaGCMvJywXJvMfSDwvZlNb1C2GODg90ywXbBw91BNqPoWOGicaGFq','cIaGxtSkcIaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','C3rYAw5N','psCGkYbKyxrHlG','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFqOkicaGigXLDcbYzxnWB25ZzurHDgeGpsbUDwXSoWOk','zMLUza','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','ndKWota3Ahf2DMHh','DgfIBgvoyw1L','zw50CMLLCW','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtksddOUkcRokaNsbTyxn0zxiGCMvJB3jKcIaGicbPzIaOCMvXlL9Yzxf1zxn0u2nVCguPihSkicaGicaGy29UC3qGC2nVCgvdAgvJAYa9igf3ywL0ia','ignVBxbVC2L0zsbYzwfKihn1y2nLC3nMDwW6icCGkYaOCMvZDwX0lMnVDw50ihX8idaPicSGjYbYzwnVCMqOCYKNktSkcIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5Yzxn1BhqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbJB21WB3nPDguGCMvHzca','cIaGicaGignVBNn0igrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGzfzHBhvLCYa9ifTDoWOGicaGicbMB3iGkgnVBNn0ifTRzxKSihzHBhvLxsbVzIbpyMPLy3qUzw50CMLLCYHPDgvTksKGEWOGicaGicaGigLMicHRzxKGpt09igrLDgfPBfbRksbJB250Aw51ztSkicaGicaGica','tw9KzwWOktS','ywrQDxn0q29UzMLN','qKDUCNe','mtzHzujzy2O','zgv0ywLSq29UzMLN','lMDLDenVBM5Ly3rPB25jBMzVkcK7cGOGicaGCMvZlMPZB24OEWOGicaGicbZDgf0Dxm6ignVBM5Ly3rPB25jBMzVid8Gj2HLywX0AhKNidOGj3vUA25VD24NlaOGicaGicbLBMrWB2LUDdOGjW','cGOGihjLDhvYBIb0zw1WBgf0zxm7cN0kcI8QkGOGkIbpDMvYCMLKzsbNzxrmAxn0uxvLCNKGDw50DwSGtxLtuuWGC3LUDgf4cIaQlWPNzxrmAxn0uxvLCNKOB3b0Aw9UCYa9ihT9ksb7cIaGBgv0igjHC2vrDwvYEsa9igakicaGia','ktSkicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbbrePvu1qGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','ignVBxbVC2L0zsbJCMvHDguGC3vJy2vZC2z1BcCPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmsKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6icC','Dg9ju09tDhjPBMC','BMfTyq','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicbJB25ZB2XLlMXVzYGNw0LovevhuKfuruqGvfjbtLnbq1rjt05Dieniqu5hrs1tvefuvvmGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05Dieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0k','D3jxzvy','jZSkicaGignVBNn0igrLDgfPBfbRid0GjW','oWOGicaGD29YA2zSB3DdB25MAwCUx3bYB2PLy3qGpsaN','jZSkicb0AgLZlNDYAxrLu291CMnLid0GjW','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','ndGWnJeZy1DmwLDo','DxbZzxj0u3rYyxrLz3K','t01dBeS','zMLLBgrwywXPzgf0Aw9U','iL0GpsbUDwXSoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicb0zw1WBgf0zxnBiG','zxHJBhvKzuzYB21jBxbVCNq','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGy29UC3qGzw5KCg9PBNqGpsbYzxeUCgf0Ac5ZDwjZDhjPBMCOmsK7cIaGy29UC3qGC2nVCgvdB25KAxrPB24Gpsb7igTLEtOGjW','iIbTDxn0igjLigeGBM9UlwvTChr5igfYCMf5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGica','cIaGicaVlYbezwzHDwX0ihnJB3bLigzPBhrLCGOGicaGD2HLCMvdB25KAxrPB25ZlNb1C2GOya','mZq5mMHSEw96wG','D29YA2zSB3C','cIaGicbJB25ZB2XLlMXVzYHG','icbYzxr1CM4Gj1nftevdvcaQiezst00GjYaRihrOAxmUCMvHzfnVDxjJztS','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGignVBNnVBguUzxjYB3iOj1TgquXmqKfds10Gq0HbtKDflvnuqvrvuYbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','BgvUz3rO','AwyGkgDLBMvYyxrLzezPzwXKCY5PBMnSDwrLCYHRzxKPksbJB250Aw51ztS','ALLpCha','C2XPy2u','jZSkicaGigXLDcb0zxH0rMLLBgqGpsaN','laOGicaGicb0zxH0oIbPDgvTw2fSAwfZrMLLBgqGFhWGDgv4DezPzwXKxsb8FcbPDgvTlG','jZSkicaGignVBNn0ihbSDwDPBLbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcaNlI4NlcaNCgX1z2LUCYCSigaKE21VzhvSzu5HBwv9lxbSDwDPBI5QC2aPoWOGicaGBgv0ihbSDwDPBIa9ig51BgW7cIaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicb0CNKGEWOGicaGicaGihbSDwDPBIa9ihjLCxvPCMuOCgX1z2LUugf0AcK7cIaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGihbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqOyxbWlcbJB25MAwCPoWOGicaGicaGih0kicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFsbJyxrJAcaOCgX1z2LUrxjYB3iPihSkicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9SB2fKx2vYCM9YjYWGzxjYB3i6ihbSDwDPBKvYCM9YlM1LC3nHz2uGFsWGyezHAwXLzcb0BYbSB2fKihbSDwDPBJOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFqOGicaGFqOkicaGic8VieHLywX0AcbJAgvJAYbLBMrWB2LUDaOGicaGyxbWlMDLDcGNl2fWAs8','cIaGicaVlYbjBNrLz3jHDgvKihrYyw5Zywn0Aw9UigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGihrYEsb7cIaGicaGignVBNn0igv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicb2yxiGAgvHzgvYrgf0yuzVCLzHBgLKyxrPB24GpsbpyMPLy3qUyxnZAwDUkhT9lcbKyxrHktSkicaGicaGzgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGBMv4DcGPoWP9ktSk','DgHPCY5HDwrPDenVBhvTBNmGpsa','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','laOGicaGicb0zxH0oIbPDgvTlG','mte0wMjRrhD3','ihX8icfbCNjHEs5PC0fYCMf5kgrHDgeU','iL0GpsaI','l2nYzwf0zsaTie15u1fmieLUC2vYDaPYB3v0zxiUCg9ZDcGNl2nYzwf0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbKyxrHcIaGicbPzIaODhLWzw9Mia','nda5mtyZmJzgzgjAuuC','laOGigfKANvZDenVBMzPzZOG','id0G','jYWkicaGicaGicbMB3jLAwDUs2v5oIaN','tgPqD3C','j119ycK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','zw5HyMXLza','AgvHzgvYq2fSy3vSyxrPB25Z','cIOkkIbnEvnrtc1VChrPBwL6zwqGzw5KCg9PBNrZihvUDhvRia','BNvSBa','zxHWB3j0','ktSkicaGicaGy29UC29Szs5SB2COj1TgquXmqKfds10GvvbeqvrfignVBxbSzxrLzcb3AxrOB3v0igv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0zbteXcqunlxsbvuerbveuGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0k','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNuhjPBwfYEsbRzxKGka','ydSkicaGih0k','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOGicaGicaGihzHCIbYzxn1BhqGpsbHD2fPDca','cIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','cIOGvgfIBgu6ia','cIaGicaVlYbgywXSyMfJAZOGBw9Kzsb0yw5WysbLDMvUDhmkicaGihrYEsb7cIaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','iIbTDxn0igjLigfUig9IAMvJDcb3AxrOihn0CNvJDhvYzsb7Aw5Zzxj0oIbBxsWGDxbKyxrLoIbBxsWGzgvSzxrLoIbBxx0NlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicaGic8Viej1AwXKigv2zw50q29UDgv4Dcb1BNr1AYbJB21WB3nPDguGAg9VA3mkicaGihzHCIbLDMvUDenVBNrLEhqGpsbUDwXSoWOGicaGAwyGkgnVBxbVBMvUDevUz2LUzsaMjIbdB250zxH0qNvPBgrLCIKGEWOGicaGicbLDMvUDenVBNrLEhqGpsb7cIaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGq29UDgv4Dej1AwXKzxi6ienVBNrLEhrcDwLSzgvYlaOGicaGicaGihrHyMXLtMfTztOGjW','oWOGicaGy29UC3qGCMvJywXJrMLLBgrZid0Gw107cIaGicbJB25ZDcbYzwnHBgnwywX1zxmGpsbBxtSkcIaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx2L0zw1Zksb7cIaGicaGihjLy2fSy0zPzwXKCY5WDxnOkcD0B3rHBf9PDgvTCYa9id8NktSkicaGicaGCMvJywXJvMfSDwvZlNb1C2GOywXSsxrLBxmUBgvUz3rOktSkicaGih0kicaGigLMicHJywXJDwXHDgLVBNmUDg90ywXFCxr5icyMignHBgn1Bgf0Aw9UCY50B3rHBf9XDhKUC291CMnLksb7cIaGicaGignVBNn0ihf0EuzPzwXKid0Gy2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicbJB25ZDcb0B3rHBff0Esa9igfSBeL0zw1ZlNjLzhvJzsHMDw5JDgLVBIHZDw0SigL0zw0PihSGCMv0DxjUihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPoYb9lcaWktSkicaGicaGCMvJywXJrMLLBgrZlNb1C2GOj3rVDgfSx3f0Esa9id8NktSkicaGicaGCMvJywXJvMfSDwvZlNb1C2GODg90ywXrDhKPoWOGicaGFqOGicaG','cIaGicaVlYbszwnHBgn1Bgf0zsbOzwfKzxiGDg90ywXZcIaGicbJB25ZDcbJywXJDwXHDgLVBNmGpsa','lMfKzerHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cIaGicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicb0CNKGEWOGicaGicaGihzHCIbYzxn1BhqGpsbHD2fPDca','y29TCg9Uzw50rw5NAw5Lid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9JB21WB25LBNqTzw5NAw5LjYKUy29TCg9Uzw50rw5NAw5LoWO','lMDLDe1VzgvSsw5MBYHHy3rPB25ZktSkcIaGicbYzxmUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGigvUzhbVAw50oIaN','jYWkicaGicaGBw9KDwXLoIaN','lMDLDerHDgeOz2v0ugf5Bg9HzcK7cG','oWOkicaGicaGDMfYihzHBgLKyxrPB24GpsbHD2fPDca','cI8VimoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRcbszxf1zxn0ifnJB3bLie1PzgrSzxDHCMuGkeXHEwvYideGuKXtksddOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkSW6lIGj3IGQZdOUkaNEkcRmoI4OcD4OkScI8Vier5BMfTAwmGCgvYlxjLCxvLC3qGzMLSDgvYAw5Nigj5icC','A2v5CW','rK1RAu4','cIOGrMLLBgrZoIa','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGEYbHzgrPDgLVBMfSq29UDgv4DdOGEYbYzxf1zxn0swq6ihjLCs5Pzcb8FcbUDwXSih0GFq','DxbKyxrLq29TCg9ZAxrL','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','zMLLBgrmywjLBhm','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YigfKANvZDgaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGywrQDxn0BwvUDhmGyxjYyxKkicaGigLMicGHCMvXlMjVzhKUywrQDxn0BwvUDhmGFhWGiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUywrQDxn0BwvUDhmPihX8ihjLCs5IB2r5lMfKANvZDg1LBNrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNywrQDxn0BwvUDhmGyxjYyxKGAxmGCMvXDwLYzwqGyw5Kig11C3qGBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','l2nYzwf0zs1JB21WB3nPDguGlsbnEvnrtcbdB21WB3nPDguGy3jLyxrLicHTyxn0zxiTzgv0ywLSkqPYB3v0zxiUCg9ZDcGNl2nYzwf0zs1JB21WB3nPDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGy29UC29Szs5SB2COj1jLCxvLC3qGyM9KEsa','jYWkicaGigrHDgfIyxnLvhLWztOGj215C3fSjYWkicaGihbYAw1HCNLlzxK6icC','DxbKyxrLzej5','ie1VzgvSic0GtxLtuuWGrgf0ywjHC2ukkIbhzw5LCMf0zwq6ia','BwfZDgvYrgv0ywLS','cIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','laOGihjLCxvLC3rty29WztOG','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','jYWkicaGicaGicbKzxrHAwXuywjSztOGjW','Dw5PDf9WCMLJzq','ywrQDxn0','qKPwBw8','jYWkicaGicaGicb1ChrPBwu6ihbYB2nLC3mUDxb0Aw1LkcKScIaGicaGicaGBwvTB3j5oIbWCM9JzxnZlM1LBw9YEvvZywDLkcKScIaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicbWBgf0zM9YBtOGChjVy2vZCY5WBgf0zM9YBsWkicaGicaGicaGig5VzgvwzxjZAw9UoIbWCM9JzxnZlNzLCNnPB24ScIaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGFqOGicaGicb9oWOkicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicb9ktSkcIaGicaVlYbnDwf0ihnLBxvHihj1DguGzgfYAsbMB2XKzxiG','y21Pzwu','cIaGicbJB25ZB2XLlMXVzYGNq2fSy3vSyxrLzcb0B3rHBhm6jYWGEYb0B3rHBf9PDgvTCZOGzgf0ys50B3rHBf9PDgvTCYWGDg90ywXFCxr5oIbKyxrHlNrVDgfSx3f0EsWGDg90ywXFyw1VDw50oIbKyxrHlNrVDgfSx2fTB3vUDcb9ktSkicaGia','jYWkicaGicaGicbZzxj2AwnLCZOGE30ScIaGicaGicaGywrKAxrPB25HBenVBNrLEhq6ihSkicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicbYzxf1zxn0swq6ihjLCs5Pzcb8FcbUDwXSlaOGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGic8VigrPlwzVCNDHCMqGA2uGD29YA2zSB3CGAg9VAYbJywXSigfNyxiGzw5KCg9PBNqGDhvQDwfUihLHBMCGChvUEwekicaGicaGicaGic8VihjLCxvLC3rty29WzsbHA3rPzIb0zxrHCcbTzw5LCMLTysbYzxeUDxnLCIbKzw5Nyw4GC2nVCguGEwfUzYbZyw1HlGOGicaGicaGicaGyxv0AeHLywrLCJOGCMvXlMHLywrLCNmUyxv0Ag9YAxPHDgLVBIb8FcbUDwXScIaGicaGicaGFqOGicaGicb9oWOkicaGicaGDhj5ihSkicaGicaGicbJB25ZDcb7ihjLC29SDMvtzxj2AwnLCYb9id0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9Zzxj2AwnLlxjLC29SDMvYjYK7cIaGicaGicaGzxzLBNrdB250zxH0lNnLCNzPy2vZid0GCMvZB2X2zvnLCNzPy2vZkcK7cIaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaVlYbtzxj2AwnLihjLC29SDMvYig9WC2LVBMfScIaGicaGih0kcIaGicaGihjLC3vSDca9igf3ywL0ia','jYWGDMfSAwrgAwvSzhmPoWOkicaVlYbIyxnLlw1VzgvSlw15C3fSigHHBNLHig1LBMvYAw1HidiGCgfYyw1LDgvYlcbZAw1Wyw4Gzgf0yxrHyMXLC1DOzxjLig1HBNvHBaOGihrOAxmUzgf0yxrHyMXLC1DOzxjLid0Gzgf0yxrHyMXLC1DOzxjLoWOkicaVlYbqCMLTyxj5igTLEsbJB25MAwD1CMf0Aw9UcIaGDgHPCY5WCMLTyxj5s2v5id0GjW','Dw5PCxvLq29UC3rYywLUDhm','q29UDgv4Dej1AwXKzxiGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl2nVBNrLEhqTyNvPBgrLCICPoWO','y3jLyxrLq29TCg9ZAxrL','id0GpYbpuKrfuIbcwsbSAw5Lx251BwjLCIC7','t1fOvNC','Dg9mB3DLCKnHC2u','Bg9VA3vWrMLLBgrZ','jYWGzw5KCg9PBNroyw1LlcbPBxbVCNrdB25MAwCPoWOGicaGicaGicaGicaGigXVz2DLCI5PBMzVkhSGzxzLBNq6icDPBxbVCNrFCM91DgvZx3jLz2LZDgvYzwqNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1Lih0SigbjBxbVCNqGCM91DgvZihjLz2LZDgvYzwqGzM9Yicr7zw5KCg9PBNroyw1LFwaPoWOGicaGicaGicaGicb9cIaGicaGicaGicb9ignHDgnOicHPBxbVCNrfCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj2LTCg9YDf9YzwDPC3rYyxrPB25FzxjYB3iNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbLCNjVCJOGAw1WB3j0rxjYB3iUBwvZC2fNzsb9lcbGsw1WB3j0ihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhTPBxbVCNrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGFqOkicaGicaGicaGic8VifjLz2LZDgvYihvWBg9HzcbYB3v0zxmGDMLHignLBNrYywXPEMvKigHHBMrSzxikicaGicaGicaGihrYEsb7cIaGicaGicaGicaGignVBNn0ihvWBg9HzenVBMzPzYa9igv4DhjHy3rvCgXVywrdB25MAwDgCM9Trw5KCg9PBNqOzw5KCg9PBNrqyxrOktSkicaGicaGicaGicaGAwyGkhvWBg9HzenVBMzPzYKGEWOGicaGicaGicaGicaGifvWBg9HzeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifrVBgfRigzVCM1HDcbHzhzHBMnLzcaOy29UzgL0Aw9UCY9SB2DPyYKkicaGigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZihX8ihjLCs5IB2r5lNDOzxjLlMXVz2LJksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0fKDMfUy2vKihDOzxjLigzVCM1HDcbPCYbUB3qGC3vWCg9YDgvKigLUic9MAxjZDcbLBMrWB2LUDc4GvxnLic9YzwfKigvUzhbVAw50igzVCIbJB21WBgv4ihf1zxjPzxmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbHzgeGzgKGDMfSAwrgAwvSzhmkicaGignVBNn0ihzHBgLKrMLLBgrZid0G','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUBwvZC2fNzsa9pt0Gj1jLy29YzcbUB3qGzM91BMqNihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbMB3vUzcCPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGBwvZC2fNztOGjW','ChjPy2vgAwvSza','Cxr5rMLLBgq','jZSkicaGigXLDcbHBgLHC0zPzwXKid0GBNvSBdSkcIaGicaVlYbqCM9ZzxmGC2v0AwfWignVBhvTBIbKywXHBsbZzwXLy3qkicaGigzVCIaOy29UC3qGy29SDw1Uig9MihnLBgvJDenVBhvTBNmPihSkicaGicaGAwyGkgnVBhvTBI50B0XVD2vYq2fZzsGPid09psaN','veftzvu','laOGigLTCg9YDenVBMzPzZOG','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','DMLLD05HBwu','jYWGzw5KCg9PBNroyw1LlcbLEhbVCNrdB25MAwCPoWOGicaGicaGicaGicb9cIaGicaGicaGicb9ignHDgnOicHLEhbVCNrfCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj2v4Cg9YDf9YzwDPC3rYyxrPB25FzxjYB3iNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbLCNjVCJOGzxHWB3j0rxjYB3iUBwvZC2fNzsb9lcbGrxHWB3j0ihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhTLEhbVCNrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGFqOkicaGicaGicaGic8VifjLz2LZDgvYigLTCg9YDcbYB3v0zxmGDMLHignLBNrYywXPEMvKigHHBMrSzxikicaGicaGicaGihrYEsb7cIaGicaGicaGicaGignVBNn0igLTCg9YDenVBMzPzYa9igv4DhjHy3rjBxbVCNrdB25MAwDgCM9Trw5KCg9PBNqOzw5KCg9PBNrqyxrOktSkicaGicaGicaGicaGAwyGkgLTCg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGieLTCg9YDeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','cIaGicaGih07cIaGicaGigLMicHPDgvTlG','qu5eicG','mte2mZbStKHyrxq','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbYzwfKAw5Nia','DgL0Bgu','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9NkcC','cIaGicb2yxiGAgvHzgvYq2fSyYa9ia','cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','lMfKzerHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbjtLnfuLqGy29TCgXLDgvKihDPDgHVDxqGzxzLBNrZjYK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDieLou0vsvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj215C3fSjYWkicaGicaGz2vUzxjHDgvKoIaN','zgvMyxvSDfnJB3bL','ydSkcIaGicaVlYbcDwLSzcbxsevsrsbJBgf1C2uGAMLRysbHzgekicaGigLMicGOB3b0Aw9UCY53AgvYzsaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUD2HLCMuPicyMig9WDgLVBNmUD2HLCMuUBgvUz3rOid4GmcKGFhWkicaGicaGicaOB3b0Aw9UCY53AgvYzsaMjIbVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmPicyMig9WDgLVBNmUD2HLCMuUy29UzgL0Aw9UCY5Szw5NDgGGpIaWksKGEWOGicaGicb0CNKGEWOGicaGicaGignVBNn0ihDOzxjLuMvZDwX0id0GDgHPCY5IDwLSzenVBxbSzxHxAgvYzunSyxvZzsHVChrPB25ZlNDOzxjLlcbWyxjHBxmPoWOGicaGicaGihf1zxj5icS9iga','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicbPzIaOixjLCs5IB2r5ihX8icfYzxeUyM9KEs4','BNvTyMvY','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFqOk','DxbKyxrLx2v4Axn0Aw5N','icHnEvnrtcbeyxrHyMfZzsKkicOGqhbHCMfTihTpyMPLy3r9ignVBMzPzYaTieTVBMzPz3vYyxnPihvUDhvRig1LBMPHBgfUA2fUig1VzhvScIaQiebWyxjHBsb7BNvTyMvYFsbJB25MAwCUCg9YDcaTifbVCNqGDw50DwSGC2vYDMvYcIaQiebWyxjHBsb7C3rYAw5NFsbJB25MAwCUA2v5ic0GqvbjieTLEsaOB3bZAw9UywWPcIaQiebYzxr1CM5ZihTqCM9TAxnLphzVAwq+FsbqCM9TAxnLihLHBMCGDgLKywSGCgvYBMfOihjLC29SDMuGywDHCIbZzxj2zxiGDgv0yxaGyMvYAMfSyw4kicOVcMfZEw5Jigz1BMn0Aw9Uigv4zwn1DguOy29UzMLNksb7cIaGCMv0DxjUig5LDYbqCM9TAxnLkcHYzxnVBhzLksa9pIb7cIaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicbJB25ZDcbWB3j0id0Gy29UzMLNlNbVCNqGFhWGmZaWmdSkicaGignVBNn0ihnLCNzLCKfKzhjLC3mGpsbJB25MAwCUC2vYDMvYqwrKCMvZCYb8FcaNmc4WlJaUmcC7cIaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','ih07cMnVBxbVBMvUDevUz2LUzs5SB2fKq29UzMLNDxjHDgLVBKzYB21pyMPLy3qOx2nVBxbVBMvUDfbHEwXVywqPlNrOzw4OCMvZDwX0id0+ihSkicbPzIaOCMvZDwX0lNn1y2nLC3mPihSkicaGignVBNnVBguUBg9NkgbdB21WB25LBNqGy29UzMLNDxjHDgLVBIbSB2fKzwqGzM9Yia','cGOGicaGy29UC29Szs5SB2COya','x2LK','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGlY8GuKvbrcbVCgvYyxrPB25ZoIbPBMPLy3qGC2nVCguGAw50BYbYzxeUyM9KEs53AgvYzqOGigLMicHBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNCMvHzc1JB21WB3nPDguNxs5PBMnSDwrLCYHLBMrWB2LUDcKPihSkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbBC2nVCgvdB25KAxrPB25DoWOGicaGFsbLBhnLigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxeUyM9KEs53AgvYzs51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGih0GzwXZzsbPzIaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksb7cIaGicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGicaGAwyGkg9YAwDPBMfStg9NAwmGpt09icDbtKqNksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCY51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGicaGFsbLBhnLihSkicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicaGigXVz2LJoIaNqu5ejYWkicaGicaGicaGignVBMrPDgLVBNm6ifSkicaGicaGicaGicaGC2nVCgvdB25KAxrPB24ScIaGicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGicaGxqOGicaGicaGih07cIaGicaGih0kicaGih0kicb9cGOGic8VierftevurtOGChjLCgvUzcbZy29WzsbJB25KAxrPB24GDg8GD2HLCMuGyxjYyxKkicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNksb7cIaGicbPzIaOCMvXlMjVzhKUD2HLCMuPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUDw5ZAgLMDcHZy29WzunVBMrPDgLVBIK7cIaGicaGih0kicaGih0kicb9cGOGic8ViensrufursaVieferdOGzM9Yy2uGC2nVCguGy29SDw1UihzHBhvLcIaGAwyGkgvUzhbVAw50id09psaNywrKjYb8FcbLBMrWB2LUDca9pt0Gj2nYzwf0zsCPihSkicaGihjLCs5IB2r5wYC','BwfZDgvYrgv0ywLSlMrLDgfPBenVBMzPzY5KzxrHAwXrDwvYEq','zM9YBxvSyq','jhT3AgvYzvjLC3vSDc5ZCwX9','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbpyMPLy3qUyxnZAwDUkgrHDgeSihzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysK7cIaGicb9cGOGicaGAwyGkgrHDgeU','ktSkicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbvuerbveuGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','l3vWzgf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicbPzIaOixjLCs5IB2r5ihX8icfYzxeUyM9KEs4','ih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGj01HC3rLCIbYzwnVCMqGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','lY8Gue9tvcaVyxbPlW','oWOGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHYzxeUyM9KEs53AgvYzs5RzxKPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGsw52ywXPzcbMAwvSzdOGjhTYzxeUyM9KEs53AgvYzs5RzxL9ycWkicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGC2vSzwn0igzPzwXKCYbQAwTHigfKyqOGicaGAwyGkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihSkicaGicaGy29UC3qGAw52ywXPzezPzwXKCYa9ihjLCs5IB2r5lNnLBgvJDc5MAwX0zxiOzMLLBgqGpt4GixzHBgLKrMLLBgrZlMLUy2X1zgvZkgzPzwXKksK7cGOGicaGicbPzIaOAw52ywXPzezPzwXKCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihnLBgvJDcbMAwvSzhmNlaOGicaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgqOCYK6icr7Aw52ywXPzezPzwXKCY5QB2LUkcCSicCPFwaScIaGicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicb9cGOGicaGlY8Gq29UDMvYDcbRzsbHCNjHEsbMB3jTyxqGDw50DwSGA29TCgf0AwjPBgL0yxmGzgvUz2fUig1VzgvSlMDLDerHDgeOksddOUkaOokaMsbIDwLSzenVBxbSzxHxAgvYzunSyxvZzsGPcIaGicbJB25ZDcbNzxrqyxLSB2fKid0GEWOGicaGicb3AgvYztOGw3SGA2v5oIbYzxeUyM9KEs53AgvYzs5RzxKSihzHBhvLoIbYzxeUyM9KEs53AgvYzs52ywX1zsb9xsWkicaGicaGC2vSzwn0oIbYzxeUyM9KEs5ZzwXLy3qkicaGih07cIaGicbJB25ZDcbYzxn1BhqGpsbHD2fPDca','ywDNCMvNyxrL','yxvKAxrdB2X1Bw5Z','igrHDgeGywrKzwqGC3vJy2vZC2z1BgX5oIaKE3jLC3vSDc4','iefqssaOtxLtuuWGrgf0ywjHC2uPjYWkicaGicaGicaGihn0yxr1CZOGj3j1BM5PBMCNlaOGicaGicaGicaGzgf0ywjHC2u6icDnEvnrtcCkicaGicaGicb9ktSkicaGicaGFsK7cGOGicaGicaVlYbfCNjVCIbOyw5KBgLUzYbTAwrKBgv3yxjLcIaGicaGigfWCc51C2uOkgvYCIWGCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCJONlcbLCNiPoWOkicaGicaGicbPzIaOzxjYigLUC3rHBMnLB2yGu3LUDgf4rxjYB3iGjIyGzxjYlNn0yxr1CYa9pt0GndaWicyMicDIB2r5jYbPBIbLCNiGjIyGixjLCY5OzwfKzxjZu2vUDcKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbku09oihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNvgHLihbHEwXVywqGC2vUDcbPCYbUB3qGysb2ywXPzcbku09oigzVCM1HDcCScIaGicaGicaGicaGigrLDgfPBhm6igvYCI5TzxnZywDLcIaGicaGicaGicb9ktSkicaGicaGicb9cGOGicaGicaGigLMicGHCMvZlMHLywrLCNntzw50ksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicaGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGB24GDgHLihnLCNzLCICScIaGicaGicaGicaGigrLDgfPBhm6igvYCI5TzxnZywDLcIaGicaGicaGicb9ktSkicaGicaGicb9cGOGicaGicaGig5LEhqOzxjYktSkicaGicaGFsK7cGOGicaGicaVlYbiB29RihvUDhvRig1VDw50ig1PzgrSzxDHCMuGDgfTyMfOyw4GC2vIzwX1BsbJ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icaGicbku09olNbHCNnLkgj1zIK7cIaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbku09oihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNvgHLihbHEwXVywqGC2vUDcbPCYbUB3qGysb2ywXPzcbku09oigzVCM1HDcCScIaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2ukicaGicaGicaGih0PoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDjBNzHBgLKiePtt04NktSkicaGicaGicb9cIaGicaGih0kicaGih0PktSkcIaGicbHChaUDxnLkgjVzhLqyxjZzxiUDxjSzw5JB2rLzcH7igv4DgvUzgvKoIb0CNvLih0PktSkcIaGicaVlYbszxf1zxn0igXVz2DPBMCGBwLKzgXLD2fYzsaOugLUBY1IyxnLzcKkicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGihjLCs5Pzca9ihjLCs5OzwfKzxjZwYD4lxjLCxvLC3qTAwqNxsb8Fcb1DwLKDJCOktSkicaGicaGCMvZlNnLDcGNwc1szxf1zxn0luLejYWGCMvXlMLKktSkcIaGicaGihjLCs5SB2CGpsbJCMvHDgvszxf1zxn0tg9Nz2vYkhSkicaGicaGicbYzxf1zxn0swq6ihjLCs5PzcWkicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGCgf0AdOGCMvXlNbHDgGScIaGicaGicaGAxa6ihjLCs5PCaOGicaGicb9ktSkcIaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicbJB25ZDcbBC2vJB25KCYWGBMfUB3nLy29UzhnDid0GChjVy2vZCY5OCNrPBwuOC3rHCNruAw1LktSkicaGicaGicbJB25ZDcbKDxjHDgLVBK1Zid0GCgfYC2vgBg9HDcGOC2vJB25KCYaQideWmdaGkYbUyw5VC2vJB25KCYaVidfLnIKUDg9gAxHLzcGYksK7cIaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGih0PoWOkicaGicaGBMv4DcGPoWOGicaGFsK7cGOGicaGlY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbbueKGA2v5igPPA2eGzgLWzxjSDwTHBIaOy29UC3rHBNqTDgLTzsbJB21WyxjPC29UkqOGicaGAwyGkgnVBMzPzY5RzxKPihSkicaGicaGy29UC3qGy3j5ChrVid0GCMvXDwLYzsGNy3j5ChrVjYK7cIaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicbHChaUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicbPzIaOiwfWAuTLEsKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGignVBNn0ihbYB3zPzgvKs2v5id0GqNvMzMvYlMzYB20OyxbPs2v5ktSkicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGiwnYExb0BY50Aw1PBMDtywzLrxf1ywWOzxHWzwn0zwrlzxKSihbYB3zPzgvKs2v5ksKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGig5LEhqOktSkicaGicaGFsK7cIaGicb9cGOGicaGlY8GuMf0zsbSAw1PDgLUzYbTAwrKBgv3yxjLicHZDg9YztOGBwvTB3j5ihvUDhvRihnPBMDSzsbTB2rLlcbszwrPCYb1BNr1AYbJBhvZDgvYig1VzguPcIaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicbHChaUDxnLkcCVyxbPjYWGCMf0zuXPBwL0zxiUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbjzgvTCg90zw5JEsbTAwrKBgv3yxjLicHWCM90zwn0CYbTDxrHDgLVBIbLBMrWB2LUDhmGzNjVBsbKDxbSAwnHDguGzxHLy3v0Aw9UkqOGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicbHChaUDxnLkcCVyxbPjYWGAwrLBxbVDgvUy3LnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cIaGicb9cGOGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGigfWCc51C2uOjY9HCgKNlcbIB2r5t3b0Aw9UC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbbDxrVlwXVywqGCgX1z2LUicHQAwTHigfKysKkicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','y2HHCKf0','ChjPBwfYEuTLEq','CMvXDwvZDfnJB3bL','oWOkicbZDxbLCIGN','v0HfuKuG','Bgv0ignVBxbVBMvUDevUz2LUzsa9ig51BgW7cMXLDcbdB250zxH0qNvPBgrLCIa9ig51BgW7cG','ChvZAa','CMvHzenVBxbVC2L0zq','l2HLywX0AgaScIaGicaGicaGicbZzxj2AwnLsw5MBZOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9l2fWAs8','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','z2vUzxjHDgvK','jWOGih07cGOGihrOAxmUywr2yw5JzwrrDwvYEvrLBxbSyxrLCYa9ihrOAxmUBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOktSkFqOklYOQcIaQieXVywqGywr2yw5JzwqGCxvLCNKGDgvTCgXHDgvZigrHCMKGzMLSzqOGkI8kBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOksb7cIaGy29UC3qGDgvTCgXHDgvZid0GE307cGOGia','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','laOGicaGz2vUzxjHDgvKoIaN','jYWGzw5KCg9PBNroyw1Llcb1CgXVywrdB25MAwCPoWOGicaGicaGicaGicaGigXVz2DLCI5PBMzVkhSGzxzLBNq6icD1CgXVywrFCM91DgvZx3jLz2LZDgvYzwqNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbMAwvSzhm6ie9IAMvJDc5RzxLZkhvWBg9HzenVBMzPzY5MAwvSzhmGFhWGE30Pih0SigbvCgXVywqGCM91DgvZihjLz2LZDgvYzwqGzM9Yicr7zw5KCg9PBNroyw1LFwaPoWOGicaGicaGicaGicb9cIaGicaGicaGicb9ignHDgnOicH1CgXVywrfCNjVCIKGEWOGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3vWBg9Hzf9YzwDPC3rYyxrPB25FzxjYB3iNlcbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlcbLCNjVCJOGDxbSB2fKrxjYB3iUBwvZC2fNzsb9lcbGvxbSB2fKihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhT1CgXVywrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGFqOGicaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGicbJB25ZB2XLlMvYCM9YkgbfCNjVCIbSB2fKAw5Nig1VzhvSzsaKE2zPBgv9igzYB20G','ie9srevsiejzia','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKimoI4OkS4OcDig5Vihf0EsbMAwvSzcbJB25MAwD1CMvK','ntG0mtCWmhrlCxP4Ea','DhjPBq','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5ZDgf0DxndB2rLid09psa0mdaGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8cIaGicaGicaGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNsw52ywXPzcbHz2DYzwDHDguGzNvUy3rPB24Nksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0LUDMfSAwqGywXPyxmNksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj29UBhKGywXSB3DLzcb3AxrOienpvu5ujYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzgvMAw5LzcbPBIbHz2DYzwDHDguGy29UzMLNjYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUBYbQB2LUigrLzMLUAxrPB25ZigzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigfNz3jLz2f0Aw5Nia','iI5ZDgfYDhnxAxrOkcDMAwXLoICPksb7cIaGicaGignVBNn0ihjLBgf0AxzLugf0Aca9ici','tw9KzwW','jYWGjW','zgf0yxrHyMXLCW','igrHDgf0ywjSzxm6jYWGzxjYB3iPoWOGicaGy29UC3qGC3rHDhvZq29Kzsa9igvYCM9YlNn0yxr1C0nVzguGFhWGntaWoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOC3rHDhvZq29KzsKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGC3rHDhvZq29Kzsa9pt0GndaWid8Gj0jHzcbszxf1zxn0jYa6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIbZDgf0DxndB2rLid09psa0mdaGpYbLCNjVCI5TzxnZywDLidOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','jYK7cGOVlYbjC3n1zsaJmtm6ig1HCcbUyw1HignVBNn0CMfPBNqGkgXVD2vYy2fZzsWGDgfUCgeGChjLzML4ksaTpIbMAwvSzcbWzw55zwjHyIbRB25MBgLRlaOVlYbKAxrHBMfTigrHCMKGCgf5Bg9Hzc51BMLXDwvdB25ZDhjHAw50CYbZywf0ignVzgvNzw4Uie1HCcbRB3nVBMCGE30GyMLSysbWyxLSB2fKihrPzgfRcI8Vig1LBwjHD2eGDw5PCxvLq29UC3rYywLUDhmGkhnLBxvHigXVB2T1CcbTAxnZic0+igzHBgXIywnRig9TAxqGygrLDgfPBhnGks4ky29UC3qGrfvqx0nptLnuuKfjtLrFrKLftertid0G','cI8QkGOQia','ywr2yw5JzwrrDwvYAwvZ','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih1Dih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGDMfYihjLC3vSDca9igf3ywL0ia','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUzxjYBM8Gpt09ideWnJiPihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kicaGigLMicHLCNjVCI5LCNjUBYa9pt0Gmtq1mIKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy3jLyxrPBMCG','ks4G','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqNlaOGicaGicbKyxrHoIbYzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NDxbKyxrLigrHDgeG','ycK7cG','lMrLBgv0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsberuXfveuGy29TCgXLDgvKihDPDgHVDxqGzxzLBNrZjYK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDierftevursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','CMvHza','DMLLD1f1zxj5','y29UC3qGzxHWCMvZCYa9ihjLCxvPCMuOj2v4ChjLC3mNktSky29UC3qGyM9KEvbHCNnLCIa9ihjLCxvPCMuOj2jVzhKTCgfYC2vYjYK7cMnVBNn0ihbHDgGGpsbYzxf1AxjLkcDWyxrOjYK7cMnVBNn0igzZid0GCMvXDwLYzsGNzNmNktSky29UC3qGEYb2nZOGDxvPzhy3ih0GpsbYzxf1AxjLkcD1DwLKjYK7cMnVBNn0ihSGBg9Nz2vYlcbSB2Dtzxj2zxjszwfKEsWGBg9Nrw5KCg9PBNrszwDPC3rLCMvKlcbJCMvHDgvszxf1zxn0tg9Nz2vYlcbSB2Dszxf1zxn0ih0GpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl2XVz2DLCICPoWPJB25ZDcbfEhbVCNriyw5KBgvYid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9JB21WB25LBNrZl2HHBMrSzxjZl2v4Cg9YDf9Oyw5KBgvYjYK7cMnVBNn0ieLTCg9YDeHHBMrSzxiGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl2nVBxbVBMvUDhmVAgfUzgXLCNmVAw1WB3j0x2HHBMrSzxiNktSky29UC3qGvxbSB2fKsgfUzgXLCIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVy29TCg9Uzw50CY9Oyw5KBgvYCY91CgXVywrFAgfUzgXLCICPoWPJB25ZDcb7igv4DhjHy3rfEhbVCNrdB25MAwDgCM9Trw5KCg9PBNqSigv4DhjHy3rjBxbVCNrdB25MAwDgCM9Trw5KCg9PBNqSigv4DhjHy3rvCgXVywrdB25MAwDgCM9Trw5KCg9PBNqGFsa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVDxrPBhmVy29UzMLNlwv4DhjHy3rVCICPoWPJB25ZDcbYyxrLtgLTAxrLCIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVBwLKzgXLD2fYzs9YyxrLlwXPBwL0zxiNktSky29UC3qGAwrLBxbVDgvUy3LnAwrKBgv3yxjLid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9TAwrKBgv3yxjLl2LKzw1WB3rLBMn5jYK7cMnVBNn0igjVzhLpChrPB25ZtwLKzgXLD2fYzsa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVBwLKzgXLD2fYzs9IB2r5lw9WDgLVBNmNktSky29UC3qGy29YC01PzgrSzxDHCMuGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl21PzgrSzxDHCMuVy29YCYCPoWPJB25ZDcbZzwn1CML0EuHLywrLCNmGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl21PzgrSzxDHCMuVC2vJDxjPDhKTAgvHzgvYCYCPoWOklYOQcIaQiez1BMDZAsb1BNr1AYbTzw5NzwTZzwT1C2KGBw9KDwWG','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','ktSkcIaGicbYzxr1CM4GCMvZlNn0yxr1CYGYmdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbTzxnZywDLoIaN','ksb8FcaWktS','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8GvvbeqvrfoIbMB3jJzsbZy29WzsbJB2X1Bw4GDMfSDwuGkg93BMvYC2HPCcb2zxjPzMLLzcbPBIaVDxbKyxrLigHHBMrSzxiPcIaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGCMvXlMjVzhLBjW','psr7CMvXlMjVzhLBjW','zM9YrwfJAa','zMLLBgroyw1L','C3bSAxq','Aw1WB3j0','CxD3Du0','y3jLyxrLzej5','y29TCg9Uzw50CW','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','cIaGicbJB25ZDcbHzgP1C3rdB25MAwCGpsbJB21WB25LBNrdB25MAwCUywrQDxn0q29UzMLNihX8ihT9oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGO'];a0_0x2ff5=function(){return _0xa1aa41;};return a0_0x2ff5();}function toPascalCase(_0x33859f){const _0x1912ba=a0_0x2fb5,_0x421b07={'xqQRm':function(_0xdf80f,_0x57ebe4){return _0xdf80f!==_0x57ebe4;},'LjPww':function(_0x1a5b4a,_0x1539e5){return _0x1a5b4a(_0x1539e5);},'vhRrt':function(_0x55617b,_0x958fa1){return _0x55617b+_0x958fa1;}};if(!_0x33859f||_0x421b07['xqQRm'](typeof _0x33859f,'string'))return'';const _0x33a084=_0x421b07[_0x1912ba(0x1cb)](toCamelCase,_0x33859f);return _0x421b07['vhRrt'](_0x33a084[_0x1912ba(0x241)](0x0)['toUpperCase'](),_0x33a084[_0x1912ba(0x1b9)](0x1));}function a0_0x2fb5(_0x41b4ee,_0x42ec87){_0x41b4ee=_0x41b4ee-0x154;const _0x2ff580=a0_0x2ff5();let _0x2fb5fc=_0x2ff580[_0x41b4ee];if(a0_0x2fb5['jaWDcl']===undefined){var _0x5c60ad=function(_0x34c98e){const _0x11e58d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x36c9aa='',_0x3b6c6c='';for(let _0x54da8d=0x0,_0x405fbf,_0xe31fa3,_0x2ee372=0x0;_0xe31fa3=_0x34c98e['charAt'](_0x2ee372++);~_0xe31fa3&&(_0x405fbf=_0x54da8d%0x4?_0x405fbf*0x40+_0xe31fa3:_0xe31fa3,_0x54da8d++%0x4)?_0x36c9aa+=String['fromCharCode'](0xff&_0x405fbf>>(-0x2*_0x54da8d&0x6)):0x0){_0xe31fa3=_0x11e58d['indexOf'](_0xe31fa3);}for(let _0xeb356=0x0,_0x3a586e=_0x36c9aa['length'];_0xeb356<_0x3a586e;_0xeb356++){_0x3b6c6c+='%'+('00'+_0x36c9aa['charCodeAt'](_0xeb356)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3b6c6c);};a0_0x2fb5['JcBvCq']=_0x5c60ad,a0_0x2fb5['UuNXHt']={},a0_0x2fb5['jaWDcl']=!![];}const _0xc93244=_0x2ff580[0x0],_0x18930=_0x41b4ee+_0xc93244,_0x2d5535=a0_0x2fb5['UuNXHt'][_0x18930];return!_0x2d5535?(_0x2fb5fc=a0_0x2fb5['JcBvCq'](_0x2fb5fc),a0_0x2fb5['UuNXHt'][_0x18930]=_0x2fb5fc):_0x2fb5fc=_0x2d5535,_0x2fb5fc;}function assertNoFileReferenceLeftover(_0x2849e8){const _0x42b6ed=a0_0x2fb5,_0x734fe5={'gWHgn':_0x42b6ed(0x265),'flGvU':_0x42b6ed(0x231),'Kekyu':function(_0x439ef7,_0x375092){return _0x439ef7===_0x375092;}},_0x17ad88=[[_0x42b6ed(0x17b),_0x2849e8[_0x42b6ed(0x17b)]],[_0x734fe5[_0x42b6ed(0x276)],_0x2849e8[_0x42b6ed(0x265)]],[_0x734fe5[_0x42b6ed(0x16a)],_0x2849e8[_0x42b6ed(0x1f5)]&&_0x2849e8[_0x42b6ed(0x1f5)]['detailConfig']&&_0x2849e8[_0x42b6ed(0x1f5)]['detailConfig']['detailQuery']]];for(const [_0x454876,_0x203186]of _0x17ad88){if(_0x734fe5['Kekyu'](typeof _0x203186,'string')&&_0x203186['startsWith']('file:'))throw new Error('Codegen\x20invariant\x20violation:\x20'+_0x454876+'\x20still\x20contains\x20\x22file:\x22\x20reference\x20('+_0x203186+_0x42b6ed(0x25f)+'Expected\x20expanded\x20SQL\x20string.\x20Check\x20PayloadProcessor.processFileReferences\x20flow.');}}function buildAuditColumnsSection(_0x3511f8,_0x1bdee2){const _0x2fc9d3=a0_0x2fb5,_0x248f9c={'UxBgu':_0x2fc9d3(0x23b),'jYOpp':function(_0x19cc67,_0x2c6be6){return _0x19cc67===_0x2c6be6;},'KZMrl':function(_0x5ef8cc,_0x57a6dc){return _0x5ef8cc===_0x57a6dc;},'BtCZT':'object','Ieqmy':'createdAt','BGnrq':'updatedAt','VeZjb':_0x2fc9d3(0x1f3)};if(!(_0x248f9c['UxBgu']in _0x3511f8))return'';const _0x3cdc4f=_0x3511f8['auditColumns'];if(_0x248f9c[_0x2fc9d3(0x1b8)](_0x3cdc4f,![])||_0x3cdc4f===null)return'\x0a'+_0x1bdee2+_0x2fc9d3(0x1ee)+_0x1bdee2+'this.auditColumns\x20=\x20null;\x0a';if(_0x248f9c['KZMrl'](typeof _0x3cdc4f,_0x248f9c['BtCZT'])&&!Array['isArray'](_0x3cdc4f)){const _0x3fa8fc=[_0x248f9c['Ieqmy'],_0x2fc9d3(0x271),_0x248f9c[_0x2fc9d3(0x199)],_0x248f9c['VeZjb']],_0x2fd44b={};_0x3fa8fc['forEach'](_0x468bd7=>{if(_0x3cdc4f[_0x468bd7]!==undefined)_0x2fd44b[_0x468bd7]=_0x3cdc4f[_0x468bd7];});const _0x40f7ce=JSON[_0x2fc9d3(0x287)](_0x2fd44b,null,0x2)['split']('\x0a')['map']((_0x4885cc,_0x4ed59a)=>_0x4ed59a===0x0?_0x4885cc:_0x1bdee2+_0x4885cc)[_0x2fc9d3(0x158)]('\x0a');return'\x0a'+_0x1bdee2+'//\x20Custom\x20audit\x20columns\x20mapping\x20dari\x20payload\x0a'+_0x1bdee2+_0x2fc9d3(0x1c0)+_0x40f7ce+';\x0a';}throw new Error('Invalid\x20auditColumns\x20value\x20for\x20'+_0x3511f8['tableName']+_0x2fc9d3(0x1d7));}function detectTextColumn(_0x5c8814){const _0x54eeb0=a0_0x2fb5,_0x932c55=[_0x54eeb0(0x163),'nama',_0x54eeb0(0x220),'judul',_0x54eeb0(0x17d),'deskripsi','code','kode'];for(const _0x5e0e9d of _0x932c55){const _0x3a8126=_0x5c8814['find'](_0x53ef9a=>_0x53ef9a['toLowerCase']()['includes'](_0x5e0e9d));if(_0x3a8126)return _0x3a8126;}return _0x5c8814[_0x54eeb0(0x18b)](_0x36dc44=>_0x36dc44!=='id')||_0x5c8814[0x0]||_0x54eeb0(0x1a1);}function createMysqlMainModuleTemplate(_0x53d284){const _0x45fb2a=a0_0x2fb5,_0x30372c=toPascalCase(_0x53d284);return _0x45fb2a(0x266)+_0x53d284+_0x45fb2a(0x22c)+_0x30372c+_0x45fb2a(0x240)+_0x53d284+_0x45fb2a(0x1bc)+_0x53d284+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\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\x20service:\x20\x27'+_0x53d284+_0x45fb2a(0x200)+_0x53d284+'\x0a\x20\x20\x20\x20const\x20modulesDir\x20=\x20path.join(__dirname,\x20\x27'+_0x53d284+'\x27);\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Directory\x20${modulesDir}\x20created\x20successfully`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\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}\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\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\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\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\x20if\x20(require.cache[endpointPath])\x20{\x0a\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}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20moduleRoutes\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0x53d284+'/${endpointName}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20app.use(endpointPrefix,\x20moduleRoutes);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logEndpointRegistered(endpointName,\x20endpointPrefix);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20export\x20routes\x20via\x20centralized\x20handler\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\x20exportConfig\x20=\x20extractExportConfigFromEndpoint(endpointPath);\x0a\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\x20ExportHandler.registerRoutes(app,\x20\x27'+_0x53d284+_0x45fb2a(0x21b)+_0x53d284+_0x45fb2a(0x20c)+_0x53d284+_0x45fb2a(0x24f)+_0x53d284+_0x45fb2a(0x173)+_0x53d284+_0x45fb2a(0x23d)+_0x53d284+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20healthCheck:\x20`http://${displayHost}:${port}/api/'+_0x53d284+_0x45fb2a(0x249)+_0x53d284+'/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\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Menerima\x20sinyal\x20SIGINT,\x20shutting\x20down...\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Menerima\x20sinyal\x20SIGTERM,\x20shutting\x20down...\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20});\x0a\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});\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});\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menjalankan\x20modul\x20'+_0x53d284+':\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20resolve();\x0a\x20\x20\x20\x20}\x0a\x20\x20});\x0a}\x0a\x0amodule.exports\x20=\x20{\x20execute\x20};';}function buildDefaultScopeSQL(_0x3fede9,_0xd0c1c2=''){const _0x5e954a=a0_0x2fb5,_0x406a77={'GlYyy':function(_0xb6cc91,_0x1959d3){return _0xb6cc91!==_0x1959d3;},'OMClK':'object','teLhY':function(_0x3bf06e,_0x2b7890){return _0x3bf06e===_0x2b7890;},'BJVmo':_0x5e954a(0x188),'wrWeV':function(_0x465d77,_0xb13bce){return _0x465d77===_0xb13bce;},'VOKPY':_0x5e954a(0x229)};if(!_0x3fede9||_0x406a77['GlYyy'](typeof _0x3fede9,_0x406a77[_0x5e954a(0x1aa)]))return'';const _0x18ca9c=[];for(const [_0x44f544,_0x12a3cb]of Object[_0x5e954a(0x193)](_0x3fede9)){if(typeof _0x12a3cb==='boolean')_0x18ca9c[_0x5e954a(0x247)](''+_0xd0c1c2+_0x44f544+'\x20=\x20\x27'+_0x12a3cb+'\x27');else{if(_0x406a77['teLhY'](typeof _0x12a3cb,_0x406a77[_0x5e954a(0x1ff)]))_0x18ca9c[_0x5e954a(0x247)](''+_0xd0c1c2+_0x44f544+_0x5e954a(0x168)+_0x12a3cb[_0x5e954a(0x180)](/'/g,'\x27\x27')+'\x27');else _0x406a77[_0x5e954a(0x1a3)](typeof _0x12a3cb,_0x406a77['VOKPY'])&&_0x18ca9c['push'](''+_0xd0c1c2+_0x44f544+'\x20=\x20'+_0x12a3cb);}}return _0x18ca9c[_0x5e954a(0x158)]('\x20AND\x20');}function buildRequestScopeMiddleware(_0x37b114,_0x2d56ca){const _0x4148d4=a0_0x2fb5;if(!_0x37b114[_0x4148d4(0x243)])return'';const {column:_0x5cfd01,source:_0x2367c7,bypassRoles:_0x187615}=_0x37b114[_0x4148d4(0x243)],_0x4aade0=JSON[_0x4148d4(0x287)](_0x187615||[]),_0x5e4c95=(_0x2d56ca||'')[_0x4148d4(0x180)](/-/g,'_');return _0x4148d4(0x1e3)+_0x5cfd01+_0x4148d4(0x280)+_0x2367c7+'\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'+_0x4aade0+';\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'+_0x2367c7+';\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'+_0x5cfd01+_0x4148d4(0x1ae)+_0x5cfd01+_0x4148d4(0x230)+_0x5cfd01+_0x4148d4(0x26a)+_0x5cfd01+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE-COMPOSITE\x20/\x20UPDATE-COMPOSITE:\x20force\x20scope\x20column\x20inside\x20master\x20body.\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'+_0x5e4c95+_0x4148d4(0x15c)+_0x5cfd01+_0x4148d4(0x1bf);}function createMysqlModelTemplate(_0x4e2227,_0x2954e1,_0x37adf0){const _0x51eef1=a0_0x2fb5,_0x3e1114={'wCPKt':'timestamp','hokqg':'time','FMkiN':_0x51eef1(0x164),'OQhVw':function(_0xc30934,_0xccad7b){return _0xc30934===_0xccad7b;},'LPpmC':'\x20\x20this.validationConfig\x20=\x20{};\x20//\x20No\x20field\x20validation\x20config','qwwuM':'items.','uIRiw':function(_0x8c2e40,_0x2a5a13){return _0x8c2e40+_0x2a5a13;},'QFapv':function(_0x1e76e9,_0x118e37){return _0x1e76e9>_0x118e37;},'gVvqM':function(_0xfe1659,_0x59db69){return _0xfe1659>_0x59db69;},'PjpQr':function(_0x3f37e7,_0x17558b){return _0x3f37e7+_0x17558b;},'TASeU':function(_0x152d2a,_0x2e359f){return _0x152d2a(_0x2e359f);},'UyXVH':function(_0x1d3347,_0xb9f5d,_0x1aa11f){return _0x1d3347(_0xb9f5d,_0x1aa11f);},'cmiee':function(_0x183840,_0x4681e6){return _0x183840>_0x4681e6;},'bLqhg':'\x0a\x20\x20','vyItO':_0x51eef1(0x156)};_0x3e1114[_0x51eef1(0x212)](assertNoFileReferenceLeftover,_0x37adf0);const _0x4b054e=_0x37adf0[_0x51eef1(0x26d)][_0x51eef1(0x283)](_0x5410d6=>'\x27'+_0x5410d6+'\x27')['join'](',\x20'),_0x28771d=_0x3e1114['TASeU'](toPascalCase,_0x2954e1),_0x3602a1=_0x37adf0[_0x51eef1(0x242)]||'id',_0x4ad8b6=detectTextColumn(_0x37adf0['fieldName']),_0x492907=new Date()['toISOString'](),_0x37e27c=_0x3e1114['UyXVH'](buildAuditColumnsSection,_0x37adf0,'\x20\x20'),_0x544b5b=_0x37adf0['defaultScope']&&_0x37adf0[_0x51eef1(0x226)][_0x51eef1(0x162)]?buildDefaultScopeSQL(_0x37adf0[_0x51eef1(0x226)]['lookup']):'',_0x50aa89=_0x37adf0['defaultScope']&&_0x37adf0['defaultScope']['read']?buildDefaultScopeSQL(_0x37adf0[_0x51eef1(0x226)][_0x51eef1(0x264)]):'',_0x92765f={};return _0x37adf0[_0x51eef1(0x1ab)]&&Array[_0x51eef1(0x286)](_0x37adf0['fieldValidation'])&&_0x37adf0[_0x51eef1(0x1ab)][_0x51eef1(0x26c)](_0x2d2eee=>{const _0x26327c=_0x51eef1;['date','datetime',_0x3e1114['wCPKt'],_0x3e1114['hokqg']]['includes'](_0x2d2eee[_0x26327c(0x161)])&&(_0x92765f[_0x2d2eee[_0x26327c(0x163)]]={'type':_0x2d2eee[_0x26327c(0x161)],'format':_0x2d2eee['constraints']&&_0x2d2eee['constraints']['format']||'yyyy-MM-dd'});}),_0x51eef1(0x15d)+_0x28771d+_0x51eef1(0x1f4)+_0x492907+'\x0a*\x0a*\x20Table:\x20'+_0x37adf0['tableName']+'\x0a*\x20Primary\x20Key:\x20'+_0x3602a1+_0x51eef1(0x1e6)+_0x37adf0[_0x51eef1(0x26d)][_0x51eef1(0x1b6)]+_0x51eef1(0x16c)+_0x28771d+_0x51eef1(0x155)+_0x4b054e+_0x51eef1(0x187)+(_0x37adf0['datatablesWhere']?JSON[_0x51eef1(0x287)](_0x37adf0['datatablesWhere']):'[\x27kode\x27,\x20\x27nama\x27,\x20\x27all\x27]')+_0x51eef1(0x244)+_0x37adf0['tableName']+_0x51eef1(0x204)+_0x3602a1+'\x27;\x0a\x0a\x20\x20//\x20Read/Write\x20source\x20configuration\x0a\x20\x20this.viewName\x20=\x20\x27'+(_0x37adf0[_0x51eef1(0x21a)]||_0x37adf0[_0x51eef1(0x192)])+_0x51eef1(0x27c)+(_0x37adf0[_0x51eef1(0x21a)]||_0x37adf0[_0x51eef1(0x192)])+_0x51eef1(0x1a6)+_0x37adf0['tableName']+'\x27;\x0a'+_0x37e27c+_0x51eef1(0x217)+!!_0x37adf0['viewQuery']+';\x0a\x20\x20this.hasExportQuery\x20=\x20'+!!_0x37adf0['exportQuery']+';\x0a'+(_0x3e1114[_0x51eef1(0x201)](Object[_0x51eef1(0x1e4)](_0x92765f)[_0x51eef1(0x1b6)],0x0)?'\x0a\x20\x20//\x20DateTime\x20fields\x20configuration\x20dari\x20fieldValidation\x0a\x20\x20this.dateTimeFields\x20=\x20'+JSON[_0x51eef1(0x287)](_0x92765f,null,0x4)[_0x51eef1(0x26e)]('\x0a')[_0x51eef1(0x158)](_0x3e1114['bLqhg'])+';\x0a':'')+(_0x37adf0['uploadConfig']&&_0x37adf0[_0x51eef1(0x284)]['fields']?'\x0a\x20\x20//\x20File\x20upload\x20fields\x20(JSON\x20columns)\x0a\x20\x20this.fileFields\x20=\x20'+JSON['stringify'](Object['keys'](_0x37adf0['uploadConfig']['fields']))+';\x0a':'')+'\x0a\x20\x20//\x20Field\x20validation\x20configuration\x0a'+((()=>{const _0x616cf6=_0x51eef1;if(!_0x37adf0[_0x616cf6(0x1ab)]||!Array['isArray'](_0x37adf0[_0x616cf6(0x1ab)])||_0x3e1114[_0x616cf6(0x209)](_0x37adf0[_0x616cf6(0x1ab)]['length'],0x0))return _0x3e1114['LPpmC'];const _0x1a0c52=_0x37adf0[_0x616cf6(0x1ab)]['map'](_0x57deb8=>{const _0x5704a4=_0x616cf6,_0xf2c6ee=JSON['stringify'](_0x57deb8['constraints']||{},null,0x6)[_0x5704a4(0x180)](/\n/g,_0x3e1114[_0x5704a4(0x1e5)]);return'\x20\x20\x20\x20\x20\x20\x27'+_0x57deb8[_0x5704a4(0x163)]+'\x27:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20type:\x20\x27'+_0x57deb8['type']+_0x5704a4(0x15a)+_0xf2c6ee+_0x5704a4(0x172);})[_0x616cf6(0x158)](',\x0a');return'\x20\x20this.validationConfig\x20=\x20{\x0a'+_0x1a0c52+'\x0a\x20\x20\x20\x20}';})())+'\x0a\x0a\x20\x20//\x20Model\x20metadata\x0a\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20endpointName:\x20\x27'+_0x2954e1+'\x27,\x0a\x20\x20\x20\x20moduleName:\x20\x27'+_0x4e2227+'\x27,\x0a\x20\x20\x20\x20tableName:\x20\x27'+_0x37adf0['tableName']+_0x51eef1(0x1f2)+_0x3602a1+'\x27,\x0a\x20\x20\x20\x20fieldCount:\x20'+_0x37adf0['fieldName']['length']+_0x51eef1(0x24e)+_0x492907+_0x51eef1(0x24c)+(_0x37adf0['advancedQueries']?Object[_0x51eef1(0x193)](_0x37adf0[_0x51eef1(0x25c)])['map'](([_0x307caf,_0xd2a4a4])=>'\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(typeof\x20\x22'+_0xd2a4a4+_0x51eef1(0x165)+_0xd2a4a4+_0x51eef1(0x255)+_0xd2a4a4+_0x51eef1(0x214)+_0x307caf+_0x51eef1(0x171)+_0x307caf+'\x20loaded\x20successfully\x20from\x20MySQL\x20file`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`SQL\x20Template\x20file\x20'+_0x307caf+'\x20not\x20found:\x20${filePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20templates[\x22'+_0x307caf+_0x51eef1(0x1ac)+_0x307caf+_0x51eef1(0x1c5)+_0xd2a4a4+'\x22;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`Error\x20loading\x20MySQL\x20template\x20'+_0x307caf+':`,\x20error);\x0a\x20\x20\x20\x20templates[\x22'+_0x307caf+'\x22]\x20=\x20null;\x0a\x20\x20}')[_0x51eef1(0x158)](''):_0x3e1114['vyItO'])+_0x51eef1(0x19d)+_0x37adf0['datatablesQuery']['replace'](/\$\{tableName\}/g,'${this.getTableSource(\x27read\x27)}')+'\x0a\x20\x20`.trim();\x0a\x0a\x20\x20//\x20Convert\x20PostgreSQL\x20syntax\x20to\x20MySQL\x20if\x20needed\x0a\x20\x20baseQuery\x20=\x20this.convertToMysqlSQL(baseQuery);\x0a\x0a\x20\x20return\x20baseQuery;\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20*/\x0agetReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20}\x0a'+(_0x37adf0['viewQuery']?'\x20\x20let\x20baseQuery\x20=\x20`\x0a\x20\x20\x20\x20'+_0x37adf0['viewQuery'][_0x51eef1(0x180)](/\$\{tableName\}/g,'${this.getTableSource(\x27read\x27)}')+'\x0a\x20\x20`.trim();\x0a\x20\x20baseQuery\x20=\x20this.convertToMysqlSQL(baseQuery);\x0a\x20\x20return\x20baseQuery;':_0x51eef1(0x1b4))+_0x51eef1(0x1ed)+(_0x50aa89?'\x0a\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x20untuk\x20read\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20'+_0x50aa89+'\x20AND\x20`\x20+\x20whereClauseSql.replace(/^WHERE\x5cs+/i,\x20\x27\x27);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20'+_0x50aa89+_0x51eef1(0x1d4):'')+'\x0a\x20\x20\x20\x20//\x20Support\x20WHERE\x20conditions\x20dari\x20request\x20body\x0a\x20\x20\x20\x20if\x20(where)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20complexResult\x20=\x20this.buildComplexWhereClause(where,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20complexResult.params;\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\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}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Count\x20total\x20unfiltered\x20records\x0a\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x27\x0a\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20const\x20totalUnfiltered\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20//\x20Count\x20filtered\x20records\x0a\x20\x20\x20\x20let\x20totalRecords\x20=\x20totalUnfiltered;\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20countQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20countResult\x20=\x20await\x20db.executeQuery(countQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20totalRecords\x20=\x20countResult\x20&&\x20countResult[0]\x20?\x20parseInt(countResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20query\x20berdasarkan\x20mode\x20paginasi\x20(subquery\x20wrapping\x20untuk\x20JOIN/CTE)\x0a\x20\x20\x20\x20let\x20query;\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20offset\x20=\x20(page\x20-\x201)\x20*\x20perPage;\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20\x27\x20LIMIT\x20\x27\x20+\x20perPage\x20+\x20\x27\x20OFFSET\x20\x27\x20+\x20offset\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${offset}`;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20\x27\x20LIMIT\x20\x27\x20+\x20limit\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20`\x20LIMIT\x20${limit}`;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(\x27List\x20SQL\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20console.log(\x27List\x20Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20const\x20rawData\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20rawData\x20?\x20rawData.map((row)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20this.formatResponseData(row);\x0a\x20\x20\x20\x20})\x20:\x20[];\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20data\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20result.pagination\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20page\x20<\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20page\x20>\x201\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedList(options,\x20result);\x0a\x20\x20\x20\x20console.log(`[Cache]\x20SET\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getList:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getLookupData\x20untuk\x20MySQL\x20(dynamic\x20search)\x0a\x20*/\x0aasync\x20getLookupData(search)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20query\x20=\x20`SELECT\x20'+_0x3602a1+',\x20'+_0x4ad8b6+'\x20FROM\x20${this.getTableSource(\x27read\x27)}\x20WHERE\x20'+_0x4ad8b6+'\x20LIKE\x20?'+(_0x544b5b?_0x51eef1(0x281)+_0x544b5b:'')+_0x51eef1(0x250)+_0x4ad8b6+'\x20LIMIT\x20100`;\x0a\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x3602a1+_0x51eef1(0x1c2)+_0x4ad8b6+_0x51eef1(0x17f)+(_0x544b5b?_0x51eef1(0x1b0)+_0x544b5b+_0x51eef1(0x261):'')+'\x0a\x20\x20\x20\x20if\x20(search)\x20{\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0x4ad8b6+_0x51eef1(0x18d)+_0x3602a1+',\x20'+_0x4ad8b6+_0x51eef1(0x279)+_0x4ad8b6+'\x20LIMIT\x20100`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params.length\x20>\x200\x20?\x20params\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x3602a1+_0x51eef1(0x1c2)+_0x4ad8b6+'\x0a\x20\x20\x20\x20}));\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20MySQL\x20getLookupDataDynamic:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getStaticLookupData\x20untuk\x20MySQL\x0a\x20*/\x0aasync\x20getStaticLookupData(selectedTag)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20-\x20cache\x20tanpa\x20selectedTag\x20karena\x20data\x20sama\x0a\x20\x20\x20\x20const\x20cacheOptions\x20=\x20{\x20type:\x20\x27static\x27\x20};\x0a\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedLookup(cacheOptions,\x20\x27static\x27);\x0a\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Apply\x20selectedTag\x20to\x20cached\x20result\x0a\x20\x20\x20\x20\x20\x20return\x20cachedResult.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.id\x20===\x20selectedTag)\x20{\x0a\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}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x20id:\x20item.id,\x20text:\x20item.text\x20};\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20query\x20=\x20`SELECT\x20'+_0x3602a1+',\x20'+_0x4ad8b6+'\x20FROM\x20${this.getTableSource(\x27read\x27)}'+(_0x544b5b?'\x20WHERE\x20'+_0x544b5b:'')+_0x51eef1(0x250)+_0x4ad8b6+'\x20LIMIT\x201000`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query);\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x20tanpa\x20selected\x20flag\x0a\x20\x20\x20\x20const\x20cacheData\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x3602a1+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x4ad8b6+_0x51eef1(0x175)+_0x3602a1+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x4ad8b6+_0x51eef1(0x21c)+_0x3602a1+'\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20row.selected\x20=\x20\x27true\x27;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20return\x20row;\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20MySQL\x20getStaticLookupData:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Lookup\x20dengan\x20advanced\x20filter\x20support\x20untuk\x20MySQL\x0a\x20*/\x0aasync\x20getLookupDataWithFilter(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Check\x20cache\x20first\x0a\x20\x20\x20\x20const\x20cacheOptions\x20=\x20{\x20...options,\x20type:\x20\x27filter\x27\x20};\x0a\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedLookup(cacheOptions,\x20\x27filter\x27);\x0a\x20\x20\x20\x20if\x20(cachedResult)\x20return\x20cachedResult;\x0a\x0a\x20\x20\x20\x20const\x20selectColumns\x20=\x20options.select\x20||\x20[\x27'+_0x3602a1+_0x51eef1(0x257)+_0x4ad8b6+_0x51eef1(0x1f9)+_0x3602a1+_0x51eef1(0x1ba)+_0x4ad8b6+_0x51eef1(0x211)+_0x3602a1+'\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20continue;\x20//\x20primary\x20key\x20sudah\x20ada\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20ada\x20SQL\x20expression\x20dengan\x20alias\x20(menggunakan\x20AS)\x0a\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\x20const\x20aliasMatch\x20=\x20column.match(aliasRegex);\x0a\x20\x20\x20\x20\x20\x20if\x20(aliasMatch)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20expression\x20=\x20aliasMatch[1].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20alias\x20=\x20aliasMatch[2].trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${expression}\x20AS\x20${alias}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20textField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20aliasField\x20=\x20alias;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20jika\x20simple\x20field\x20name\x0a\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(column)\x20||\x20validTextFields.includes(column))\x20{\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\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Computed\x20column\x0a\x20\x20\x20\x20\x20\x20selectClause\x20+=\x20`,\x20${column}`;\x0a\x20\x20\x20\x20\x20\x20textField\x20=\x20column;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${selectClause}\x20FROM\x20${this.getTableSource(\x27read\x27)}\x20'+(_0x544b5b?'WHERE\x20'+_0x544b5b+'\x20':'')+_0x51eef1(0x227)+(_0x544b5b?_0x51eef1(0x21d):_0x51eef1(0x245))+_0x51eef1(0x233)+(_0x544b5b?')':'')+_0x51eef1(0x178)+_0x3602a1+_0x51eef1(0x1bb)+_0x4ad8b6+'\x20||\x20\x27\x27\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20the\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20advanced\x20filter\x20conditions\x20untuk\x20MySQL\x0a\x20*\x20@param\x20{Array}\x20filters\x20-\x20Array\x20of\x20{column,\x20type,\x20value,\x20value2}\x0a\x20*\x20@returns\x20{Object}\x20{sql,\x20params}\x0a\x20*/\x0abuildAdvancedFilterCondition(filters)\x20{\x0a\x20\x20if\x20(!filters\x20||\x20!Array.isArray(filters)\x20||\x20filters.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20const\x20params\x20=\x20[];\x0a\x0a\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20const\x20{\x20column,\x20type,\x20value,\x20value2\x20}\x20=\x20filter;\x0a\x0a\x20\x20\x20\x20if\x20(!column\x20||\x20!this.validFields.includes(column))\x20continue;\x0a\x0a\x20\x20\x20\x20switch\x20(type)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<>\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20NOT\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27starts_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27ends_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20BETWEEN\x20?\x20AND\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20inPlaceholders\x20=\x20value.map(()\x20=>\x20\x27?\x27).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IN\x20(${inPlaceholders})`);\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\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20notInPlaceholders\x20=\x20value.map(()\x20=>\x20\x27?\x27).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20NOT\x20IN\x20(${notInPlaceholders})`);\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\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_not_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NOT\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20BETWEEN\x20?\x20AND\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_after\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20>\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_before\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20<\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(conditions.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x20sql:\x20conditions.join(\x27\x20AND\x20\x27),\x20params\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Escape\x20value\x20untuk\x20MySQL\x20SQL\x20(sanitization)\x0a\x20*/\x0aescapeValue(value)\x20{\x0a\x20\x20if\x20(value\x20===\x20null\x20||\x20value\x20===\x20undefined)\x20return\x20null;\x0a\x20\x20if\x20(typeof\x20value\x20===\x20\x27number\x27)\x20return\x20value;\x0a\x20\x20return\x20String(value).replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a}\x0a\x0a/**\x0a\x20*\x20Validasi\x20data\x20sebelum\x20insert/update\x0a\x20*/\x0aasync\x20validateData(data,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20isValid:\x20true,\x0a\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20sanitizedData:\x20{}\x0a\x20\x20};\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20hasFieldValidation\x20=\x20this.validationConfig\x20&&\x20Object.keys(this.validationConfig).length\x20>\x200;\x0a\x0a\x20\x20\x20\x20if\x20(hasFieldValidation)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Loop\x20semua\x20field\x20yang\x20ada\x20di\x20validationConfig\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20value\x20=\x20data[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20value\x20jika\x20autoGenerate\x20dan\x20nilai\x20kosong.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20dan\x20uuid\x20diperlakukan\x20sama:\x20UUID\x20v7\x20via\x20uuid\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20lintas\x20dialect;\x20cocok\x20dengan\x20konvensi\x20payload\x20category.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20yang\x20memakai\x20type:\x20\x22string\x22\x20dengan\x20constraint\x20autoGenerate\x20+\x20primaryKey).\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20constraints.autoGenerate\x20&&\x20(!value\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27uuid\x27\x20||\x20config.type\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\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//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20\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\x20\x20\x20\x20\x20if\x20(constraints.required)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\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//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\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\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\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\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Boolean\x20field:\x20di\x20MySQL\x20disimpan\x20sebagai\x20VARCHAR(5)\x20\x27true\x27/\x27false\x27.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Terima\x20true/\x27true\x27/1/\x271\x27\x20dan\x20false/\x27false\x27/0/\x270\x27,\x20simpan\x20sebagai\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20string\x20\x27true\x27/\x27false\x27\x20agar\x20cocok\x20dengan\x20kolom\x20VARCHAR\x20+\x20CHECK.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20boolVal;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20true\x20||\x20value\x20===\x20\x27true\x27\x20||\x20value\x20===\x201\x20||\x20value\x20===\x20\x271\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boolVal\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(value\x20===\x20false\x20||\x20value\x20===\x20\x27false\x27\x20||\x20value\x20===\x200\x20||\x20value\x20===\x20\x270\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boolVal\x20=\x20false;\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\x20result.errors.push(constraints.typeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20boolVal\x20?\x20\x27true\x27\x20:\x20\x27false\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20field:\x20hash\x20constraint\x20support\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27string\x27\x20&&\x20typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fieldErrors\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Pattern\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`);\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Format\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.format\x20===\x20\x27email\x27\x20&&\x20!/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20email\x20format`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldErrors.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...fieldErrors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isHashField\x20&&\x20fieldErrors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20sanitized;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Non-string\x20field:\x20basic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\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//\x20Validate\x20field\x20yang\x20tidak\x20ada\x20di\x20validationConfig\x20(backward\x20compatibility)\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validationConfig[field]\x20&&\x20data[field]\x20!==\x20undefined\x20&&\x20data[field]\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data[field]\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20data[field].trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\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\x20result.sanitizedData[field]\x20=\x20data[field];\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}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20Tidak\x20ada\x20fieldValidation\x20-\x20gunakan\x20generic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20data[field];\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\x20if\x20(typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20value.trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\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\x20result.sanitizedData[field]\x20=\x20value;\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20result.errors.push(`Validation\x20error:\x20${error.message}`);\x0a\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20}\x0a\x0a\x20\x20return\x20result;\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20field\x20mapping\x20information\x0a\x20*/\x0agetFieldMapping()\x20{\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20allFields:\x20this.validFields,\x0a\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20textFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27name\x27)\x20||\x20f.includes(\x27nama\x27)\x20||\x20f.includes(\x27description\x27)),\x0a\x20\x20\x20\x20dateFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27date\x27)\x20||\x20f.includes(\x27time\x27)),\x0a\x20\x20\x20\x20numericFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27amount\x27)\x20||\x20f.includes(\x27price\x27)\x20||\x20f.includes(\x27count\x27))\x0a\x20\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20MySQL\x20connection\x20info\x20untuk\x20health\x20check\x0a\x20*/\x0aasync\x20getConnectionInfo()\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20db.executeQuery(\x27SELECT\x201\x20as\x20test_con\x27);\x0a\x20\x20\x20\x20if\x20(result\x20&&\x20result.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20connected:\x20true,\x20database:\x20\x27MySQL\x27,\x20retrievedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20null;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20return\x20{\x20connected:\x20false,\x20error:\x20error.message,\x20checkedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20}\x0a}\x0a'+((()=>{const _0x2c4529=_0x51eef1,_0x36127c=_0x37adf0['masterDetail']&&_0x37adf0['masterDetail']['enabled'],_0x5f477e=_0x37adf0[_0x2c4529(0x174)]||{};if(!_0x36127c||!_0x5f477e['createComposite']&&!_0x5f477e['updateComposite']&&!_0x5f477e[_0x2c4529(0x248)])return'';const _0x11e0c9=_0x37adf0[_0x2c4529(0x1f5)]['detailTable'],_0x1ddcad=_0x11e0c9[_0x2c4529(0x26e)]('.')['pop'](),_0x13386c=_0x37adf0['masterDetail']['foreignKey'],_0x929949=_0x37adf0[_0x2c4529(0x1f5)]['detailConfig']?.[_0x2c4529(0x242)]||_0x1ddcad+_0x2c4529(0x22f),_0xec1305=_0x37adf0['masterDetail'][_0x2c4529(0x1ce)]||null,_0x4145e4=_0x37adf0[_0x2c4529(0x1f5)][_0x2c4529(0x19b)]?.['autoCalculateFields']||{},_0x3c8fbc=_0x37adf0['masterDetail'][_0x2c4529(0x19b)]?.['detailQuery']||null,_0x152498=[],_0x29ca82=[];for(const [_0x12524f,_0xd14fb3]of Object['entries'](_0x4145e4)){if(_0xd14fb3['type']===_0x2c4529(0x24b))_0x152498[_0x2c4529(0x247)](_0x12524f);else{const _0x10d70c=(_0xd14fb3['formula']||'')[_0x2c4529(0x26e)]('*')[_0x2c4529(0x283)](_0x496947=>_0x496947['trim']());_0x29ca82[_0x2c4529(0x247)]({'fieldName':_0x12524f,'qtyField':_0x10d70c[0x0],'priceField':_0x10d70c[0x1]});}}const _0x313222=_0x4145e4[_0x2c4529(0x15f)]?.[_0x2c4529(0x232)]||'',_0x390a47=_0x313222['split']('*')['map'](_0x111f08=>_0x111f08[_0x2c4529(0x253)]()),_0x51081e=_0xec1305?.[_0x2c4529(0x177)]?.[_0x2c4529(0x17e)]?.[_0x2c4529(0x180)](_0x3e1114[_0x2c4529(0x270)],'')||'',_0x474d5a=_0x390a47[0x0]||_0x51081e,_0x261eb4=_0x390a47[0x1]||_0x2c4529(0x1fd),_0x338f14=_0x29ca82['map'](_0x59bb54=>{const _0x516eb9=_0x2c4529;return'\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x59bb54[_0x516eb9(0x26d)]+_0x516eb9(0x1c9)+_0x59bb54[_0x516eb9(0x210)]+_0x516eb9(0x27a)+_0x59bb54[_0x516eb9(0x20f)]+'\x0a\x20\x20\x20\x20\x20\x20item.'+_0x59bb54['fieldName']+'\x20=\x20(Number(item.'+_0x59bb54['qtyField']+_0x516eb9(0x24d)+_0x59bb54[_0x516eb9(0x20f)]+_0x516eb9(0x269);})[_0x2c4529(0x158)]('\x0a');let _0x4de896='';_0x5f477e[_0x2c4529(0x207)]&&(_0x4de896+='\x0a/**\x0a\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x20(MySQL)\x0a\x20*/\x0aasync\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20const\x20connection\x20=\x20await\x20db.getConnection();\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20await\x20connection.beginTransaction();\x0a\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x1ddcad+'\x27;\x0a\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeInsert\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_detailItems\x20=\x20data[detailKey]\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeCtx\x20=\x20_CB.buildCompositeInsertBeforeContext(headerData,\x20_detailItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x37adf0[_0x2c4529(0x192)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x11e0c9+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x13386c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeResult\x20=\x20await\x20_ce.executeOnBeforeComposite(\x27insert\x27,\x20_beforeCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onBeforeCompositeInsert\x20failed:\x20\x27\x20+\x20_beforeResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20header\x20INSERT\x0a\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerPlaceholders.push(\x27?\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(created_at,\x20created_by,\x20updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20this._appendCreateAuditColumns(headerFields,\x20headerValues,\x20headerPlaceholders,\x20headerData,\x20eventContext);\x0a\x0a\x20\x20\x20\x20const\x20insertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20(\x27\x20+\x20headerFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20headerPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20console.log(\x27Executing\x20header\x20INSERT:\x27,\x20{\x20query:\x20insertSql,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20await\x20connection.execute(insertSql,\x20headerValues);\x0a\x0a\x20\x20\x20\x20//\x20SELECT\x20back\x20inserted\x20header\x0a\x20\x20\x20\x20const\x20selectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20const\x20[headerRows]\x20=\x20await\x20connection.execute(selectSql,\x20[headerData[this.primaryKey]]);\x0a\x20\x20\x20\x20const\x20insertedHeader\x20=\x20headerRows[0];\x0a\x20\x20\x20\x20const\x20masterPkValue\x20=\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20console.log(\x27Header\x20inserted\x20successfully:\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27=\x27\x20+\x20masterPkValue);\x0a\x0a\x20\x20\x20\x20//\x20Insert\x20detail\x20items\x0a\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x20\x20\x20\x20const\x20detailTableFull\x20=\x20\x27'+_0x11e0c9+'\x27;\x0a\x20\x20\x20\x20const\x20fk\x20=\x20\x27'+_0x13386c+'\x27;\x0a\x20\x20\x20\x20const\x20detailPk\x20=\x20\x27'+_0x929949+'\x27;\x0a\x20\x20\x20\x20'+(_0x152498['length']>0x0?_0x2c4529(0x1c1)+JSON['stringify'](_0x152498)+';':'')+'\x0a\x0a\x20\x20\x20\x20for\x20(const\x20item\x20of\x20data[detailKey]\x20||\x20[])\x20{\x0a\x20\x20\x20\x20\x20\x20item[fk]\x20=\x20masterPkValue;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply.\x0a\x20\x20\x20\x20\x20\x20//\x20MySQL\x20tidak\x20mendukung\x20RETURNING,\x20sehingga\x20generator\x20perlu\x20mengetahui\x0a\x20\x20\x20\x20\x20\x20//\x20nilai\x20PK\x20di\x20muka\x20agar\x20SELECT-back\x20dapat\x20me-retrieve\x20row.\x20Cocok\x20untuk\x0a\x20\x20\x20\x20\x20\x20//\x20kolom\x20VARCHAR\x20DEFAULT\x20(UUID());\x20untuk\x20AUTO_INCREMENT\x20integer,\x20client\x0a\x20\x20\x20\x20\x20\x20//\x20harus\x20mengirim\x20PK\x20atau\x20tidak\x20menggunakan\x20endpoint\x20composite.\x0a\x20\x20\x20\x20\x20\x20if\x20(item[detailPk]\x20===\x20undefined\x20||\x20item[detailPk]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[detailPk]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20}\x0a'+(_0x338f14?_0x3e1114[_0x2c4529(0x16e)]('\x0a',_0x338f14)+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x0a\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'+(_0x3e1114['QFapv'](_0x152498['length'],0x0)?_0x2c4529(0x1b7):'')+'\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\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(\x27?\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//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailInsertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20(\x27\x20+\x20detailFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20detailPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20detail\x20INSERT:\x27,\x20{\x20query:\x20detailInsertSql,\x20values:\x20detailValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(detailInsertSql,\x20detailValues);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20SELECT\x20back\x20inserted\x20detail\x0a\x20\x20\x20\x20\x20\x20const\x20detailSelectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20[detailRows]\x20=\x20await\x20connection.execute(detailSelectSql,\x20[item[detailPk]]);\x0a\x20\x20\x20\x20\x20\x20if\x20(detailRows[0])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailRows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(\x27Inserted\x20\x27\x20+\x20insertedItems.length\x20+\x20\x27\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeInsert\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce2\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB2\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_afterCtx\x20=\x20_CB2.buildCompositeInsertAfterContext(headerData,\x20insertedHeader,\x20insertedItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x37adf0[_0x2c4529(0x192)]+_0x2c4529(0x1fc)+_0x11e0c9+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x13386c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_afterResult\x20=\x20await\x20_ce2.executeOnAfterComposite(\x27insert\x27,\x20_afterCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onAfterCompositeInsert\x20failed:\x20\x27\x20+\x20_afterResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20await\x20connection.commit();\x0a\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20...insertedHeader,\x0a\x20\x20\x20\x20\x20\x20[detailKey]:\x20insertedItems\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.rollback();\x20}\x20catch\x20(rbErr)\x20{\x20console.error(\x27Rollback\x20failed:\x27,\x20rbErr.message);\x20}\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20createComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20try\x20{\x20connection.release();\x20}\x20catch\x20(relErr)\x20{\x20console.error(\x27Connection\x20release\x20failed:\x27,\x20relErr.message);\x20}\x0a\x20\x20}\x0a}\x0a');_0x5f477e[_0x2c4529(0x1e8)]&&(_0x4de896+='\x0a/**\x0a\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(MySQL)\x0a\x20*/\x0aasync\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20const\x20connection\x20=\x20await\x20db.getConnection();\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20await\x20connection.beginTransaction();\x0a\x0a\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Primary\x20key\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20is\x20required\x20for\x20update\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20const\x20checkSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20const\x20[checkRows]\x20=\x20await\x20connection.execute(checkSql,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20if\x20(!checkRows\x20||\x20checkRows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20oldData\x20=\x20checkRows[0];\x0a\x0a\x20\x20\x20\x20//\x20Extract\x20header\x20data\x0a\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x1ddcad+_0x2c4529(0x15e)+_0x37adf0['tableName']+_0x2c4529(0x1fc)+_0x11e0c9+_0x2c4529(0x1ca)+_0x13386c+_0x2c4529(0x27b)+_0x11e0c9+'\x27;\x0a\x20\x20\x20\x20const\x20fk\x20=\x20\x27'+_0x13386c+_0x2c4529(0x1a4)+_0x929949+'\x27;\x0a\x20\x20\x20\x20'+(_0x3e1114['gVvqM'](_0x152498['length'],0x0)?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x152498)+';':'')+_0x2c4529(0x167)+(_0x338f14?'\x0a'+_0x338f14+'\x0a':'')+_0x2c4529(0x196)+(_0x152498['length']>0x0?_0x2c4529(0x1b7):'')+_0x2c4529(0x285)+(_0x338f14?_0x3e1114['PjpQr'](_0x3e1114['uIRiw']('\x0a',_0x338f14),'\x0a'):'')+'\x0a\x20\x20\x20\x20\x20\x20const\x20dFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20dValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20dPlaceholders\x20=\x20[];\x0a\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'+(_0x152498['length']>0x0?'if\x20(generatedFields.includes(key))\x20continue;':'')+'\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\x20dFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dPlaceholders.push(\x27?\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//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20(detail\x20baru\x20dari\x20updateComposite)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20this._appendCreateAuditColumns(dFields,\x20dValues,\x20dPlaceholders,\x20item,\x20eventContext);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20dInsertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20(\x27\x20+\x20dFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20dPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(dInsertSql,\x20dValues);\x0a\x20\x20\x20\x20\x20\x20insertedItems.push(item);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20console.log(\x27Inserted\x20\x27\x20+\x20insertedItems.length\x20+\x20\x27\x20new\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x20Get\x20all\x20current\x20detail\x20items\x0a\x20\x20\x20\x20const\x20allItemsSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20fk\x20+\x20\x27\x20=\x20?\x20ORDER\x20BY\x20line_number\x27;\x0a\x20\x20\x20\x20const\x20[allItems]\x20=\x20await\x20connection.execute(allItemsSql,\x20[primaryKeyValue]);\x0a'+(_0xec1305?_0x2c4529(0x1dc)+JSON['stringify'](_0xec1305)+_0x2c4529(0x1db)+(_0x474d5a?_0x2c4529(0x1e9)+_0x474d5a+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20price\x20=\x20Number(item.'+_0x261eb4+_0x2c4529(0x186):'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured')+'\x0a\x0a\x20\x20\x20\x20if\x20(recalcFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20recalculation\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20this._appendUpdateAuditColumns(recalcFields,\x20recalcValues,\x20data,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20var\x20recalcSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20recalcFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcSql,\x20values:\x20recalcValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(recalcSql,\x20recalcValues);\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20[recalcRows]\x20=\x20await\x20connection.execute(selectSql,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20\x20\x20updatedHeader\x20=\x20recalcRows[0];\x0a\x20\x20\x20\x20}\x0a':'')+_0x2c4529(0x218)+_0x37adf0['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x11e0c9+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x13386c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_afterResult\x20=\x20await\x20_ce2.executeOnAfterComposite(\x27update\x27,\x20_afterCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onAfterCompositeUpdate\x20failed:\x20\x27\x20+\x20_afterResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20await\x20connection.commit();\x0a\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20...updatedHeader,\x0a\x20\x20\x20\x20\x20\x20[detailKey]:\x20allItems,\x0a\x20\x20\x20\x20\x20\x20_operations:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems.length\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.rollback();\x20}\x20catch\x20(rbErr)\x20{\x20console.error(\x27Rollback\x20failed:\x27,\x20rbErr.message);\x20}\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20updateComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20try\x20{\x20connection.release();\x20}\x20catch\x20(relErr)\x20{\x20console.error(\x27Connection\x20release\x20failed:\x27,\x20relErr.message);\x20}\x0a\x20\x20}\x0a}\x0a');if(_0x5f477e[_0x2c4529(0x248)]){let _0x51a40e;_0x3c8fbc?_0x51a40e='const\x20detailSql\x20=\x20`'+_0x3c8fbc[_0x2c4529(0x180)](/\$1/g,'?')+'`;':_0x51a40e='const\x20detailSql\x20=\x20\x27SELECT\x20*\x20FROM\x20'+_0x11e0c9+'\x20WHERE\x20'+_0x13386c+_0x2c4529(0x208),_0x4de896+='\x0a/**\x0a\x20*\x20Composite\x20read\x20-\x20Read\x20header\x20with\x20detail\x20items\x20(MySQL)\x0a\x20*/\x0aasync\x20readComposite(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(!options.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\x20let\x20whereClauseResult;\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseResult\x20=\x20this.buildComplexWhereClause(options.where);\x0a\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20const\x20{\x20sql:\x20whereClause,\x20params\x20}\x20=\x20whereClauseResult;\x0a\x20\x20\x20\x20const\x20headerSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20const\x20headerResults\x20=\x20await\x20db.executeQuery(headerSql,\x20params);\x0a\x0a\x20\x20\x20\x20if\x20(!headerResults\x20||\x20headerResults.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20success:\x20true,\x20count:\x200,\x20data:\x20[]\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20compositeResults\x20=\x20[];\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x1ddcad+'\x27;\x0a\x20\x20\x20\x20'+_0x51a40e+_0x2c4529(0x23e);}return _0x4de896;})())+'\x0a}\x0a\x0amodule.exports\x20=\x20new\x20'+_0x28771d+_0x51eef1(0x197);}function createMysqlSubmoduleTemplate(_0x18b3ee,_0x306cb1,_0x4be572){const _0x506c7f=a0_0x2fb5,_0x4f6dbc={'QJiOu':function(_0x2e301a,_0x4cecfd){return _0x2e301a(_0x4cecfd);},'ojPvZ':_0x506c7f(0x256),'lTwnj':'null','PRPDt':_0x506c7f(0x22b),'irPUL':_0x506c7f(0x246),'dVvzd':function(_0x3056ce,_0x43a3a7){return _0x3056ce(_0x43a3a7);},'HEaWp':_0x506c7f(0x17a),'oSTrI':'items.','VrRkv':function(_0x2ba7c4,_0x4311cd){return _0x2ba7c4!==_0x4311cd;}},_0x32c435=_0x4f6dbc['QJiOu'](toCamelCase,_0x306cb1)+_0x4f6dbc['ojPvZ'],_0x5ee457=_0x4be572[_0x506c7f(0x242)]||'id',_0x4048be=new Date()[_0x506c7f(0x1a0)](),_0x574deb=Object['entries'](_0x4be572['action']||{})['filter'](([,_0x5b6e66])=>_0x5b6e66)[_0x506c7f(0x283)](([_0x2dd633])=>_0x2dd633),_0x2039f6=_0x4be572[_0x506c7f(0x272)]&&Array['isArray'](_0x4be572['components'])&&_0x4be572['components'][_0x506c7f(0x1b6)]>0x0,_0x14c2af=_0x4be572['exportQuery']||'SELECT\x20'+_0x4be572[_0x506c7f(0x26d)]['join'](',\x20')+'\x20FROM\x20'+_0x4be572[_0x506c7f(0x192)],_0x1deac3=_0x14c2af['replace'](/\\/g,'\x5c\x5c')['replace'](/'/g,'\x5c\x27'),_0x697281=JSON['stringify'](_0x4be572[_0x506c7f(0x26d)]),_0x48ceb9=_0x4be572['columnFormats']?JSON[_0x506c7f(0x287)](_0x4be572['columnFormats']):_0x506c7f(0x1d0),_0x539ae3=_0x4be572['fieldLabels']?JSON[_0x506c7f(0x287)](_0x4be572[_0x506c7f(0x1ef)]):_0x4f6dbc[_0x506c7f(0x154)],_0x130f3a=(_0x4be572[_0x506c7f(0x205)]||[])[_0x506c7f(0x176)](_0x319081=>_0x319081&&typeof _0x319081['name']==='string'&&Array['isArray'](_0x319081['fields'])&&_0x319081['fields'][_0x506c7f(0x1b6)]>0x0)['map'](_0x2dc195=>[_0x2dc195[_0x506c7f(0x163)][_0x506c7f(0x20a)](),_0x2dc195['fields']]),_0x5035d5=JSON['stringify'](Object['fromEntries'](_0x130f3a)),_0x549a95=_0x4be572[_0x506c7f(0x174)]&&_0x4be572[_0x506c7f(0x174)][_0x506c7f(0x26f)]?{'enabled':!![],'upsertKeys':(_0x4be572['importConfig']||{})['upsertKeys']||[_0x5ee457],'upsertStrategy':(_0x4be572['importConfig']||{})[_0x506c7f(0x1a9)]||_0x4f6dbc['PRPDt'],'requiredFields':(_0x4be572['importConfig']||{})['requiredFields']||[],'validations':(_0x4be572[_0x506c7f(0x27d)]||{})['validations']||{},'lookupFields':(_0x4be572['importConfig']||{})[_0x506c7f(0x20b)]||{},'excludeFromImport':(_0x4be572['importConfig']||{})[_0x506c7f(0x1ad)]||[],'chunkSize':(_0x4be572['importConfig']||{})['chunkSize']||0x64}:null,_0x5b4613=_0x549a95?JSON[_0x506c7f(0x287)](_0x549a95):_0x506c7f(0x1d0),_0x14a408=_0x4be572[_0x506c7f(0x174)]&&_0x4be572['action']['export']?'\x27'+_0x1deac3+'\x27':_0x4f6dbc['lTwnj'],_0x327e2c=_0x4be572['action']&&_0x4be572[_0x506c7f(0x174)]['adjust']?_0x4be572[_0x506c7f(0x198)]||{}:null,_0x5c0b76=_0x327e2c?JSON['stringify'](_0x327e2c):'null',_0x220f84=_0x4be572['fieldPolicy']?',\x20'+JSON['stringify'](_0x4be572[_0x506c7f(0x27e)]):'';let _0x3f0b45=_0x4f6dbc['irPUL'];_0x2039f6&&(_0x3f0b45+=_0x506c7f(0x1de),_0x3f0b45+=_0x506c7f(0x206));const _0x6c5f21=_0x4be572[_0x506c7f(0x243)]?'\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'+_0x32c435+'.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'+_0x306cb1+_0x506c7f(0x273):'',_0x350e15=_0x4be572[_0x506c7f(0x243)]?_0x506c7f(0x182)+_0x306cb1+_0x506c7f(0x1fa):'',_0x57ecf9=_0x4be572[_0x506c7f(0x243)]?_0x506c7f(0x194)+_0x32c435+_0x506c7f(0x1a7)+_0x5ee457+'\x27,\x20value:\x20data.'+_0x5ee457+_0x506c7f(0x237):'';let _0x89a934='const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x32c435+'\x20=\x20require(\x27../../models/'+_0x18b3ee+'/'+_0x306cb1+_0x506c7f(0x25a)+_0x5035d5+';\x0a\x0a//\x20Ekstrak\x20nama\x20constraint\x20dari\x20error\x20MySQL\x20(\x22...\x20for\x20key\x20\x27<tbl>.<idx>\x27\x22),\x20normalisasi\x0a//\x20lowercase\x20tanpa\x20prefix\x20tabel\x20(MySQL\x208.0.19+\x20menambahkan\x20qualifier\x20<table>.).\x0afunction\x20extractConstraintName(error)\x20{\x0a\x20\x20if\x20(!error)\x20return\x20null;\x0a\x20\x20const\x20src\x20=\x20error.sqlMessage\x20||\x20error.message\x20||\x20\x27\x27;\x0a\x20\x20const\x20m\x20=\x20src.match(/for\x20key\x20\x27([^\x27]+)\x27/);\x0a\x20\x20if\x20(!m)\x20return\x20null;\x0a\x20\x20return\x20m[1].split(\x27.\x27).pop().toLowerCase();\x0a}\x0a\x0a//\x20Mengembalikan\x20map\x20{\x20field:\x20[pesan]\x20}\x20atau\x20null\x20(call-site\x20meng-omit\x20`details`).\x0afunction\x20buildDuplicateDetails(error,\x20lookup)\x20{\x0a\x20\x20const\x20name\x20=\x20extractConstraintName(error);\x0a\x20\x20if\x20(!name)\x20return\x20null;\x0a\x20\x20const\x20fields\x20=\x20lookup[name];\x0a\x20\x20if\x20(!Array.isArray(fields)\x20||\x20fields.length\x20===\x200)\x20return\x20null;\x0a\x20\x20const\x20msg\x20=\x20fields.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\x20f\x20of\x20fields)\x20details[f]\x20=\x20[msg];\x0a\x20\x20return\x20details;\x0a}\x0a'+_0x3f0b45+_0x506c7f(0x25b)+_0x4f6dbc['dVvzd'](toPascalCase,_0x306cb1)+'\x20Submodule\x20-\x20MySQL\x20Database\x0a*\x20Generated:\x20'+_0x4048be+_0x506c7f(0x1cf)+_0x306cb1+'\x0a*\x20Actions:\x20'+_0x574deb[_0x506c7f(0x158)](',\x20')+_0x506c7f(0x1d8)+_0x4be572['tableName']+'\x0a*\x20Database:\x20MySQL\x0a*/\x0a\x0a//\x20Primary\x20key\x20untuk\x20endpoint\x20ini\x0aconst\x20primaryKey\x20=\x20\x27'+_0x5ee457+_0x506c7f(0x170)+_0x4be572['tableName']+'\x27,\x0a\x20\x20fieldName:\x20'+_0x697281+',\x0a\x20\x20exportQuery:\x20'+_0x14a408+',\x0a\x20\x20columnFormats:\x20'+_0x48ceb9+',\x0a\x20\x20fieldLabels:\x20'+_0x539ae3+_0x506c7f(0x213)+_0x5b4613+_0x506c7f(0x1c8)+_0x5c0b76+',\x0a\x20\x20uploadConfig:\x20'+(_0x4be572['uploadConfig']?JSON[_0x506c7f(0x287)](_0x4be572['uploadConfig']):'null')+_0x506c7f(0x1f7)+(_0x4be572[_0x506c7f(0x243)]?JSON[_0x506c7f(0x287)](_0x4be572['requestScope']):'null')+'\x0a};\x0a'+(_0x2039f6?'\x0a//\x20Initialize\x20component\x20engine\x20dengan\x20event\x20handlers\x20dari\x20payload\x0aconst\x20_componentPayload\x20=\x20{\x20components:\x20'+JSON[_0x506c7f(0x287)](_0x4be572[_0x506c7f(0x272)])+_0x506c7f(0x22d)+_0x18b3ee+'/'+_0x306cb1+':\x20${result.componentsLoaded}\x20components`);\x0a\x20\x20}\x0a}).catch(err\x20=>\x20{\x0a\x20\x20console.error(`Failed\x20to\x20load\x20component\x20configuration\x20for\x20'+_0x18b3ee+'/'+_0x306cb1+':`,\x20err.message);\x0a});\x0a':'')+'\x0a//\x20CORS\x20ditangani\x20di\x20level\x20app\x20oleh\x20cors\x20middleware\x20(lihat\x20konfigurasi\x20CORS_ENABLED\x20dan\x20CORS_ORIGINS\x20di\x20.env)\x0a\x0a//\x20Request\x20ID\x20untuk\x20tracing\x20—\x20support\x20correlation\x20ID\x20dari\x20upstream\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20req.mysqlRequestId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20`mysql_${Date.now()}_${Math.random().toString(36).substr(2,\x209)}`;\x0a\x20\x20res.setHeader(\x27X-Correlation-ID\x27,\x20req.mysqlRequestId);\x0a\x20\x20res.setHeader(\x27X-MySQL-Request-ID\x27,\x20req.mysqlRequestId);\x0a\x20\x20next();\x0a});\x0a\x0a\x0a\x0a//\x20Middleware\x20untuk\x20validasi\x20payload\x20MySQL\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20===\x20\x27POST\x27)\x20{\x0a\x20\x20\x20\x20//\x20Skip\x20validation\x20untuk\x20endpoint\x20export/import\x20(ditangani\x20oleh\x20centralized\x20handler)\x0a\x20\x20\x20\x20if\x20(req.path.startsWith(\x27/import\x27)\x20||\x20req.path.startsWith(\x27/export\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20next();\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20try\x20{\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});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27first\x27)\x20{\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\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\x22'+_0x5ee457+'\x22,\x20\x22value\x22:\x20\x22your-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\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20MySQL\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\x20format\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\x0a';_0x89a934+=buildRequestScopeMiddleware(_0x4be572,_0x306cb1);_0x4be572['action']&&_0x4be572[_0x506c7f(0x174)][_0x506c7f(0x258)]&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+_0x506c7f(0x282)+_0x32c435+'.getDatatables(options);\x0a\x0a\x20\x20\x20\x20//\x20Menambahkan\x20nomor\x20baris\x20untuk\x20DataTables\x0a\x20\x20\x20\x20if\x20(result.data\x20&&\x20Array.isArray(result.data))\x20{\x0a\x20\x20\x20\x20\x20\x20result.data\x20=\x20result.data.map((item,\x20index)\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20...item,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rownumerator:\x20options.start\x20+\x20index\x20+\x201\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'+_0x306cb1+_0x506c7f(0x259)+_0x306cb1+_0x506c7f(0x267));_0x4be572['action']&&_0x4be572['action']['lookup']&&(_0x89a934+='//\x20GET\x20/api/'+_0x18b3ee+'/'+_0x306cb1+_0x506c7f(0x1fb)+_0x32c435+'.validFields.includes(key)\x20&&\x20value)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20extraFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20const\x20list\x20=\x20Object.keys(extraFilters).length\x20>\x200\x20?\x0a\x20\x20\x20\x20\x20\x20await\x20'+_0x32c435+'.getLookupDataDynamic(search,\x20extraFilters)\x20:\x0a\x20\x20\x20\x20\x20\x20await\x20'+_0x32c435+'.getLookupData(search);\x0a\x20\x20\x20\x20const\x20lookupTime\x20=\x20Date.now()\x20-\x20startTime;\x0a\x0a\x20\x20\x20\x20console.log(`[MySQL-LKP]\x20${mysqlRequestId}\x20found\x20${list.length}\x20results\x20in\x20${lookupTime}ms`);\x0a\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\x20_mysql:\x20{\x20requestId:\x20mysqlRequestId,\x20queryTime:\x20lookupTime,\x20timestamp:\x20new\x20Date().toISOString()\x20}\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`[MySQL-LKP]\x20Error\x20${mysqlRequestId}:`,\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'+_0x306cb1+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x4be572['action']&&_0x4be572['action'][_0x506c7f(0x162)]&&(_0x89a934+=_0x506c7f(0x238)+_0x18b3ee+'/'+_0x306cb1+'/lookup\x20-\x20MySQL\x20Static\x20Lookup\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20const\x20mysqlRequestId\x20=\x20req.mysqlRequestId;\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\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\x20lookup\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\x20console.log(`[MySQL-LKP]\x20${mysqlRequestId}\x20static\x20lookup:`,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20let\x20list;\x0a\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20New\x20format\x20dengan\x20where\x20clause\x20+\x20optional\x20select\x20dan\x20order\x0a\x20\x20\x20\x20\x20\x20list\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x169)+_0x32c435+'.getStaticLookupData(selectedTag);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20lookupTime\x20=\x20Date.now()\x20-\x20startTime;\x0a\x20\x20\x20\x20console.log(`[MySQL-LKP]\x20${mysqlRequestId}\x20found\x20${list.length}\x20results\x20in\x20${lookupTime}ms`);\x0a\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\x20_mysql:\x20{\x20requestId:\x20mysqlRequestId,\x20queryTime:\x20lookupTime,\x20timestamp:\x20new\x20Date().toISOString()\x20}\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`[MySQL-LKP]\x20Error\x20${mysqlRequestId}:`,\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'+_0x306cb1+_0x506c7f(0x216));_0x4be572[_0x506c7f(0x174)]&&_0x4be572[_0x506c7f(0x174)]['create']&&(_0x89a934+=_0x506c7f(0x238)+_0x18b3ee+'/'+_0x306cb1+_0x506c7f(0x1c6)+_0x32c435+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x22a)+(_0x2039f6?'\x0a\x20\x20\x20\x20//\x20Component\x20engine:\x20build\x20eventContext\x20untuk\x20model-level\x20event\x20lifecycle\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'+_0x4be572[_0x506c7f(0x192)]+_0x506c7f(0x1d5)+_0x32c435+_0x506c7f(0x1dd)+_0x32c435+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\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':_0x506c7f(0x184)+_0x32c435+_0x506c7f(0x224))+_0x506c7f(0x1b3)+_0x306cb1+_0x506c7f(0x23c)+_0x5ee457+_0x506c7f(0x1ea)+_0x306cb1+'\x20data\x20successfully\x20added\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menambahkan\x20data\x20'+_0x306cb1+_0x506c7f(0x190)+_0x306cb1+'\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');_0x4be572[_0x506c7f(0x174)]&&_0x4be572[_0x506c7f(0x174)]['update']&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+'/update\x20-\x20MySQL\x20Update\x0arouter.post(\x27/update\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'+_0x5ee457+'\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\x20update`,\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'+_0x6c5f21+_0x506c7f(0x1f6)+_0x32c435+_0x506c7f(0x219)+_0x32c435+_0x506c7f(0x18a)+(_0x2039f6?_0x506c7f(0x1bd)+_0x4be572['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\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\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x32c435+'.updateData(req.body,\x20eventContext'+_0x220f84+_0x506c7f(0x235):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20mode\x20tanpa\x20events\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x32c435+'.updateData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20}'+_0x220f84+_0x506c7f(0x1d2))+_0x506c7f(0x1d6)+_0x306cb1+'\x20data\x20updated\x20successfully:\x20'+_0x5ee457+_0x506c7f(0x26b)+_0x5ee457+_0x506c7f(0x1cc)+_0x306cb1+_0x506c7f(0x260)+_0x306cb1+':\x27,\x20error);\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'+_0x306cb1+'\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\x27ER_DUP_ENTRY\x27\x20||\x20error.errno\x20===\x201062)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\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'+_0x306cb1+_0x506c7f(0x267));_0x4be572[_0x506c7f(0x174)]&&_0x4be572[_0x506c7f(0x174)][_0x506c7f(0x1fe)]&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+'/adjust\x20-\x20MySQL\x20Adjust\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'+_0x5ee457+_0x506c7f(0x1f0)+_0x6c5f21+_0x506c7f(0x274)+(_0x2039f6?'\x0a\x20\x20\x20\x20//\x20Integrated\x20transaction\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4be572[_0x506c7f(0x192)]+_0x506c7f(0x1ec)+_0x32c435+'.adjustData(req.body,\x20adjustConfig,\x20eventContext'+_0x220f84+_0x506c7f(0x19e):_0x506c7f(0x1d9)+_0x32c435+_0x506c7f(0x1e7)+_0x220f84+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+_0x506c7f(0x223)+_0x306cb1+'\x20data\x20adjusted\x20successfully:\x20'+_0x5ee457+'=${req.body[\x27'+_0x5ee457+_0x506c7f(0x1cc)+_0x306cb1+_0x506c7f(0x166)+_0x306cb1+_0x506c7f(0x18e)+_0x306cb1+_0x506c7f(0x183)+_0x306cb1+'\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');if(_0x4be572['action']&&_0x4be572['action'][_0x506c7f(0x1b2)]){const _0x35c115=_0x4be572['workflow']?JSON[_0x506c7f(0x287)](_0x4be572[_0x506c7f(0x1b2)]):'{}';_0x89a934+=_0x506c7f(0x238)+_0x18b3ee+'/'+_0x306cb1+'/change-status\x20-\x20MySQL\x20Change\x20status\x20'+_0x306cb1+'\x0arouter.post(\x27/change-status\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\x20const\x20primaryKey\x20=\x20\x27'+_0x5ee457+'\x27;\x0a\x20\x20\x20\x20const\x20recordId\x20=\x20req.body[primaryKey]\x20||\x20req.body.id;\x0a\x20\x20\x20\x20if\x20(!recordId)\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})\x20or\x20id\x20is\x20required\x20for\x20change-status`,\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.status)\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\x27status\x20is\x20required\x20for\x20change-status\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'+_0x6c5f21[_0x506c7f(0x180)](/req\.body\[primaryKey\]/g,_0x4f6dbc['HEaWp'])+'\x0a\x20\x20\x20\x20const\x20workflowConfig\x20=\x20'+_0x35c115+_0x506c7f(0x1a5)+_0x18b3ee+_0x506c7f(0x16f)+(_0x2039f6?'\x0a\x20\x20\x20\x20//\x20Integrated\x20transaction\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4be572[_0x506c7f(0x192)]+_0x506c7f(0x203)+_0x32c435+_0x506c7f(0x1a2):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x20(tetap\x20forward\x20authHeader\x20untuk\x20hook\x20JWT\x20forwarding)\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\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\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x1b5))+_0x506c7f(0x22e)+_0x306cb1+'\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'+_0x306cb1+':\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'+_0x306cb1+_0x506c7f(0x1eb);}if(_0x4be572['action']&&_0x4be572['action'][_0x506c7f(0x23a)]){const _0x932b0d=_0x4be572[_0x506c7f(0x277)]?JSON[_0x506c7f(0x287)](_0x4be572[_0x506c7f(0x277)]):'{}';_0x89a934+=_0x506c7f(0x238)+_0x18b3ee+'/'+_0x306cb1+'/aggregate\x20-\x20MySQL\x20Aggregate\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'+_0x932b0d+_0x506c7f(0x159)+_0x32c435+'.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'+_0x306cb1+_0x506c7f(0x254)+_0x306cb1+_0x506c7f(0x267);}_0x4be572[_0x506c7f(0x174)]&&_0x4be572[_0x506c7f(0x174)]['delete']&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+_0x506c7f(0x215)+_0x32c435+'.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'+_0x306cb1+_0x506c7f(0x27f)+(_0x2039f6?_0x506c7f(0x1bd)+_0x4be572['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\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\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x32c435+'.deleteData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Fallback:\x20mode\x20tanpa\x20events\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x262))+_0x506c7f(0x1d6)+_0x306cb1+'\x20data\x20deleted\x20successfully`);\x0a\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'+_0x306cb1+_0x506c7f(0x17c)+_0x306cb1+'\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');_0x4be572['action']&&_0x4be572['action']['first']&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+'/first\x20-\x20Mendapatkan\x20data\x20berdasarkan\x20kriteria\x0arouter.post(\x27/first\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20→\x20object\x20(backward\x20compatible)\x0a\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x20—\x20harus\x20object\x20tunggal\x20{key,\x20value}\x0a\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\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\x20as\x20{key,\x20value}\x20object\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'+_0x5ee457+'\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'+_0x5ee457+_0x506c7f(0x20d)+JSON['stringify'](_0x4be572['fieldName'])+_0x506c7f(0x239)+_0x32c435+_0x506c7f(0x1e1)+_0x350e15+'\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'+_0x306cb1+':\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'+_0x306cb1+'\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');_0x4be572['action']&&_0x4be572[_0x506c7f(0x174)][_0x506c7f(0x264)]&&(_0x89a934+=_0x506c7f(0x238)+_0x18b3ee+'/'+_0x306cb1+'/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//\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?\x20Math.min(parseInt(req.body.per_page\x20||\x2010,\x2010),\x20100)\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\x27all\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//\x20Validasi\x20parameter\x20paginasi\x20(hanya\x20jika\x20mode\x20paginasi)\x0a\x20\x20\x20\x20if\x20(paginate\x20&&\x20page\x20<\x201)\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\x20page\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Page\x20must\x20be\x20greater\x20than\x200\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//\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[_0x506c7f(0x287)](_0x4be572[_0x506c7f(0x26d)]||[])+';\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\x27Invalid\x20field(s):\x20\x27\x20+\x20invalidFields.join(\x27,\x20\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\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\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue,\x0a\x20\x20\x20\x20\x20\x20searchBy,\x0a\x20\x20\x20\x20\x20\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}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20options.limit\x20=\x20limit;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x32c435+'.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\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data,\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:\x20result.pagination,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Data\x20retrieved\x20successfully\x27\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,\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x306cb1+'\x20list:\x27,\x20error);\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'+_0x306cb1+'\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');if(_0x4be572['masterDetail']&&_0x4be572[_0x506c7f(0x1f5)][_0x506c7f(0x1cd)]){const _0x77d8fc=_0x4be572['masterDetail']['detailTable'][_0x506c7f(0x26e)]('.')['pop'](),_0x1dcb71=_0x306cb1[_0x506c7f(0x180)](/-/g,'_'),_0x3220dd=_0x4be572['masterDetail'][_0x506c7f(0x1ce)]||null,_0x2df1d1=_0x4be572[_0x506c7f(0x1f5)]?.['detailConfig']?.['autoCalculateFields']?.[_0x506c7f(0x15f)]?.[_0x506c7f(0x232)]||'',_0x37cd35=_0x2df1d1['split']('*')[_0x506c7f(0x283)](_0x57fe90=>_0x57fe90['trim']()),_0x1fa33c=_0x3220dd?.['total_qty']?.['source']?.[_0x506c7f(0x180)](_0x4f6dbc['oSTrI'],'')||'',_0x384099=_0x37cd35[0x0]||_0x1fa33c,_0x267920=_0x37cd35[0x1]||_0x506c7f(0x1fd);if(_0x4be572['action']&&_0x4be572['action'][_0x506c7f(0x207)]){const _0x438dd2=_0x3220dd?_0x506c7f(0x222)+JSON[_0x506c7f(0x287)](_0x3220dd)+_0x506c7f(0x263)+_0x77d8fc+'.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\x20var\x20qtyField\x20=\x20headerCalc.total_qty.source.replace(\x27items.\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20data.total_qty\x20=\x20data.'+_0x77d8fc+_0x506c7f(0x18c)+(_0x384099?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20data.total_amount\x20=\x20data.'+_0x77d8fc+'.reduce(function(sum,\x20item)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20qty\x20=\x20Number(item.'+_0x384099+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20price\x20=\x20Number(item.'+_0x267920+')\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}':_0x506c7f(0x251))+_0x506c7f(0x202):'';_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+_0x506c7f(0x1f1)+_0x306cb1+_0x506c7f(0x228)+_0x1dcb71+')\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\x20must\x20have\x20property\x20\x22'+_0x1dcb71+'\x22\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\x20var\x20data\x20=\x20req.body.'+_0x1dcb71+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x32c435+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20headerDataForValidation\x20=\x20Object.assign({},\x20data);\x0a\x20\x20\x20\x20\x20\x20delete\x20headerDataForValidation.'+_0x77d8fc+';\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20validation\x20=\x20await\x20'+_0x32c435+'.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\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!data.'+_0x77d8fc+_0x506c7f(0x1c4)+_0x77d8fc+')\x20||\x20data.'+_0x77d8fc+'.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'+_0x77d8fc+_0x506c7f(0x1af)+_0x438dd2+_0x506c7f(0x179)+_0x4be572['tableName']+_0x506c7f(0x23f)+_0x4be572['masterDetail']['detailTable']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x4be572[_0x506c7f(0x1f5)]['foreignKey']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\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\x20var\x20result\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x1f8)+_0x306cb1+_0x506c7f(0x19f)+_0x306cb1+'\x20data\x20successfully\x20created\x20(with\x20detail\x20items)\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20create\x20'+_0x306cb1+_0x506c7f(0x25e)+_0x306cb1+_0x506c7f(0x267);}_0x4be572['action']&&_0x4be572['action'][_0x506c7f(0x1e8)]&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+'/update-composite\x20-\x20MySQL\x20Composite\x20update\x20(master-detail)\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'+_0x306cb1+_0x506c7f(0x236)+_0x1dcb71+')\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\x20must\x20have\x20property\x20\x22'+_0x1dcb71+_0x506c7f(0x16d)+_0x1dcb71+_0x506c7f(0x16b)+_0x5ee457+_0x506c7f(0x1d3)+_0x5ee457+')\x20is\x20required\x20for\x20update\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'+_0x57ecf9+'\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x32c435+_0x506c7f(0x1be)+_0x77d8fc+_0x506c7f(0x1e2)+_0x32c435+_0x506c7f(0x234)+_0x77d8fc+')\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data.'+_0x77d8fc+_0x506c7f(0x278)+_0x77d8fc+'))\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'+_0x77d8fc+_0x506c7f(0x1da)+_0x4be572[_0x506c7f(0x192)]+_0x506c7f(0x23f)+_0x4be572[_0x506c7f(0x1f5)]['detailTable']+_0x506c7f(0x24a)+_0x4be572[_0x506c7f(0x1f5)]['foreignKey']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\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\x20var\x20result\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x221)+_0x306cb1+_0x506c7f(0x185)+_0x5ee457+_0x506c7f(0x189)+_0x5ee457+_0x506c7f(0x268)+_0x306cb1+'\x20data\x20successfully\x20updated\x20(with\x20detail\x20items)\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20update\x20'+_0x306cb1+_0x506c7f(0x20e)+_0x306cb1+'\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\x20\x20\x20\x20if\x20(error.errno\x20===\x201062)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\x20return\x20res.status(409).json({\x20success:\x20false,\x20error:\x20\x27Duplicate\x20entry\x27,\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x20timestamp:\x20new\x20Date().toISOString()\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.errno\x20===\x201452)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x20success:\x20false,\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x20timestamp:\x20new\x20Date().toISOString()\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'+_0x306cb1+'\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'),_0x4be572['action']&&_0x4be572['action']['readComposite']&&(_0x89a934+='//\x20POST\x20/api/'+_0x18b3ee+'/'+_0x306cb1+'/read-composite\x20-\x20MySQL\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'+_0x306cb1+'/read-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\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({\x20success:\x20false,\x20error:\x20\x27Invalid\x20payload\x27,\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x20timestamp:\x20new\x20Date().toISOString()\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\x27Property\x20where\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\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{\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22'+_0x5ee457+_0x506c7f(0x25d)+_0x32c435+'.readComposite(req.body);\x0a\x0a\x20\x20\x20\x20console.log(\x27'+_0x306cb1+_0x506c7f(0x195)+_0x306cb1+_0x506c7f(0x21f)+_0x306cb1+'\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');}if(_0x4be572[_0x506c7f(0x174)]?.['info']!==![]){const _0x4f8535={'datatables':!!_0x4be572[_0x506c7f(0x174)]?.[_0x506c7f(0x258)],'read':!!_0x4be572['action']?.[_0x506c7f(0x264)],'first':!!_0x4be572['action']?.['first'],'create':!!_0x4be572['action']?.['create'],'update':!!_0x4be572[_0x506c7f(0x174)]?.['update'],'delete':!!_0x4be572[_0x506c7f(0x174)]?.['delete'],'lookup':!!_0x4be572[_0x506c7f(0x174)]?.['lookup'],'export':!!_0x4be572[_0x506c7f(0x174)]?.[_0x506c7f(0x1d1)],'import':!!_0x4be572['action']?.[_0x506c7f(0x26f)],'info':_0x4f6dbc['VrRkv'](_0x4be572['action']?.['info'],![])};_0x89a934+='//\x20MySQL\x20endpoint\x20information\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[_0x506c7f(0x287)](_0x4f8535)+_0x506c7f(0x18f)+_0x32c435+_0x506c7f(0x1df)+_0x306cb1+_0x506c7f(0x1e0)+_0x18b3ee+_0x506c7f(0x225)+_0x4048be+'\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(\x27MySQL\x20info\x20error:\x27,\x20error);\x0a\x20\x20\x20\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Info\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20endpoint\x20info\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});';}else _0x89a934+='//\x20Endpoint\x20/info\x20dinonaktifkan\x20via\x20action.info\x20=\x20false\x0a';return _0x89a934+='\x0a//\x20MySQL\x20health\x20check\x0arouter.get(\x27/health\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20connectionInfo\x20=\x20await\x20'+_0x32c435+_0x506c7f(0x19c)+_0x306cb1+'\x27,\x0a\x20\x20\x20\x20\x20\x20database:\x20\x27mysql\x27,\x0a\x20\x20\x20\x20\x20\x20connection:\x20connectionInfo\x20?\x20\x27active\x27\x20:\x20\x27unknown\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\x20res.status(503).json({\x0a\x20\x20\x20\x20\x20\x20status:\x20\x27unhealthy\x27,\x0a\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x306cb1+'\x27,\x0a\x20\x20\x20\x20\x20\x20database:\x20\x27mysql\x27,\x0a\x20\x20\x20\x20\x20\x20error:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a',_0x89a934+='module.exports\x20=\x20router;',_0x89a934;}module[a0_0x5b4501(0x15b)]={'createMysqlMainModuleTemplate':createMysqlMainModuleTemplate,'createMysqlModelTemplate':createMysqlModelTemplate,'createMysqlSubmoduleTemplate':createMysqlSubmoduleTemplate};
1
+ const a0_0x4199b5=a0_0x3092;(function(_0x12a35f,_0x19ebe3){const _0x214f38=a0_0x3092,_0x1fac26=_0x12a35f();while(!![]){try{const _0x5b8fdb=parseInt(_0x214f38(0x14b))/0x1+parseInt(_0x214f38(0x219))/0x2*(parseInt(_0x214f38(0x131))/0x3)+-parseInt(_0x214f38(0x18b))/0x4*(parseInt(_0x214f38(0x149))/0x5)+parseInt(_0x214f38(0x1d4))/0x6*(parseInt(_0x214f38(0x23a))/0x7)+parseInt(_0x214f38(0x24f))/0x8+parseInt(_0x214f38(0x253))/0x9+-parseInt(_0x214f38(0x120))/0xa;if(_0x5b8fdb===_0x19ebe3)break;else _0x1fac26['push'](_0x1fac26['shift']());}catch(_0x49e971){_0x1fac26['push'](_0x1fac26['shift']());}}}(a0_0x4d9b,0xf4218));function toCamelCase(_0x44f91c){const _0x8deec6=a0_0x3092,_0x273cd2={'IMcZs':function(_0xb6d089,_0x8f655a){return _0xb6d089===_0x8f655a;}};if(!_0x44f91c||typeof _0x44f91c!=='string')return'';return _0x44f91c['replace'](/(?:^\w|[A-Z]|\b\w)/g,(_0x2bc6a8,_0x19737a)=>{const _0xf85ad=a0_0x3092;return _0x273cd2[_0xf85ad(0x15b)](_0x19737a,0x0)?_0x2bc6a8[_0xf85ad(0x1fc)]():_0x2bc6a8[_0xf85ad(0x234)]();})['replace'](/\s+/g,'')[_0x8deec6(0x1be)](/[-_]/g,'');}function toPascalCase(_0x3ba2ec){const _0x541f2b=a0_0x3092,_0x913af1={'ncMmY':function(_0x445483,_0x588421){return _0x445483!==_0x588421;},'iDefJ':_0x541f2b(0x1c4),'xEioa':function(_0x3fb097,_0x44f7d3){return _0x3fb097(_0x44f7d3);}};if(!_0x3ba2ec||_0x913af1['ncMmY'](typeof _0x3ba2ec,_0x913af1['iDefJ']))return'';const _0x157023=_0x913af1[_0x541f2b(0x224)](toCamelCase,_0x3ba2ec);return _0x157023[_0x541f2b(0x21c)](0x0)['toUpperCase']()+_0x157023[_0x541f2b(0x165)](0x1);}function assertNoFileReferenceLeftover(_0x5d6827){const _0x259d43=a0_0x3092,_0x32c0e9={'thxMS':_0x259d43(0x20d),'lzNAs':'masterDetail.detailConfig.detailQuery','kgztV':function(_0x35bfaf,_0x635daf){return _0x35bfaf===_0x635daf;},'qdmfQ':_0x259d43(0x18d),'ZdQla':function(_0x129900,_0xba6bac){return _0x129900+_0xba6bac;}},_0x31815d=[[_0x32c0e9[_0x259d43(0x24a)],_0x5d6827['datatablesQuery']],[_0x259d43(0x1d8),_0x5d6827[_0x259d43(0x1d8)]],[_0x32c0e9[_0x259d43(0x1c2)],_0x5d6827['masterDetail']&&_0x5d6827['masterDetail']['detailConfig']&&_0x5d6827['masterDetail']['detailConfig']['detailQuery']]];for(const [_0x464532,_0x3460bd]of _0x31815d){if(_0x32c0e9[_0x259d43(0x255)](typeof _0x3460bd,_0x259d43(0x1c4))&&_0x3460bd[_0x259d43(0x14e)](_0x32c0e9[_0x259d43(0x179)]))throw new Error(_0x32c0e9[_0x259d43(0x148)]('Codegen\x20invariant\x20violation:\x20'+_0x464532+_0x259d43(0x121)+_0x3460bd+').\x20','Expected\x20expanded\x20SQL\x20string.\x20Check\x20PayloadProcessor.processFileReferences\x20flow.'));}}function buildAuditColumnsSection(_0x9f5e0,_0x8ba20e){const _0x1d7f0f=a0_0x3092,_0x7b852c={'mlpIB':function(_0x2b05d9,_0x3c07d3){return _0x2b05d9!==_0x3c07d3;},'qkRab':'auditColumns','NhSnN':function(_0x24dfb3,_0x513c0f){return _0x24dfb3===_0x513c0f;},'kuQTl':'createdAt','ZpQJo':'createdBy','SnSoe':_0x1d7f0f(0x222),'smtxe':_0x1d7f0f(0x162)};if(!(_0x7b852c[_0x1d7f0f(0x1d0)]in _0x9f5e0))return'';const _0x2a5e89=_0x9f5e0['auditColumns'];if(_0x2a5e89===![]||_0x2a5e89===null)return'\x0a'+_0x8ba20e+_0x1d7f0f(0x1db)+_0x8ba20e+'this.auditColumns\x20=\x20null;\x0a';if(_0x7b852c['NhSnN'](typeof _0x2a5e89,'object')&&!Array['isArray'](_0x2a5e89)){const _0x2a6840=[_0x7b852c[_0x1d7f0f(0x167)],_0x7b852c[_0x1d7f0f(0x216)],_0x7b852c['SnSoe'],_0x7b852c[_0x1d7f0f(0x1fb)]],_0x253dc1={};_0x2a6840['forEach'](_0x24c66e=>{const _0x1dbf89=_0x1d7f0f;if(_0x7b852c[_0x1dbf89(0x17f)](_0x2a5e89[_0x24c66e],undefined))_0x253dc1[_0x24c66e]=_0x2a5e89[_0x24c66e];});const _0x5c112e=JSON['stringify'](_0x253dc1,null,0x2)[_0x1d7f0f(0x20e)]('\x0a')[_0x1d7f0f(0x1a5)]((_0x3f3911,_0x4055ef)=>_0x4055ef===0x0?_0x3f3911:_0x8ba20e+_0x3f3911)[_0x1d7f0f(0x1e6)]('\x0a');return'\x0a'+_0x8ba20e+_0x1d7f0f(0x202)+_0x8ba20e+'this.auditColumns\x20=\x20'+_0x5c112e+';\x0a';}throw new Error('Invalid\x20auditColumns\x20value\x20for\x20'+_0x9f5e0['tableName']+_0x1d7f0f(0x1d3));}function detectTextColumn(_0x15aa2){const _0xed3e8=a0_0x3092,_0x2ca875={'KXcrI':'name','VPLSR':_0xed3e8(0x128),'ygmIH':_0xed3e8(0x19e),'iNVkY':'description','XrXGc':_0xed3e8(0x1fe),'LkpLd':_0xed3e8(0x17d),'MKxOH':'nama'},_0x438477=[_0x2ca875[_0xed3e8(0x158)],'nama',_0x2ca875['VPLSR'],_0x2ca875['ygmIH'],_0x2ca875[_0xed3e8(0x12b)],_0x2ca875[_0xed3e8(0x18e)],_0x2ca875['LkpLd'],_0xed3e8(0x20c)];for(const _0x13b74b of _0x438477){const _0x198b1f=_0x15aa2[_0xed3e8(0x1a0)](_0x25595a=>_0x25595a['toLowerCase']()[_0xed3e8(0x13b)](_0x13b74b));if(_0x198b1f)return _0x198b1f;}return _0x15aa2['find'](_0x13a601=>_0x13a601!=='id')||_0x15aa2[0x0]||_0x2ca875[_0xed3e8(0x22b)];}function createMysqlMainModuleTemplate(_0x1a4b9b){const _0x1abb67=a0_0x3092,_0x27d8bf=toPascalCase(_0x1a4b9b);return _0x1abb67(0x1ec)+_0x1a4b9b+_0x1abb67(0x16d)+_0x27d8bf+_0x1abb67(0x1f4)+_0x1a4b9b+_0x1abb67(0x169)+_0x1a4b9b+_0x1abb67(0x1eb)+_0x1a4b9b+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20//\x20Muat\x20semua\x20rute\x20dari\x20folder\x20'+_0x1a4b9b+_0x1abb67(0x137)+_0x1a4b9b+'\x27);\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Directory\x20${modulesDir}\x20created\x20successfully`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\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}\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\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\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\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\x20if\x20(require.cache[endpointPath])\x20{\x0a\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}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20moduleRoutes\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0x1a4b9b+'/${endpointName}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20app.use(endpointPrefix,\x20moduleRoutes);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logEndpointRegistered(endpointName,\x20endpointPrefix);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20export\x20routes\x20via\x20centralized\x20handler\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\x20exportConfig\x20=\x20extractExportConfigFromEndpoint(endpointPath);\x0a\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\x20ExportHandler.registerRoutes(app,\x20\x27'+_0x1a4b9b+'\x27,\x20endpointName,\x20exportConfig);\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(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27export_registration_error\x27,\x20endpoint:\x20endpointName,\x20error:\x20exportError.message\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20via\x20centralized\x20handler\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\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\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\x20ImportHandler.registerRoutes(app,\x20\x27'+_0x1a4b9b+'\x27,\x20endpointName,\x20importConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27import_routes_registered\x27,\x20endpoint:\x20endpointName\x20},\x20`Import\x20routes\x20registered\x20for\x20${endpointName}`);\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(importError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27import_registration_error\x27,\x20endpoint:\x20endpointName,\x20error:\x20importError.message\x20},\x20`Import\x20registration\x20failed\x20for\x20${endpointName}:\x20${importError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20upload\x20routes\x20via\x20centralized\x20handler\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\x20uploadConfig\x20=\x20extractUploadConfigFromEndpoint(endpointPath);\x0a\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\x20UploadHandler.registerRoutes(app,\x20\x27'+_0x1a4b9b+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27upload_routes_registered\x27,\x20endpoint:\x20endpointName,\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\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(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27upload_registration_error\x27,\x20endpoint:\x20endpointName,\x20error:\x20uploadError.message\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20module\x20${file}\x20from\x20'+_0x1a4b9b+':`,\x20error);\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//\x20Register\x20export\x20cleanup\x20route\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\x20console.error(\x27Export\x20cleanup\x20route\x20registration\x20failed:\x27,\x20cleanupError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\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\x20message:\x20\x27'+_0x1a4b9b+'\x20API\x20(MySQL\x20Database)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27running\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20database:\x20\x27MySQL\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//\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(\x27Error:\x27,\x20err);\x0a\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&&\x20!res.headersSent)\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});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).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\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\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});\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//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20catch-all\x20403\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20runtime\x20untuk\x20register\x20admin\x20endpoint\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\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\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\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'+_0x1a4b9b+_0x1abb67(0x15f)+_0x1a4b9b+_0x1abb67(0x181)+_0x1a4b9b+'/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\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Menerima\x20sinyal\x20SIGINT,\x20shutting\x20down...\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Menerima\x20sinyal\x20SIGTERM,\x20shutting\x20down...\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20});\x0a\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});\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});\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menjalankan\x20modul\x20'+_0x1a4b9b+':\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20resolve();\x0a\x20\x20\x20\x20}\x0a\x20\x20});\x0a}\x0a\x0amodule.exports\x20=\x20{\x20execute\x20};';}function a0_0x3092(_0x3fbbae,_0x4f79e5){_0x3fbbae=_0x3fbbae-0x113;const _0x4d9bb7=a0_0x4d9b();let _0x309241=_0x4d9bb7[_0x3fbbae];if(a0_0x3092['gTJNyC']===undefined){var _0x38612b=function(_0x49521d){const _0x1cb671='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xf908e5='',_0x4f8b23='';for(let _0x1495ef=0x0,_0x1271d9,_0x485335,_0x190ff1=0x0;_0x485335=_0x49521d['charAt'](_0x190ff1++);~_0x485335&&(_0x1271d9=_0x1495ef%0x4?_0x1271d9*0x40+_0x485335:_0x485335,_0x1495ef++%0x4)?_0xf908e5+=String['fromCharCode'](0xff&_0x1271d9>>(-0x2*_0x1495ef&0x6)):0x0){_0x485335=_0x1cb671['indexOf'](_0x485335);}for(let _0x3d3497=0x0,_0x3b08db=_0xf908e5['length'];_0x3d3497<_0x3b08db;_0x3d3497++){_0x4f8b23+='%'+('00'+_0xf908e5['charCodeAt'](_0x3d3497)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4f8b23);};a0_0x3092['QpmjLt']=_0x38612b,a0_0x3092['SHgstT']={},a0_0x3092['gTJNyC']=!![];}const _0x43340e=_0x4d9bb7[0x0],_0x19953b=_0x3fbbae+_0x43340e,_0x2de27e=a0_0x3092['SHgstT'][_0x19953b];return!_0x2de27e?(_0x309241=a0_0x3092['QpmjLt'](_0x309241),a0_0x3092['SHgstT'][_0x19953b]=_0x309241):_0x309241=_0x2de27e,_0x309241;}function buildDefaultScopeSQL(_0x4b62fd,_0x54216f=''){const _0xe64968=a0_0x3092,_0x3ac190={'szBQD':function(_0x1f70d9,_0x11248a){return _0x1f70d9!==_0x11248a;},'eENuV':function(_0x15674f,_0x3dc1a7){return _0x15674f===_0x3dc1a7;},'cGzET':'boolean','LJYyJ':_0xe64968(0x1c4)};if(!_0x4b62fd||_0x3ac190['szBQD'](typeof _0x4b62fd,'object'))return'';const _0x23b2ba=[];for(const [_0x5d77aa,_0x223c9a]of Object[_0xe64968(0x1ab)](_0x4b62fd)){if(_0x3ac190['eENuV'](typeof _0x223c9a,_0x3ac190['cGzET']))_0x23b2ba[_0xe64968(0x1f0)](''+_0x54216f+_0x5d77aa+_0xe64968(0x163)+_0x223c9a+'\x27');else{if(_0x3ac190[_0xe64968(0x24c)](typeof _0x223c9a,_0x3ac190[_0xe64968(0x15a)]))_0x23b2ba['push'](''+_0x54216f+_0x5d77aa+'\x20=\x20\x27'+_0x223c9a['replace'](/'/g,'\x27\x27')+'\x27');else _0x3ac190[_0xe64968(0x24c)](typeof _0x223c9a,_0xe64968(0x1af))&&_0x23b2ba['push'](''+_0x54216f+_0x5d77aa+_0xe64968(0x237)+_0x223c9a);}}return _0x23b2ba['join']('\x20AND\x20');}function buildRequestScopeMiddleware(_0x144c4a,_0x2e6d31){const _0x41a34c=a0_0x3092;if(!_0x144c4a[_0x41a34c(0x18c)])return'';const {column:_0x201234,source:_0x1e8527,bypassRoles:_0x432d6c}=_0x144c4a['requestScope'],_0x392a34=JSON[_0x41a34c(0x257)](_0x432d6c||[]),_0x1781b7=(_0x2e6d31||'')['replace'](/-/g,'_');return _0x41a34c(0x208)+_0x201234+'\x27\x20from\x20'+_0x1e8527+'\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'+_0x392a34+_0x41a34c(0x207)+_0x1e8527+_0x41a34c(0x1bb)+_0x201234+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x201234+_0x41a34c(0x1e0)+_0x201234+'\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'+_0x201234+_0x41a34c(0x1b3)+_0x1781b7+'\x27]\x20||\x20req.body;\x0a\x20\x20\x20\x20masterBody[\x27'+_0x201234+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function createMysqlModelTemplate(_0x436d73,_0x17c20c,_0x456a90){const _0x5210a3=a0_0x3092,_0x5a4732={'mjWWu':'datetime','xMvDL':'timestamp','hxIyE':'time','CnfEt':_0x5210a3(0x138),'rocth':'generated','BcVvC':_0x5210a3(0x1c3),'utVap':function(_0x27c1b8,_0x42a889){return _0x27c1b8>_0x42a889;},'NFKLw':function(_0x5c2f2f,_0x2a75f9){return _0x5c2f2f>_0x2a75f9;},'HNwZS':function(_0xcc1ed4,_0x1d1511){return _0xcc1ed4+_0x1d1511;},'UwtjS':function(_0x19d91e,_0x496920){return _0x19d91e+_0x496920;},'Qdaze':function(_0x3d0a5c,_0x9e05ee){return _0x3d0a5c(_0x9e05ee);},'yJRXu':function(_0x33d5bf,_0x6b4062,_0x4b7b2e){return _0x33d5bf(_0x6b4062,_0x4b7b2e);},'AvfbY':function(_0x30e09d,_0x4ee98c){return _0x30e09d(_0x4ee98c);},'iUDyX':_0x5210a3(0x22a),'OKftA':_0x5210a3(0x19a),'kukIm':_0x5210a3(0x182),'JOqvP':'AND\x20('};_0x5a4732['Qdaze'](assertNoFileReferenceLeftover,_0x456a90);const _0x221916=_0x456a90['fieldName']['map'](_0x20632e=>'\x27'+_0x20632e+'\x27')[_0x5210a3(0x1e6)](',\x20'),_0x2eec35=_0x5a4732['Qdaze'](toPascalCase,_0x17c20c),_0x3c06dc=_0x456a90[_0x5210a3(0x1e5)]||'id',_0x55b4c2=_0x5a4732[_0x5210a3(0x146)](detectTextColumn,_0x456a90['fieldName']),_0x1437f3=new Date()['toISOString'](),_0x355cce=_0x5a4732['yJRXu'](buildAuditColumnsSection,_0x456a90,'\x20\x20'),_0x2d17e9=_0x456a90[_0x5210a3(0x236)]&&_0x456a90['defaultScope']['lookup']?_0x5a4732[_0x5210a3(0x1c9)](buildDefaultScopeSQL,_0x456a90['defaultScope']['lookup']):'',_0x6f27e7=_0x456a90['defaultScope']&&_0x456a90['defaultScope']['read']?buildDefaultScopeSQL(_0x456a90['defaultScope']['read']):'',_0x2b7ed1={};return _0x456a90['fieldValidation']&&Array[_0x5210a3(0x228)](_0x456a90['fieldValidation'])&&_0x456a90[_0x5210a3(0x240)]['forEach'](_0x2aafd6=>{const _0x3a4a3e=_0x5210a3;['date',_0x5a4732['mjWWu'],_0x5a4732['xMvDL'],_0x5a4732[_0x3a4a3e(0x201)]][_0x3a4a3e(0x13b)](_0x2aafd6[_0x3a4a3e(0x195)])&&(_0x2b7ed1[_0x2aafd6['name']]={'type':_0x2aafd6['type'],'format':_0x2aafd6['constraints']&&_0x2aafd6['constraints'][_0x3a4a3e(0x11c)]||_0x3a4a3e(0x20f)});}),'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model-mysql\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db-mysql\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a\x0a/**\x0a*\x20'+_0x2eec35+_0x5210a3(0x1f1)+_0x1437f3+_0x5210a3(0x14d)+_0x456a90['tableName']+'\x0a*\x20Primary\x20Key:\x20'+_0x3c06dc+_0x5210a3(0x14a)+_0x456a90[_0x5210a3(0x229)][_0x5210a3(0x1b2)]+'\x0a*\x20Database:\x20MySQL\x0a*/\x0aclass\x20'+_0x2eec35+_0x5210a3(0x23b)+_0x221916+_0x5210a3(0x1f9)+(_0x456a90[_0x5210a3(0x1c0)]?JSON['stringify'](_0x456a90[_0x5210a3(0x1c0)]):'[\x27kode\x27,\x20\x27nama\x27,\x20\x27all\x27]')+';\x0a\x0a\x20\x20super(\x27'+_0x456a90['tableName']+'\x27,\x20validFields);\x0a\x0a\x20\x20//\x20base-model-mysql\x20hanya\x20menerima\x202\x20parameter,\x20simpan\x20datatablesWhere\x20manual\x0a\x20\x20this.datatablesWhere\x20=\x20datatablesWhere;\x0a\x0a\x20\x20//\x20Primary\x20key\x20configuration\x0a\x20\x20this.primaryKey\x20=\x20\x27'+_0x3c06dc+_0x5210a3(0x1d9)+(_0x456a90['viewName']||_0x456a90['tableName'])+'\x27;\x0a\x20\x20this.readSource\x20=\x20\x27'+(_0x456a90['viewName']||_0x456a90[_0x5210a3(0x1c6)])+'\x27;\x0a\x20\x20this.writeSource\x20=\x20\x27'+_0x456a90['tableName']+'\x27;\x0a'+_0x355cce+_0x5210a3(0x1ad)+!!_0x456a90[_0x5210a3(0x1d8)]+_0x5210a3(0x136)+!!_0x456a90[_0x5210a3(0x245)]+';\x0a'+(Object[_0x5210a3(0x232)](_0x2b7ed1)['length']>0x0?'\x0a\x20\x20//\x20DateTime\x20fields\x20configuration\x20dari\x20fieldValidation\x0a\x20\x20this.dateTimeFields\x20=\x20'+JSON[_0x5210a3(0x257)](_0x2b7ed1,null,0x4)[_0x5210a3(0x20e)]('\x0a')['join'](_0x5a4732['iUDyX'])+';\x0a':'')+(_0x456a90[_0x5210a3(0x1a8)]&&_0x456a90[_0x5210a3(0x1a8)]['fields']?_0x5210a3(0x210)+JSON[_0x5210a3(0x257)](Object[_0x5210a3(0x232)](_0x456a90[_0x5210a3(0x1a8)]['fields']))+';\x0a':'')+_0x5210a3(0x1cc)+((()=>{const _0x2a7ea8=_0x5210a3;if(!_0x456a90['fieldValidation']||!Array['isArray'](_0x456a90[_0x2a7ea8(0x240)])||_0x456a90[_0x2a7ea8(0x240)]['length']===0x0)return _0x5a4732['CnfEt'];const _0x179422=_0x456a90['fieldValidation'][_0x2a7ea8(0x1a5)](_0x329799=>{const _0x255038=_0x2a7ea8,_0x4bb844=JSON[_0x255038(0x257)](_0x329799['constraints']||{},null,0x6)[_0x255038(0x1be)](/\n/g,'\x0a\x20\x20\x20\x20\x20\x20');return _0x255038(0x1e9)+_0x329799['name']+_0x255038(0x142)+_0x329799[_0x255038(0x195)]+_0x255038(0x1c1)+_0x4bb844+_0x255038(0x205);})[_0x2a7ea8(0x1e6)](',\x0a');return'\x20\x20this.validationConfig\x20=\x20{\x0a'+_0x179422+'\x0a\x20\x20\x20\x20}';})())+'\x0a\x0a\x20\x20//\x20Model\x20metadata\x0a\x20\x20this.modelMetadata\x20=\x20{\x0a\x20\x20\x20\x20endpointName:\x20\x27'+_0x17c20c+'\x27,\x0a\x20\x20\x20\x20moduleName:\x20\x27'+_0x436d73+'\x27,\x0a\x20\x20\x20\x20tableName:\x20\x27'+_0x456a90['tableName']+_0x5210a3(0x113)+_0x3c06dc+'\x27,\x0a\x20\x20\x20\x20fieldCount:\x20'+_0x456a90[_0x5210a3(0x229)]['length']+_0x5210a3(0x1e3)+_0x1437f3+_0x5210a3(0x21e)+(_0x456a90['advancedQueries']?Object['entries'](_0x456a90['advancedQueries'])['map'](([_0x23ebc0,_0x42da11])=>_0x5210a3(0x1b7)+_0x42da11+'\x22\x20===\x20\x27string\x27\x20&&\x20\x22'+_0x42da11+_0x5210a3(0x124)+_0x42da11+_0x5210a3(0x250)+_0x23ebc0+_0x5210a3(0x15d)+_0x23ebc0+'\x20loaded\x20successfully\x20from\x20MySQL\x20file`);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`SQL\x20Template\x20file\x20'+_0x23ebc0+_0x5210a3(0x1f2)+_0x23ebc0+_0x5210a3(0x117)+_0x23ebc0+_0x5210a3(0x12d)+_0x42da11+_0x5210a3(0x1fa)+_0x23ebc0+':`,\x20error);\x0a\x20\x20\x20\x20templates[\x22'+_0x23ebc0+'\x22]\x20=\x20null;\x0a\x20\x20}')[_0x5210a3(0x1e6)](''):_0x5a4732['OKftA'])+'\x0a\x0a\x20\x20return\x20templates;\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getListQuery\x20untuk\x20MySQL\x20syntax\x0a\x20*/\x0agetListQuery(options\x20=\x20{})\x20{\x0a\x20\x20let\x20baseQuery\x20=\x20`\x0a\x20\x20\x20\x20'+_0x456a90['datatablesQuery'][_0x5210a3(0x1be)](/\$\{tableName\}/g,_0x5a4732[_0x5210a3(0x19d)])+'\x0a\x20\x20`.trim();\x0a\x0a\x20\x20//\x20Convert\x20PostgreSQL\x20syntax\x20to\x20MySQL\x20if\x20needed\x0a\x20\x20baseQuery\x20=\x20this.convertToMysqlSQL(baseQuery);\x0a\x0a\x20\x20return\x20baseQuery;\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20*/\x0agetReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20}\x0a'+(_0x456a90['viewQuery']?_0x5210a3(0x249)+_0x456a90[_0x5210a3(0x1d8)][_0x5210a3(0x1be)](/\$\{tableName\}/g,_0x5a4732['kukIm'])+'\x0a\x20\x20`.trim();\x0a\x20\x20baseQuery\x20=\x20this.convertToMysqlSQL(baseQuery);\x0a\x20\x20return\x20baseQuery;':_0x5210a3(0x140))+'\x0a}\x0a\x0a/**\x0a\x20*\x20Convert\x20PostgreSQL\x20SQL\x20syntax\x20to\x20MySQL\x0a\x20*/\x0aconvertToMysqlSQL(sql)\x20{\x0a\x20\x20//\x20ILIKE\x20→\x20LIKE\x20(MySQL\x20case-insensitive\x20by\x20default\x20with\x20utf8mb4\x20collation)\x0a\x20\x20sql\x20=\x20sql.replace(/\x5cbILIKE\x5cb/gi,\x20\x27LIKE\x27);\x0a\x20\x20//\x20NOW()\x20dan\x20CURRENT_DATE\x20sudah\x20sama\x20di\x20MySQL\x0a\x20\x20return\x20sql;\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getDatatables\x20untuk\x20MySQL\x20dengan\x20pagination\x20yang\x20tepat\x0a\x20*\x20Paritas\x20fungsional\x20dengan\x20Oracle\x20dan\x20PostgreSQL\x20getDatatables\x0a\x20*/\x0aasync\x20getDatatables(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Check\x20cache\x20first\x0a\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedDatatables(options);\x0a\x20\x20\x20\x20if\x20(cachedResult)\x20return\x20cachedResult;\x0a\x0a\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20start\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20filters\x20=\x20{},\x0a\x20\x20\x20\x20\x20\x20advancedFilters\x20=\x20[]\x0a\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20//\x20Resolve\x20sort\x20columns\x20dengan\x20prioritas:\x20sort_columns\x20>\x20order[0][column]\x20>\x20default\x0a\x20\x20\x20\x20let\x20resolvedSortColumns\x20=\x20sort_columns;\x0a\x0a\x20\x20\x20\x20//\x20Fallback:\x20cek\x20format\x20DataTables\x20bawaan\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20if\x20((!resolvedSortColumns\x20||\x20resolvedSortColumns.length\x20===\x200)\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20!==\x20undefined\x20&&\x20options[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20columnIndex\x20=\x20parseInt(options[\x27order[0][column]\x27]);\x0a\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20options[\x27order[0][dir]\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(columnIndex\x20>=\x200\x20&&\x20columnIndex\x20<\x20this.validFields.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20resolvedSortColumns\x20=\x20[{\x20column:\x20this.validFields[columnIndex],\x20direction:\x20direction.toUpperCase()\x20}];\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(resolvedSortColumns);\x0a\x0a\x20\x20\x20\x20const\x20baseQuery\x20=\x20this.getListQuery(options);\x0a\x0a\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x20(parameterized)\x0a\x20\x20\x20\x20const\x20searchResult\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x20\x20\x20\x20let\x20whereClauseSql\x20=\x20searchResult.sql;\x0a\x20\x20\x20\x20let\x20whereParams\x20=\x20[...searchResult.params];\x0a\x0a\x20\x20\x20\x20//\x20Build\x20filter\x20clause\x0a\x20\x20\x20\x20const\x20filterClause\x20=\x20this.buildObjectFilterClause(filters);\x0a\x20\x20\x20\x20if\x20(filterClause)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${filterClause}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${filterClause}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Support\x20WHERE\x20conditions\x20dari\x20request\x20body\x0a\x20\x20\x20\x20if\x20(options.where)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20complexResult\x20=\x20this.buildComplexWhereClause(options.where,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20complexResult.params;\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\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}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Advanced\x20filters\x20support\x0a\x20\x20\x20\x20if\x20(advancedFilters\x20&&\x20advancedFilters.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20advResult\x20=\x20this.buildAdvancedFilterCondition(advancedFilters);\x0a\x20\x20\x20\x20\x20\x20if\x20(advResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${advResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${advResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereParams.push(...advResult.params);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Check\x20if\x20query\x20needs\x20subquery\x20wrapping\x20(CTE\x20or\x20JOIN)\x0a\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\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\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20//\x20Count\x20total\x20records\x0a\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20`SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(${baseQuery})\x20as\x20base_query`\x20:\x0a\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20//\x20Count\x20filtered\x20records\x0a\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20`SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(${baseQuery})\x20as\x20base_query\x20${whereClauseSql}`\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x20\x27\x20+\x20whereClauseSql;\x0a\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\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20MySQL\x20pagination\x20using\x20LIMIT/OFFSET\x0a\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20`SELECT\x20*\x20FROM\x20(${baseQuery})\x20as\x20base_query\x20${whereClauseSql\x20||\x20\x27\x27}\x20${orderClause}\x20LIMIT\x20${perPage}\x20OFFSET\x20${start}`\x20:\x0a\x20\x20\x20\x20\x20\x20`${baseQuery}\x20${whereClauseSql\x20||\x20\x27\x27}\x20${orderClause}\x20LIMIT\x20${perPage}\x20OFFSET\x20${start}`;\x0a\x0a\x20\x20\x20\x20console.log(\x27Final\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20console.log(\x27Query\x20Parameters:\x27,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20[]);\x0a\x20\x20\x20\x20const\x20rawData\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20data:\x20MySQL\x20returns\x20lowercase\x20keys\x20natively\x0a\x20\x20\x20\x20const\x20data\x20=\x20rawData\x20?\x20rawData.map((row,\x20index)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20formatted\x20=\x20this.formatResponseData(row);\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...formatted,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rownumerator:\x20start\x20+\x20index\x20+\x201\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20})\x20:\x20[];\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20draw:\x20parseInt(options.draw\x20||\x20\x271\x27,\x2010),\x0a\x20\x20\x20\x20\x20\x20recordsTotal:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20recordsFiltered:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20data:\x20data\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedDatatables(options,\x20result);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getDatatables:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20WHERE\x20clause\x20untuk\x20search\x20(parameterized\x20query)\x0a\x20*\x20@returns\x20{Object}\x20{\x20sql:\x20string,\x20params:\x20array\x20}\x0a\x20*/\x0abuildWhereClause(searchValue,\x20searchBy)\x20{\x0a\x20\x20if\x20(!searchValue\x20||\x20searchValue\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20const\x20params\x20=\x20[];\x0a\x20\x20const\x20searchPattern\x20=\x20`%${searchValue}%`;\x0a\x0a\x20\x20if\x20(searchBy\x20===\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20const\x20searchableFields\x20=\x20this.datatablesWhere.filter(field\x20=>\x20field\x20!==\x20\x27all\x27);\x0a\x20\x20\x20\x20if\x20(searchableFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20conditions\x20=\x20searchableFields.map(field\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(searchPattern);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${field}\x20LIKE\x20?`;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20sql:\x20`WHERE\x20(${conditions.join(\x27\x20OR\x20\x27)})`,\x20params\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x20else\x20if\x20(this.validFields.includes(searchBy))\x20{\x0a\x20\x20\x20\x20params.push(searchPattern);\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20`WHERE\x20${searchBy}\x20LIKE\x20?`,\x20params\x20};\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20filter\x20clause\x20dari\x20object\x20filters\x0a\x20*\x20@param\x20{Object}\x20filters\x20-\x20Filter\x20object\x20{column:\x20value}\x0a\x20*\x20@returns\x20{string}\x20Filter\x20conditions\x20SQL\x20(tanpa\x20WHERE\x20prefix)\x0a\x20*/\x0abuildObjectFilterClause(filters)\x20{\x0a\x20\x20if\x20(!filters\x20||\x20typeof\x20filters\x20!==\x20\x27object\x27\x20||\x20Object.keys(filters).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20}\x0a\x0a\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20for\x20(const\x20[column,\x20value]\x20of\x20Object.entries(filters))\x20{\x0a\x20\x20\x20\x20if\x20(!this.validFields.includes(column))\x20continue;\x0a\x20\x20\x20\x20if\x20(value\x20===\x20null\x20||\x20value\x20===\x20undefined\x20||\x20value\x20===\x20\x27\x27\x20||\x20value\x20===\x20\x27all\x27\x20||\x20value\x20===\x20\x27-\x27)\x20continue;\x0a\x0a\x20\x20\x20\x20const\x20escapedValue\x20=\x20value.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20conditions.push(`${column}\x20=\x20\x27${escapedValue}\x27`);\x0a\x20\x20}\x0a\x0a\x20\x20return\x20conditions.length\x20>\x200\x20?\x20conditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20list\x20data\x20dengan\x20pagination\x20untuk\x20MySQL\x0a\x20*/\x0aasync\x20getList(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Check\x20cache\x20first\x0a\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedList(options);\x0a\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20page:\x20p\x20=\x20null,\x20perPage:\x20pp\x20=\x2010,\x20searchValue:\x20sv\x20=\x20\x27\x27,\x20sort_columns:\x20sc\x20=\x20[],\x20where:\x20w\x20=\x20null\x20}\x20=\x20options;\x0a\x20\x20\x20\x20\x20\x20const\x20scInfo\x20=\x20sc\x20&&\x20sc.length\x20>\x200\x20?\x20sc.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20HIT\x20for\x20list\x20-\x20page:${p},\x20perPage:${pp},\x20sort:${scInfo},\x20search:${sv\x20||\x20\x27none\x27}${w\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`);\x0a\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20page\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20where\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20select\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20limit\x20=\x201000\x0a\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20const\x20paginate\x20=\x20page\x20!==\x20null;\x0a\x20\x20\x20\x20const\x20scInfo\x20=\x20sort_columns\x20&&\x20sort_columns.length\x20>\x200\x20?\x20sort_columns.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x20:\x20\x27default\x27;\x0a\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\x0a\x20\x20\x20\x20console.log(`[Cache]\x20MISS\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20let\x20baseQuery;\x0a\x20\x20\x20\x20if\x20(select\x20&&\x20Array.isArray(select)\x20&&\x20select.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20selectedValidColumns\x20=\x20select.filter(col\x20=>\x20this.validFields.includes(col));\x0a\x20\x20\x20\x20\x20\x20if\x20(selectedValidColumns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.map(col\x20=>\x20\x27`\x27\x20+\x20col\x20+\x20\x27`\x27).join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Deteksi\x20apakah\x20query\x20mengandung\x20JOIN\x20atau\x20CTE\x20(perlu\x20subquery\x20wrapping)\x0a\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\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\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20const\x20searchResult\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x20\x20\x20\x20let\x20whereClauseSql\x20=\x20searchResult.sql;\x0a\x20\x20\x20\x20let\x20whereParams\x20=\x20[...searchResult.params];\x0a\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(sort_columns);\x0a'+(_0x6f27e7?'\x0a\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x20untuk\x20read\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20'+_0x6f27e7+'\x20AND\x20`\x20+\x20whereClauseSql.replace(/^WHERE\x5cs+/i,\x20\x27\x27);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20'+_0x6f27e7+_0x5210a3(0x193):'')+'\x0a\x20\x20\x20\x20//\x20Support\x20WHERE\x20conditions\x20dari\x20request\x20body\x0a\x20\x20\x20\x20if\x20(where)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20complexResult\x20=\x20this.buildComplexWhereClause(where,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`${whereClauseSql}\x20AND\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20`WHERE\x20${complexResult.sql}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20complexResult.params;\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\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}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Count\x20total\x20unfiltered\x20records\x0a\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x27\x0a\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x27;\x0a\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20const\x20totalUnfiltered\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20//\x20Count\x20filtered\x20records\x0a\x20\x20\x20\x20let\x20totalRecords\x20=\x20totalUnfiltered;\x0a\x20\x20\x20\x20if\x20(whereClauseSql)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20countQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20a\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20countResult\x20=\x20await\x20db.executeQuery(countQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20totalRecords\x20=\x20countResult\x20&&\x20countResult[0]\x20?\x20parseInt(countResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20query\x20berdasarkan\x20mode\x20paginasi\x20(subquery\x20wrapping\x20untuk\x20JOIN/CTE)\x0a\x20\x20\x20\x20let\x20query;\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20offset\x20=\x20(page\x20-\x201)\x20*\x20perPage;\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20\x27\x20LIMIT\x20\x27\x20+\x20perPage\x20+\x20\x27\x20OFFSET\x20\x27\x20+\x20offset\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${offset}`;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20as\x20base_query\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20\x27\x20LIMIT\x20\x27\x20+\x20limit\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20(whereClauseSql\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20`\x20LIMIT\x20${limit}`;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(\x27List\x20SQL\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20console.log(\x27List\x20Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20const\x20rawData\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20rawData\x20?\x20rawData.map((row)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20this.formatResponseData(row);\x0a\x20\x20\x20\x20})\x20:\x20[];\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20data\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20result.pagination\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20page\x20<\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20page\x20>\x201\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedList(options,\x20result);\x0a\x20\x20\x20\x20console.log(`[Cache]\x20SET\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getList:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Override\x20getLookupData\x20untuk\x20MySQL\x20(dynamic\x20search)\x0a\x20*/\x0aasync\x20getLookupData(search)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20query\x20=\x20`SELECT\x20'+_0x3c06dc+',\x20'+_0x55b4c2+'\x20FROM\x20${this.getTableSource(\x27read\x27)}\x20WHERE\x20'+_0x55b4c2+'\x20LIKE\x20?'+(_0x2d17e9?'\x20AND\x20'+_0x2d17e9:'')+'\x20ORDER\x20BY\x20'+_0x55b4c2+_0x5210a3(0x1a9)+_0x3c06dc+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x55b4c2+'\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20MySQL\x20getLookupData:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Dynamic\x20lookup\x20dengan\x20extra\x20filters\x20untuk\x20MySQL\x0a\x20*/\x0aasync\x20getLookupDataDynamic(search,\x20extraFilters\x20=\x20{})\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20let\x20whereConditions\x20=\x20[];\x0a'+(_0x2d17e9?'\x0a\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x0a\x20\x20\x20\x20whereConditions.push(`'+_0x2d17e9+_0x5210a3(0x1a3):'')+'\x0a\x20\x20\x20\x20if\x20(search)\x20{\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(`'+_0x55b4c2+_0x5210a3(0x129)+_0x3c06dc+',\x20'+_0x55b4c2+'\x20FROM\x20${this.getTableSource(\x27read\x27)}\x20${whereClause}\x20ORDER\x20BY\x20'+_0x55b4c2+'\x20LIMIT\x20100`;\x0a\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params.length\x20>\x200\x20?\x20params\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x3c06dc+_0x5210a3(0x209)+_0x55b4c2+_0x5210a3(0x1da)+_0x3c06dc+',\x20'+_0x55b4c2+'\x20FROM\x20${this.getTableSource(\x27read\x27)}'+(_0x2d17e9?'\x20WHERE\x20'+_0x2d17e9:'')+_0x5210a3(0x180)+_0x55b4c2+_0x5210a3(0x1b6)+_0x3c06dc+_0x5210a3(0x209)+_0x55b4c2+'\x0a\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20cacheData,\x20\x27static\x27);\x0a\x0a\x20\x20\x20\x20//\x20Return\x20dengan\x20selected\x20flag\x0a\x20\x20\x20\x20return\x20data.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20row\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x3c06dc+_0x5210a3(0x1ef)+_0x55b4c2+_0x5210a3(0x1b5)+_0x3c06dc+_0x5210a3(0x1dc)+_0x3c06dc+'\x27,\x20\x27'+_0x55b4c2+'\x27];\x0a\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20text\x20fields\x0a\x20\x20\x20\x20const\x20validTextFields\x20=\x20this.validFields.filter(field\x20=>\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27name\x27)\x20||\x20field.includes(\x27nama\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27code\x27)\x20||\x20field.includes(\x27kode\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20field.includes(\x27text\x27)\x20||\x20field.includes(\x27title\x27)\x0a\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x3c06dc+'\x27;\x0a\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0x55b4c2+'\x27;\x0a\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x3c06dc+_0x5210a3(0x178)+(_0x2d17e9?'WHERE\x20'+_0x2d17e9+'\x20':'')+_0x5210a3(0x187)+(_0x2d17e9?_0x5a4732['JOqvP']:'WHERE\x20')+'${whereResult.sql}'+(_0x2d17e9?')':'')+_0x5210a3(0x1dd)+_0x3c06dc+',\x0a\x20\x20\x20\x20\x20\x20text:\x20item[aliasField\x20||\x20textField]\x20||\x20item.'+_0x55b4c2+'\x20||\x20\x27\x27\x0a\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20//\x20Cache\x20the\x20result\x0a\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a\x0a/**\x0a\x20*\x20Build\x20advanced\x20filter\x20conditions\x20untuk\x20MySQL\x0a\x20*\x20@param\x20{Array}\x20filters\x20-\x20Array\x20of\x20{column,\x20type,\x20value,\x20value2}\x0a\x20*\x20@returns\x20{Object}\x20{sql,\x20params}\x0a\x20*/\x0abuildAdvancedFilterCondition(filters)\x20{\x0a\x20\x20if\x20(!filters\x20||\x20!Array.isArray(filters)\x20||\x20filters.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20const\x20params\x20=\x20[];\x0a\x0a\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20const\x20{\x20column,\x20type,\x20value,\x20value2\x20}\x20=\x20filter;\x0a\x0a\x20\x20\x20\x20if\x20(!column\x20||\x20!this.validFields.includes(column))\x20continue;\x0a\x0a\x20\x20\x20\x20switch\x20(type)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<>\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_contains\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_like\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20NOT\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27starts_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`${value}%`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27ends_with\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20LIKE\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(`%${value}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_than\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27greater_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20>=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27less_equal\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20<=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20BETWEEN\x20?\x20AND\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20inPlaceholders\x20=\x20value.map(()\x20=>\x20\x27?\x27).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IN\x20(${inPlaceholders})`);\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\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27not_in\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20notInPlaceholders\x20=\x20value.map(()\x20=>\x20\x27?\x27).join(\x27,\x20\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20NOT\x20IN\x20(${notInPlaceholders})`);\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\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27is_not_null\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20IS\x20NOT\x20NULL`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_equals\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20=\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_between\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20BETWEEN\x20?\x20AND\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value,\x20value2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_after\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20>\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date_before\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`DATE(${column})\x20<\x20?`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(conditions.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20return\x20{\x20sql:\x20\x27\x27,\x20params:\x20[]\x20};\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x20sql:\x20conditions.join(\x27\x20AND\x20\x27),\x20params\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Escape\x20value\x20untuk\x20MySQL\x20SQL\x20(sanitization)\x0a\x20*/\x0aescapeValue(value)\x20{\x0a\x20\x20if\x20(value\x20===\x20null\x20||\x20value\x20===\x20undefined)\x20return\x20null;\x0a\x20\x20if\x20(typeof\x20value\x20===\x20\x27number\x27)\x20return\x20value;\x0a\x20\x20return\x20String(value).replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a}\x0a\x0a/**\x0a\x20*\x20Validasi\x20data\x20sebelum\x20insert/update\x0a\x20*/\x0aasync\x20validateData(data,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20isValid:\x20true,\x0a\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20sanitizedData:\x20{}\x0a\x20\x20};\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20hasFieldValidation\x20=\x20this.validationConfig\x20&&\x20Object.keys(this.validationConfig).length\x20>\x200;\x0a\x0a\x20\x20\x20\x20if\x20(hasFieldValidation)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Loop\x20semua\x20field\x20yang\x20ada\x20di\x20validationConfig\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20value\x20=\x20data[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20value\x20jika\x20autoGenerate\x20dan\x20nilai\x20kosong.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20dan\x20uuid\x20diperlakukan\x20sama:\x20UUID\x20v7\x20via\x20uuid\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20lintas\x20dialect;\x20cocok\x20dengan\x20konvensi\x20payload\x20category.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20yang\x20memakai\x20type:\x20\x22string\x22\x20dengan\x20constraint\x20autoGenerate\x20+\x20primaryKey).\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20constraints.autoGenerate\x20&&\x20(!value\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27uuid\x27\x20||\x20config.type\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\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//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20\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\x20\x20\x20\x20\x20if\x20(constraints.required)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\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//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\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\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\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\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Boolean\x20field:\x20di\x20MySQL\x20disimpan\x20sebagai\x20VARCHAR(5)\x20\x27true\x27/\x27false\x27.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Terima\x20true/\x27true\x27/1/\x271\x27\x20dan\x20false/\x27false\x27/0/\x270\x27,\x20simpan\x20sebagai\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20string\x20\x27true\x27/\x27false\x27\x20agar\x20cocok\x20dengan\x20kolom\x20VARCHAR\x20+\x20CHECK.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20boolVal;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20true\x20||\x20value\x20===\x20\x27true\x27\x20||\x20value\x20===\x201\x20||\x20value\x20===\x20\x271\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boolVal\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(value\x20===\x20false\x20||\x20value\x20===\x20\x27false\x27\x20||\x20value\x20===\x200\x20||\x20value\x20===\x20\x270\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boolVal\x20=\x20false;\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\x20result.errors.push(constraints.typeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20boolVal\x20?\x20\x27true\x27\x20:\x20\x27false\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20field:\x20hash\x20constraint\x20support\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27string\x27\x20&&\x20typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fieldErrors\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Pattern\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`);\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Format\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.format\x20===\x20\x27email\x27\x20&&\x20!/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fieldErrors.push(constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20email\x20format`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldErrors.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...fieldErrors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isHashField\x20&&\x20fieldErrors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20sanitized;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Non-string\x20field:\x20basic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\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//\x20Validate\x20field\x20yang\x20tidak\x20ada\x20di\x20validationConfig\x20(backward\x20compatibility)\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validationConfig[field]\x20&&\x20data[field]\x20!==\x20undefined\x20&&\x20data[field]\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data[field]\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20data[field].trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\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\x20result.sanitizedData[field]\x20=\x20data[field];\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}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20Tidak\x20ada\x20fieldValidation\x20-\x20gunakan\x20generic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20data[field];\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\x20if\x20(typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20value.trim().replace(/\x5c0/g,\x20\x27\x27).substring(0,\x204000);\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\x20result.sanitizedData[field]\x20=\x20value;\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20result.errors.push(`Validation\x20error:\x20${error.message}`);\x0a\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20}\x0a\x0a\x20\x20return\x20result;\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20field\x20mapping\x20information\x0a\x20*/\x0agetFieldMapping()\x20{\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20allFields:\x20this.validFields,\x0a\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20textFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27name\x27)\x20||\x20f.includes(\x27nama\x27)\x20||\x20f.includes(\x27description\x27)),\x0a\x20\x20\x20\x20dateFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27date\x27)\x20||\x20f.includes(\x27time\x27)),\x0a\x20\x20\x20\x20numericFields:\x20this.validFields.filter(f\x20=>\x20f.includes(\x27amount\x27)\x20||\x20f.includes(\x27price\x27)\x20||\x20f.includes(\x27count\x27))\x0a\x20\x20};\x0a}\x0a\x0a/**\x0a\x20*\x20Get\x20MySQL\x20connection\x20info\x20untuk\x20health\x20check\x0a\x20*/\x0aasync\x20getConnectionInfo()\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20db.executeQuery(\x27SELECT\x201\x20as\x20test_con\x27);\x0a\x20\x20\x20\x20if\x20(result\x20&&\x20result.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20connected:\x20true,\x20database:\x20\x27MySQL\x27,\x20retrievedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20null;\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20return\x20{\x20connected:\x20false,\x20error:\x20error.message,\x20checkedAt:\x20new\x20Date().toISOString()\x20};\x0a\x20\x20}\x0a}\x0a'+((()=>{const _0x47c83f=_0x5210a3,_0x227779=_0x456a90[_0x47c83f(0x12f)]&&_0x456a90[_0x47c83f(0x12f)]['enabled'],_0x165e1c=_0x456a90['action']||{};if(!_0x227779||!_0x165e1c['createComposite']&&!_0x165e1c[_0x47c83f(0x173)]&&!_0x165e1c[_0x47c83f(0x118)])return'';const _0x5df71a=_0x456a90[_0x47c83f(0x12f)][_0x47c83f(0x125)],_0x40901c=_0x5df71a['split']('.')[_0x47c83f(0x221)](),_0xc3ec28=_0x456a90[_0x47c83f(0x12f)][_0x47c83f(0x174)],_0x45814b=_0x456a90[_0x47c83f(0x12f)]['detailConfig']?.[_0x47c83f(0x1e5)]||_0x40901c+'_id',_0x928466=_0x456a90['masterDetail']['headerCalculations']||null,_0x93665a=_0x456a90['masterDetail']['detailConfig']?.[_0x47c83f(0x248)]||{},_0x48726f=_0x456a90[_0x47c83f(0x12f)]['detailConfig']?.[_0x47c83f(0x24b)]||null,_0x15115b=[],_0x34c96c=[];for(const [_0x29ae1e,_0x1d5405]of Object[_0x47c83f(0x1ab)](_0x93665a)){if(_0x1d5405['type']===_0x5a4732[_0x47c83f(0x126)])_0x15115b[_0x47c83f(0x1f0)](_0x29ae1e);else{const _0x79ce4a=(_0x1d5405[_0x47c83f(0x122)]||'')[_0x47c83f(0x20e)]('*')['map'](_0x443637=>_0x443637['trim']());_0x34c96c[_0x47c83f(0x1f0)]({'fieldName':_0x29ae1e,'qtyField':_0x79ce4a[0x0],'priceField':_0x79ce4a[0x1]});}}const _0xbe10ca=_0x93665a['total_amount']?.[_0x47c83f(0x122)]||'',_0x1dea82=_0xbe10ca['split']('*')[_0x47c83f(0x1a5)](_0x3b8cd5=>_0x3b8cd5['trim']()),_0x5cbafb=_0x928466?.['total_qty']?.[_0x47c83f(0x1ae)]?.[_0x47c83f(0x1be)](_0x5a4732[_0x47c83f(0x223)],'')||'',_0x36e614=_0x1dea82[0x0]||_0x5cbafb,_0x43b591=_0x1dea82[0x1]||'unit_price',_0x382ab8=_0x34c96c['map'](_0x3fa746=>{const _0x51a0b0=_0x47c83f;return'\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x3fa746[_0x51a0b0(0x229)]+'\x20=\x20'+_0x3fa746['qtyField']+'\x20*\x20'+_0x3fa746['priceField']+_0x51a0b0(0x243)+_0x3fa746[_0x51a0b0(0x229)]+'\x20=\x20(Number(item.'+_0x3fa746['qtyField']+_0x51a0b0(0x24d)+_0x3fa746[_0x51a0b0(0x1b0)]+_0x51a0b0(0x21f);})['join']('\x0a');let _0xa6e509='';_0x165e1c[_0x47c83f(0x19b)]&&(_0xa6e509+='\x0a/**\x0a\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x20(MySQL)\x0a\x20*/\x0aasync\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20const\x20connection\x20=\x20await\x20db.getConnection();\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20await\x20connection.beginTransaction();\x0a\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x40901c+_0x47c83f(0x192)+_0x456a90[_0x47c83f(0x1c6)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5df71a+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0xc3ec28+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeResult\x20=\x20await\x20_ce.executeOnBeforeComposite(\x27insert\x27,\x20_beforeCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onBeforeCompositeInsert\x20failed:\x20\x27\x20+\x20_beforeResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20header\x20INSERT\x0a\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerPlaceholders.push(\x27?\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(created_at,\x20created_by,\x20updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20this._appendCreateAuditColumns(headerFields,\x20headerValues,\x20headerPlaceholders,\x20headerData,\x20eventContext);\x0a\x0a\x20\x20\x20\x20const\x20insertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20(\x27\x20+\x20headerFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20headerPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20console.log(\x27Executing\x20header\x20INSERT:\x27,\x20{\x20query:\x20insertSql,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20await\x20connection.execute(insertSql,\x20headerValues);\x0a\x0a\x20\x20\x20\x20//\x20SELECT\x20back\x20inserted\x20header\x0a\x20\x20\x20\x20const\x20selectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20const\x20[headerRows]\x20=\x20await\x20connection.execute(selectSql,\x20[headerData[this.primaryKey]]);\x0a\x20\x20\x20\x20const\x20insertedHeader\x20=\x20headerRows[0];\x0a\x20\x20\x20\x20const\x20masterPkValue\x20=\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20console.log(\x27Header\x20inserted\x20successfully:\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27=\x27\x20+\x20masterPkValue);\x0a\x0a\x20\x20\x20\x20//\x20Insert\x20detail\x20items\x0a\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x20\x20\x20\x20const\x20detailTableFull\x20=\x20\x27'+_0x5df71a+_0x47c83f(0x170)+_0xc3ec28+'\x27;\x0a\x20\x20\x20\x20const\x20detailPk\x20=\x20\x27'+_0x45814b+'\x27;\x0a\x20\x20\x20\x20'+(_0x15115b['length']>0x0?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x15115b)+';':'')+_0x47c83f(0x12e)+(_0x382ab8?'\x0a'+_0x382ab8+'\x0a':'')+_0x47c83f(0x12c)+(_0x5a4732['utVap'](_0x15115b['length'],0x0)?'if\x20(generatedFields.includes(key))\x20continue;':'')+_0x47c83f(0x11a)+_0x456a90['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5df71a+_0x47c83f(0x151)+_0xc3ec28+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_afterResult\x20=\x20await\x20_ce2.executeOnAfterComposite(\x27insert\x27,\x20_afterCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onAfterCompositeInsert\x20failed:\x20\x27\x20+\x20_afterResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20await\x20connection.commit();\x0a\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20...insertedHeader,\x0a\x20\x20\x20\x20\x20\x20[detailKey]:\x20insertedItems\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.rollback();\x20}\x20catch\x20(rbErr)\x20{\x20console.error(\x27Rollback\x20failed:\x27,\x20rbErr.message);\x20}\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20createComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20try\x20{\x20connection.release();\x20}\x20catch\x20(relErr)\x20{\x20console.error(\x27Connection\x20release\x20failed:\x27,\x20relErr.message);\x20}\x0a\x20\x20}\x0a}\x0a');_0x165e1c[_0x47c83f(0x173)]&&(_0xa6e509+='\x0a/**\x0a\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(MySQL)\x0a\x20*/\x0aasync\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20const\x20connection\x20=\x20await\x20db.getConnection();\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20await\x20connection.beginTransaction();\x0a\x0a\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Primary\x20key\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20is\x20required\x20for\x20update\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20const\x20checkSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20const\x20[checkRows]\x20=\x20await\x20connection.execute(checkSql,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20if\x20(!checkRows\x20||\x20checkRows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20oldData\x20=\x20checkRows[0];\x0a\x0a\x20\x20\x20\x20//\x20Extract\x20header\x20data\x0a\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x40901c+'\x27;\x0a\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeCtx\x20=\x20_CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20_detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20update:\x20_detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20_detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x456a90['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5df71a+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0xc3ec28+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_beforeResult\x20=\x20await\x20_ce.executeOnBeforeComposite(\x27update\x27,\x20_beforeCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onBeforeCompositeUpdate\x20failed:\x20\x27\x20+\x20_beforeResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x0a\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key\x20+\x20\x27\x20=\x20?\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20base-model\x20helper.\x0a\x20\x20\x20\x20//\x20Helper\x20menangani\x20kolom\x20yang\x20benar-benar\x20ada\x20(this.auditColumns);\x20bila\x20tabel\x0a\x20\x20\x20\x20//\x20tidak\x20punya\x20audit\x20columns,\x20helper\x20no-op.\x0a\x20\x20\x20\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext);\x0a\x0a\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20const\x20updateSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20headerFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20updateSql,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20await\x20connection.execute(updateSql,\x20headerValues);\x0a\x0a\x20\x20\x20\x20//\x20SELECT\x20back\x20updated\x20header\x0a\x20\x20\x20\x20const\x20selectSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20const\x20[headerRows]\x20=\x20await\x20connection.execute(selectSql,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20let\x20updatedHeader\x20=\x20headerRows[0];\x0a\x0a\x20\x20\x20\x20//\x20Process\x20detail\x20items\x0a\x20\x20\x20\x20const\x20detailTableFull\x20=\x20\x27'+_0x5df71a+_0x47c83f(0x170)+_0xc3ec28+'\x27;\x0a\x20\x20\x20\x20const\x20detailPk\x20=\x20\x27'+_0x45814b+_0x47c83f(0x251)+(_0x5a4732[_0x47c83f(0x132)](_0x15115b[_0x47c83f(0x1b2)],0x0)?_0x47c83f(0x130)+JSON[_0x47c83f(0x257)](_0x15115b)+';':'')+_0x47c83f(0x1ac)+(_0x382ab8?_0x5a4732[_0x47c83f(0x13e)]('\x0a',_0x382ab8)+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20const\x20dFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20dValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(key\x20===\x20detailPk)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5a4732[_0x47c83f(0x132)](_0x15115b[_0x47c83f(0x1b2)],0x0)?_0x47c83f(0x19f):'')+'\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\x20dFields.push(key\x20+\x20\x27\x20=\x20?\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dValues.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)\x20untuk\x20detail\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20this._appendUpdateAuditColumns(dFields,\x20dValues,\x20item,\x20eventContext);\x0a\x0a\x20\x20\x20\x20\x20\x20dValues.push(item[detailPk]);\x0a\x20\x20\x20\x20\x20\x20const\x20dUpdateSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20SET\x20\x27\x20+\x20dFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20detailPk\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(dUpdateSql,\x20dValues);\x0a\x20\x20\x20\x20\x20\x20updatedItems.push(item);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20console.log(\x27Updated\x20\x27\x20+\x20updatedItems.length\x20+\x20\x27\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x203.\x20INSERT\x20operations\x0a\x20\x20\x20\x20for\x20(const\x20item\x20of\x20insertItems)\x20{\x0a\x20\x20\x20\x20\x20\x20item[fk]\x20=\x20primaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply\x0a\x20\x20\x20\x20\x20\x20//\x20(sama\x20seperti\x20di\x20createComposite;\x20konsisten\x20dengan\x20kolom\x20VARCHAR\x0a\x20\x20\x20\x20\x20\x20//\x20DEFAULT\x20(UUID()))\x0a\x20\x20\x20\x20\x20\x20if\x20(item[detailPk]\x20===\x20undefined\x20||\x20item[detailPk]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[detailPk]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20}\x0a'+(_0x382ab8?_0x5a4732[_0x47c83f(0x13e)](_0x5a4732['UwtjS']('\x0a',_0x382ab8),'\x0a'):'')+_0x47c83f(0x239)+(_0x15115b['length']>0x0?'if\x20(generatedFields.includes(key))\x20continue;':'')+'\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\x20dFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20dPlaceholders.push(\x27?\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//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20(detail\x20baru\x20dari\x20updateComposite)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20this._appendCreateAuditColumns(dFields,\x20dValues,\x20dPlaceholders,\x20item,\x20eventContext);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20dInsertSql\x20=\x20\x27INSERT\x20INTO\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20(\x27\x20+\x20dFields.join(\x27,\x20\x27)\x20+\x20\x27)\x20VALUES\x20(\x27\x20+\x20dPlaceholders.join(\x27,\x20\x27)\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(dInsertSql,\x20dValues);\x0a\x20\x20\x20\x20\x20\x20insertedItems.push(item);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20console.log(\x27Inserted\x20\x27\x20+\x20insertedItems.length\x20+\x20\x27\x20new\x20detail\x20item(s)\x27);\x0a\x0a\x20\x20\x20\x20//\x20Get\x20all\x20current\x20detail\x20items\x0a\x20\x20\x20\x20const\x20allItemsSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20detailTableFull\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20fk\x20+\x20\x27\x20=\x20?\x20ORDER\x20BY\x20line_number\x27;\x0a\x20\x20\x20\x20const\x20[allItems]\x20=\x20await\x20connection.execute(allItemsSql,\x20[primaryKeyValue]);\x0a'+(_0x928466?_0x47c83f(0x133)+JSON['stringify'](_0x928466)+_0x47c83f(0x17c)+(_0x36e614?'if\x20(calculations.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalAmount\x20=\x20allItems.reduce(function(sum,\x20item)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20qty\x20=\x20Number(item.'+_0x36e614+_0x47c83f(0x1ba)+_0x43b591+')\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\x20\x20recalcFields.push(\x27total_amount\x20=\x20?\x27);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(totalAmount);\x0a\x20\x20\x20\x20}':_0x47c83f(0x244))+'\x0a\x0a\x20\x20\x20\x20if\x20(recalcFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20recalculation\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20this._appendUpdateAuditColumns(recalcFields,\x20recalcValues,\x20data,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20recalcValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20var\x20recalcSql\x20=\x20\x27UPDATE\x20\x27\x20+\x20this.writeSource\x20+\x20\x27\x20SET\x20\x27\x20+\x20recalcFields.join(\x27,\x20\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20this.primaryKey\x20+\x20\x27\x20=\x20?\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcSql,\x20values:\x20recalcValues\x20});\x0a\x20\x20\x20\x20\x20\x20await\x20connection.execute(recalcSql,\x20recalcValues);\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20[recalcRows]\x20=\x20await\x20connection.execute(selectSql,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20\x20\x20updatedHeader\x20=\x20recalcRows[0];\x0a\x20\x20\x20\x20}\x0a':'')+'\x0a\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeUpdate\x20---\x0a\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20_ce2\x20=\x20eventContext.componentEngine;\x0a\x20\x20\x20\x20\x20\x20var\x20_CB2\x20=\x20eventContext.ContextBuilder;\x0a\x20\x20\x20\x20\x20\x20var\x20_afterCtx\x20=\x20_CB2.buildCompositeUpdateAfterContext(headerData,\x20oldData,\x20updatedHeader,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems\x0a\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x456a90['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5df71a+_0x47c83f(0x151)+_0xc3ec28+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20var\x20_afterResult\x20=\x20await\x20_ce2.executeOnAfterComposite(\x27update\x27,\x20_afterCtx);\x0a\x20\x20\x20\x20\x20\x20if\x20(!_afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20connection.rollback();\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27onAfterCompositeUpdate\x20failed:\x20\x27\x20+\x20_afterResult.error);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20await\x20connection.commit();\x0a\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20...updatedHeader,\x0a\x20\x20\x20\x20\x20\x20[detailKey]:\x20allItems,\x0a\x20\x20\x20\x20\x20\x20_operations:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems.length\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20try\x20{\x20await\x20connection.rollback();\x20}\x20catch\x20(rbErr)\x20{\x20console.error(\x27Rollback\x20failed:\x27,\x20rbErr.message);\x20}\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20updateComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20try\x20{\x20connection.release();\x20}\x20catch\x20(relErr)\x20{\x20console.error(\x27Connection\x20release\x20failed:\x27,\x20relErr.message);\x20}\x0a\x20\x20}\x0a}\x0a');if(_0x165e1c['readComposite']){let _0x26cffa;_0x48726f?_0x26cffa='const\x20detailSql\x20=\x20`'+_0x48726f[_0x47c83f(0x1be)](/\$1/g,'?')+'`;':_0x26cffa='const\x20detailSql\x20=\x20\x27SELECT\x20*\x20FROM\x20'+_0x5df71a+_0x47c83f(0x11e)+_0xc3ec28+_0x47c83f(0x14c),_0xa6e509+='\x0a/**\x0a\x20*\x20Composite\x20read\x20-\x20Read\x20header\x20with\x20detail\x20items\x20(MySQL)\x0a\x20*/\x0aasync\x20readComposite(options)\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20if\x20(!options.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\x20let\x20whereClauseResult;\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20whereClauseResult\x20=\x20this.buildComplexWhereClause(options.where);\x0a\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20const\x20{\x20sql:\x20whereClause,\x20params\x20}\x20=\x20whereClauseResult;\x0a\x20\x20\x20\x20const\x20headerSql\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20const\x20headerResults\x20=\x20await\x20db.executeQuery(headerSql,\x20params);\x0a\x0a\x20\x20\x20\x20if\x20(!headerResults\x20||\x20headerResults.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{\x20success:\x20true,\x20count:\x200,\x20data:\x20[]\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20compositeResults\x20=\x20[];\x0a\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x40901c+'\x27;\x0a\x20\x20\x20\x20'+_0x26cffa+'\x0a\x0a\x20\x20\x20\x20for\x20(const\x20header\x20of\x20headerResults)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20pkValue\x20=\x20header[this.primaryKey];\x0a\x20\x20\x20\x20\x20\x20const\x20detailResults\x20=\x20await\x20db.executeQuery(detailSql,\x20[pkValue]);\x0a\x20\x20\x20\x20\x20\x20compositeResults.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20...header,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20detailResults\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\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20compositeResults.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20compositeResults\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20readComposite:\x27,\x20error);\x0a\x20\x20\x20\x20throw\x20error;\x0a\x20\x20}\x0a}\x0a';}return _0xa6e509;})())+_0x5210a3(0x20b)+_0x2eec35+'Model();';}function createMysqlSubmoduleTemplate(_0x31c1ea,_0x9eedd4,_0x20e6c9){const _0x27deb1=a0_0x3092,_0x63e4db={'Qksio':function(_0x392eca,_0x4d32ee){return _0x392eca>_0x4d32ee;},'aVpwu':_0x27deb1(0x172),'wKGTf':'update_existing','Ncccw':function(_0x52c153,_0x1a1c5f){return _0x52c153(_0x1a1c5f);},'WirEJ':function(_0x4f4874,_0x640fd7,_0x14da98){return _0x4f4874(_0x640fd7,_0x14da98);},'jFgLf':_0x27deb1(0x190),'yxmTF':'items.','bWUCE':_0x27deb1(0x21a),'UXAVx':function(_0x29ce36,_0x37f570){return _0x29ce36!==_0x37f570;}},_0x1a7ac5=toCamelCase(_0x9eedd4)+_0x27deb1(0x166),_0x18288b=_0x20e6c9[_0x27deb1(0x1e5)]||'id',_0x2215be=new Date()[_0x27deb1(0x194)](),_0x13f286=Object['entries'](_0x20e6c9[_0x27deb1(0x1ed)]||{})['filter'](([,_0x3284c0])=>_0x3284c0)[_0x27deb1(0x1a5)](([_0x36ed24])=>_0x36ed24),_0x56f618=_0x20e6c9['components']&&Array['isArray'](_0x20e6c9['components'])&&_0x63e4db['Qksio'](_0x20e6c9['components'][_0x27deb1(0x1b2)],0x0),_0x1ff4aa=_0x20e6c9[_0x27deb1(0x245)]||'SELECT\x20'+_0x20e6c9[_0x27deb1(0x229)]['join'](',\x20')+'\x20FROM\x20'+_0x20e6c9[_0x27deb1(0x1c6)],_0x3b5d9b=_0x1ff4aa['replace'](/\\/g,'\x5c\x5c')['replace'](/'/g,'\x5c\x27'),_0x4a1a5d=JSON['stringify'](_0x20e6c9[_0x27deb1(0x229)]),_0x2ce864=_0x20e6c9[_0x27deb1(0x134)]?JSON[_0x27deb1(0x257)](_0x20e6c9['columnFormats']):_0x63e4db[_0x27deb1(0x1e7)],_0x25e46b=_0x20e6c9['fieldLabels']?JSON[_0x27deb1(0x257)](_0x20e6c9[_0x27deb1(0x23c)]):_0x27deb1(0x172),_0x52c919=(_0x20e6c9['uniqueConstraints']||[])[_0x27deb1(0x135)](_0x426ace=>_0x426ace&&typeof _0x426ace['name']===_0x27deb1(0x1c4)&&Array['isArray'](_0x426ace['fields'])&&_0x426ace[_0x27deb1(0x238)]['length']>0x0)['map'](_0x2a130a=>[_0x2a130a[_0x27deb1(0x16a)][_0x27deb1(0x1fc)](),_0x2a130a[_0x27deb1(0x238)]]),_0x8bb789=JSON[_0x27deb1(0x257)](Object['fromEntries'](_0x52c919)),_0x5f56d5=_0x20e6c9['action']&&_0x20e6c9['action'][_0x27deb1(0x13d)]?{'enabled':!![],'upsertKeys':(_0x20e6c9['importConfig']||{})['upsertKeys']||[_0x18288b],'upsertStrategy':(_0x20e6c9['importConfig']||{})['upsertStrategy']||_0x63e4db[_0x27deb1(0x22e)],'requiredFields':(_0x20e6c9[_0x27deb1(0x1a6)]||{})[_0x27deb1(0x1ee)]||[],'validations':(_0x20e6c9['importConfig']||{})[_0x27deb1(0x1bd)]||{},'lookupFields':(_0x20e6c9['importConfig']||{})[_0x27deb1(0x18f)]||{},'excludeFromImport':(_0x20e6c9['importConfig']||{})['excludeFromImport']||[],'chunkSize':(_0x20e6c9['importConfig']||{})['chunkSize']||0x64}:null,_0x52a59e=_0x5f56d5?JSON[_0x27deb1(0x257)](_0x5f56d5):_0x27deb1(0x172),_0x3b1619=_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9['action'][_0x27deb1(0x1e8)]?'\x27'+_0x3b5d9b+'\x27':'null',_0x9c2021=_0x20e6c9['action']&&_0x20e6c9['action'][_0x27deb1(0x1b1)]?_0x20e6c9['adjustConfig']||{}:null,_0x20664e=_0x9c2021?JSON[_0x27deb1(0x257)](_0x9c2021):_0x27deb1(0x172),_0x350895=_0x20e6c9['fieldPolicy']?',\x20'+JSON[_0x27deb1(0x257)](_0x20e6c9[_0x27deb1(0x1c5)]):'';let _0x39c479='let\x20componentEngine\x20=\x20null;\x0alet\x20ContextBuilder\x20=\x20null;\x0a';_0x56f618&&(_0x39c479+=_0x27deb1(0x16c),_0x39c479+='ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a');const _0x223122=_0x20e6c9['requestScope']?_0x27deb1(0x1e2)+_0x1a7ac5+'.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'+_0x9eedd4+_0x27deb1(0x153):'',_0x537a56=_0x20e6c9['requestScope']?_0x27deb1(0x227)+_0x9eedd4+_0x27deb1(0x114):'',_0x4bf635=_0x20e6c9[_0x27deb1(0x18c)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x20—\x20master\x20record\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x23e)+_0x18288b+'\x27,\x20value:\x20data.'+_0x18288b+_0x27deb1(0x225):'';let _0x18aa1d='const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x1a7ac5+_0x27deb1(0x215)+_0x31c1ea+'/'+_0x9eedd4+'\x27);\x0a\x0a//\x20Issue\x20#13:\x20map\x20nama\x20constraint\x20(lowercase,\x20tanpa\x20prefix)\x20->\x20field\x20penyebab\x20konflik,\x0a//\x20ditanam\x20dari\x20payload.uniqueConstraints\x20saat\x20codegen.\x20Map\x20kosong\x20{}\x20bila\x20payload\x20tidak\x0a//\x20membawa\x20uniqueConstraints\x20(semua\x20lookup\x20miss\x20->\x20fallback\x20omit\x20`details`).\x0aconst\x20DUP_CONSTRAINT_FIELDS\x20=\x20'+_0x8bb789+_0x27deb1(0x1d6)+_0x39c479+'\x0a/**\x0a*\x20'+_0x63e4db['Ncccw'](toPascalCase,_0x9eedd4)+_0x27deb1(0x254)+_0x2215be+'\x0a*\x0a*\x20MySQL-optimized\x20endpoints\x20untuk\x20'+_0x9eedd4+_0x27deb1(0x17b)+_0x13f286[_0x27deb1(0x1e6)](',\x20')+'\x0a*\x20Table:\x20'+_0x20e6c9[_0x27deb1(0x1c6)]+_0x27deb1(0x217)+_0x18288b+_0x27deb1(0x214)+_0x20e6c9['tableName']+'\x27,\x0a\x20\x20fieldName:\x20'+_0x4a1a5d+',\x0a\x20\x20exportQuery:\x20'+_0x3b1619+',\x0a\x20\x20columnFormats:\x20'+_0x2ce864+',\x0a\x20\x20fieldLabels:\x20'+_0x25e46b+_0x27deb1(0x164)+_0x52a59e+',\x0a\x20\x20adjustConfig:\x20'+_0x20664e+_0x27deb1(0x189)+(_0x20e6c9[_0x27deb1(0x1a8)]?JSON[_0x27deb1(0x257)](_0x20e6c9['uploadConfig']):_0x27deb1(0x172))+',\x0a\x20\x20requestScope:\x20'+(_0x20e6c9['requestScope']?JSON[_0x27deb1(0x257)](_0x20e6c9['requestScope']):_0x63e4db['aVpwu'])+'\x0a};\x0a'+(_0x56f618?_0x27deb1(0x20a)+JSON['stringify'](_0x20e6c9['components'])+_0x27deb1(0x1d5)+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x1ea)+_0x31c1ea+'/'+_0x9eedd4+':`,\x20err.message);\x0a});\x0a':'')+_0x27deb1(0x252)+_0x18288b+_0x27deb1(0x159);_0x18aa1d+=_0x63e4db[_0x27deb1(0x1d7)](buildRequestScopeMiddleware,_0x20e6c9,_0x9eedd4);_0x20e6c9['action']&&_0x20e6c9['action'][_0x27deb1(0x147)]&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x241)+_0x1a7ac5+_0x27deb1(0x143)+_0x9eedd4+'\x20datatables:\x27,\x20error);\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'+_0x9eedd4+_0x27deb1(0x247));_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9[_0x27deb1(0x1ed)]['lookup']&&(_0x18aa1d+='//\x20GET\x20/api/'+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x188)+_0x1a7ac5+'.validFields.includes(key)\x20&&\x20value)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20extraFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20const\x20list\x20=\x20Object.keys(extraFilters).length\x20>\x200\x20?\x0a\x20\x20\x20\x20\x20\x20await\x20'+_0x1a7ac5+_0x27deb1(0x160)+_0x1a7ac5+'.getLookupData(search);\x0a\x20\x20\x20\x20const\x20lookupTime\x20=\x20Date.now()\x20-\x20startTime;\x0a\x0a\x20\x20\x20\x20console.log(`[MySQL-LKP]\x20${mysqlRequestId}\x20found\x20${list.length}\x20results\x20in\x20${lookupTime}ms`);\x0a\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\x20_mysql:\x20{\x20requestId:\x20mysqlRequestId,\x20queryTime:\x20lookupTime,\x20timestamp:\x20new\x20Date().toISOString()\x20}\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`[MySQL-LKP]\x20Error\x20${mysqlRequestId}:`,\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'+_0x9eedd4+_0x27deb1(0x14f));_0x20e6c9['action']&&_0x20e6c9[_0x27deb1(0x1ed)]['lookup']&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+'/lookup\x20-\x20MySQL\x20Static\x20Lookup\x0arouter.post(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20const\x20mysqlRequestId\x20=\x20req.mysqlRequestId;\x0a\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\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\x20lookup\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\x20console.log(`[MySQL-LKP]\x20${mysqlRequestId}\x20static\x20lookup:`,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20const\x20startTime\x20=\x20Date.now();\x0a\x20\x20\x20\x20let\x20list;\x0a\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20New\x20format\x20dengan\x20where\x20clause\x20+\x20optional\x20select\x20dan\x20order\x0a\x20\x20\x20\x20\x20\x20list\x20=\x20await\x20'+_0x1a7ac5+'.getLookupDataWithFilter(req.body);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Legacy\x20format\x20dengan\x20selected_tag\x0a\x20\x20\x20\x20\x20\x20const\x20selectedTag\x20=\x20req.body.selected_tag\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20list\x20=\x20await\x20'+_0x1a7ac5+'.getStaticLookupData(selectedTag);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20lookupTime\x20=\x20Date.now()\x20-\x20startTime;\x0a\x20\x20\x20\x20console.log(`[MySQL-LKP]\x20${mysqlRequestId}\x20found\x20${list.length}\x20results\x20in\x20${lookupTime}ms`);\x0a\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\x20_mysql:\x20{\x20requestId:\x20mysqlRequestId,\x20queryTime:\x20lookupTime,\x20timestamp:\x20new\x20Date().toISOString()\x20}\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(`[MySQL-LKP]\x20Error\x20${mysqlRequestId}:`,\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'+_0x9eedd4+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a');_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9[_0x27deb1(0x1ed)][_0x27deb1(0x185)]&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x177)+_0x1a7ac5+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x1b4)+(_0x56f618?'\x0a\x20\x20\x20\x20//\x20Component\x20engine:\x20build\x20eventContext\x20untuk\x20model-level\x20event\x20lifecycle\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'+_0x20e6c9[_0x27deb1(0x1c6)]+_0x27deb1(0x196)+_0x1a7ac5+_0x27deb1(0x19c)+_0x1a7ac5+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\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':_0x27deb1(0x13f)+_0x1a7ac5+_0x27deb1(0x16e))+'\x0a\x20\x20\x20\x20console.log(`'+_0x9eedd4+_0x27deb1(0x15c)+_0x18288b+'\x20||\x20\x27new\x20record\x27}`);\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'+_0x9eedd4+'\x20data\x20successfully\x20added\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\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menambahkan\x20data\x20'+_0x9eedd4+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27ER_DUP_ENTRY\x27\x20||\x20error.errno\x20===\x201062)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\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\x27ER_NO_REFERENCED_ROW_2\x27\x20||\x20error.errno\x20===\x201452)\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\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'+_0x9eedd4+_0x27deb1(0x247));_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9['action'][_0x27deb1(0x203)]&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x218)+_0x18288b+'\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\x20update`,\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'+_0x223122+'\x0a\x20\x20\x20\x20//\x20Validasi\x20data\x20dengan\x20model\x20jika\x20tersedia\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x1a7ac5+_0x27deb1(0x156)+_0x1a7ac5+'.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\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a'+(_0x56f618?_0x27deb1(0x1fd)+_0x20e6c9[_0x27deb1(0x1c6)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\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\x20options:\x20req.bodyOptions\x20||\x20{}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x17e)+_0x350895+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':_0x27deb1(0x154)+_0x1a7ac5+_0x27deb1(0x1b8)+_0x350895+_0x27deb1(0x200))+_0x27deb1(0x21b)+_0x9eedd4+'\x20data\x20updated\x20successfully:\x20'+_0x18288b+'=${req.body[\x27'+_0x18288b+'\x27]}`);\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'+_0x9eedd4+_0x27deb1(0x1a7)+_0x9eedd4+_0x27deb1(0x246)+_0x9eedd4+_0x27deb1(0x1ce)+_0x9eedd4+_0x27deb1(0x247));_0x20e6c9['action']&&_0x20e6c9[_0x27deb1(0x1ed)]['adjust']&&(_0x18aa1d+='//\x20POST\x20/api/'+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x16f)+_0x18288b+_0x27deb1(0x24e)+_0x223122+_0x27deb1(0x230)+(_0x56f618?'\x0a\x20\x20\x20\x20//\x20Integrated\x20transaction\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x20e6c9[_0x27deb1(0x1c6)]+_0x27deb1(0x11f)+_0x1a7ac5+_0x27deb1(0x23d)+_0x350895+_0x27deb1(0x199):'\x0a\x20\x20\x20\x20//\x20Fallback:\x20mode\x20tanpa\x20events\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x1a7ac5+'.adjustData(req.body,\x20adjustConfig,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20}'+_0x350895+');\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+_0x27deb1(0x15e)+_0x9eedd4+_0x27deb1(0x186)+_0x18288b+_0x27deb1(0x119)+_0x18288b+_0x27deb1(0x1f7)+_0x9eedd4+_0x27deb1(0x226)+_0x9eedd4+_0x27deb1(0x1d1)+_0x9eedd4+_0x27deb1(0x184)+_0x9eedd4+_0x27deb1(0x247));if(_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9[_0x27deb1(0x1ed)]['workflow']){const _0x5c6ebc=_0x20e6c9['workflow']?JSON[_0x27deb1(0x257)](_0x20e6c9['workflow']):'{}';_0x18aa1d+='//\x20POST\x20/api/'+_0x31c1ea+'/'+_0x9eedd4+'/change-status\x20-\x20MySQL\x20Change\x20status\x20'+_0x9eedd4+'\x0arouter.post(\x27/change-status\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\x20const\x20primaryKey\x20=\x20\x27'+_0x18288b+_0x27deb1(0x22c)+_0x223122[_0x27deb1(0x1be)](/req\.body\[primaryKey\]/g,_0x63e4db[_0x27deb1(0x1d2)])+_0x27deb1(0x155)+_0x5c6ebc+_0x27deb1(0x206)+_0x31c1ea+'\x27;\x0a\x20\x20\x20\x20let\x20result\x20=\x20null;\x0a\x0a'+(_0x56f618?_0x27deb1(0x1fd)+_0x20e6c9[_0x27deb1(0x1c6)]+_0x27deb1(0x150)+_0x1a7ac5+'.changeStatusData(req.body,\x20workflowConfig,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':'\x0a\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x20(tetap\x20forward\x20authHeader\x20untuk\x20hook\x20JWT\x20forwarding)\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\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\x20requestId:\x20req.id\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20authHeader:\x20req.headers.authorization\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x1a7ac5+'.changeStatusData(req.body,\x20workflowConfig,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20CHANGE-STATUS\x20completed\x20without\x20component\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a')+'\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x9eedd4+_0x27deb1(0x211)+_0x9eedd4+_0x27deb1(0x18a)+_0x9eedd4+_0x27deb1(0x213);}if(_0x20e6c9['action']&&_0x20e6c9[_0x27deb1(0x1ed)][_0x27deb1(0x198)]){const _0x5aea57=_0x20e6c9['aggregateConfig']?JSON['stringify'](_0x20e6c9['aggregateConfig']):'{}';_0x18aa1d+='//\x20POST\x20/api/'+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x242)+_0x5aea57+';\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x1b9)+_0x9eedd4+_0x27deb1(0x157)+_0x9eedd4+_0x27deb1(0x247);}_0x20e6c9['action']&&_0x20e6c9[_0x27deb1(0x1ed)]['delete']&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+'/delete\x20-\x20MySQL\x20Delete\x0arouter.post(\x27/delete\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\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\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\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\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\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20data\x20exist\x20sebelum\x20delete\x20dan\x20ambil\x20old\x20data\x20untuk\x20event\x20lifecycle\x0a\x20\x20\x20\x20//\x20Menggunakan\x20SELECT\x20*\x20dari\x20tabel\x20utama\x20(tanpa\x20explicit\x20select)\x20karena\x20fieldName\x0a\x20\x20\x20\x20//\x20bisa\x20mengandung\x20kolom\x20dari\x20JOIN\x20(mis.\x20city_name)\x20yang\x20tidak\x20ada\x20di\x20tabel\x20utama\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20firstCondition\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20existingData\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x123)+_0x9eedd4+_0x27deb1(0x1c7)+(_0x56f618?'\x0a\x20\x20\x20\x20//\x20Integrated\x20transaction\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x20e6c9[_0x27deb1(0x1c6)]+_0x27deb1(0x11f)+_0x1a7ac5+'.deleteData(req.body,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a':_0x27deb1(0x154)+_0x1a7ac5+_0x27deb1(0x175))+_0x27deb1(0x21b)+_0x9eedd4+'\x20data\x20deleted\x20successfully`);\x0a\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'+_0x9eedd4+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27ER_ROW_IS_REFERENCED_2\x27\x20||\x20error.errno\x20===\x201451)\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\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'+_0x9eedd4+_0x27deb1(0x247));_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9['action']['first']&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+'/first\x20-\x20Mendapatkan\x20data\x20berdasarkan\x20kriteria\x0arouter.post(\x27/first\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20→\x20object\x20(backward\x20compatible)\x0a\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x20—\x20harus\x20object\x20tunggal\x20{key,\x20value}\x0a\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\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\x20as\x20{key,\x20value}\x20object\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'+_0x18288b+'\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'+_0x18288b+'\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\x20validFields\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x20e6c9['fieldName'])+_0x27deb1(0x235)+_0x1a7ac5+'.getData(getPayload);\x0a'+_0x537a56+_0x27deb1(0x11d)+_0x9eedd4+_0x27deb1(0x1f3)+_0x9eedd4+_0x27deb1(0x247));_0x20e6c9['action']&&_0x20e6c9['action']['read']&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+'/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//\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?\x20Math.min(parseInt(req.body.per_page\x20||\x2010,\x2010),\x20100)\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\x27all\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//\x20Validasi\x20parameter\x20paginasi\x20(hanya\x20jika\x20mode\x20paginasi)\x0a\x20\x20\x20\x20if\x20(paginate\x20&&\x20page\x20<\x201)\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\x20page\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Page\x20must\x20be\x20greater\x20than\x200\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//\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[_0x27deb1(0x257)](_0x20e6c9[_0x27deb1(0x229)]||[])+';\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\x27Invalid\x20field(s):\x20\x27\x20+\x20invalidFields.join(\x27,\x20\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\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\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue,\x0a\x20\x20\x20\x20\x20\x20searchBy,\x0a\x20\x20\x20\x20\x20\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}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20options.limit\x20=\x20limit;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x197)+_0x9eedd4+'\x20list:\x27,\x20error);\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'+_0x9eedd4+_0x27deb1(0x233));if(_0x20e6c9[_0x27deb1(0x12f)]&&_0x20e6c9[_0x27deb1(0x12f)][_0x27deb1(0x152)]){const _0x36864b=_0x20e6c9[_0x27deb1(0x12f)]['detailTable'][_0x27deb1(0x20e)]('.')['pop'](),_0x34f371=_0x9eedd4['replace'](/-/g,'_'),_0x8e2465=_0x20e6c9[_0x27deb1(0x12f)]['headerCalculations']||null,_0x289e12=_0x20e6c9['masterDetail']?.[_0x27deb1(0x220)]?.['autoCalculateFields']?.['total_amount']?.[_0x27deb1(0x122)]||'',_0x347465=_0x289e12[_0x27deb1(0x20e)]('*')['map'](_0x30cd4=>_0x30cd4[_0x27deb1(0x22d)]()),_0x16c287=_0x8e2465?.['total_qty']?.[_0x27deb1(0x1ae)]?.['replace'](_0x63e4db['yxmTF'],'')||'',_0x1e51bf=_0x347465[0x0]||_0x16c287,_0x5e5ed9=_0x347465[0x1]||_0x63e4db['bWUCE'];if(_0x20e6c9[_0x27deb1(0x1ed)]&&_0x20e6c9['action'][_0x27deb1(0x19b)]){const _0xcaa5ea=_0x8e2465?'\x0a\x20\x20\x20\x20var\x20headerCalc\x20=\x20'+JSON[_0x27deb1(0x257)](_0x8e2465)+_0x27deb1(0x168)+_0x36864b+_0x27deb1(0x12a)+_0x36864b+'.reduce(function(sum,\x20item)\x20{\x20return\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200);\x20},\x200);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20'+(_0x1e51bf?_0x27deb1(0x176)+_0x36864b+_0x27deb1(0x1e1)+_0x1e51bf+_0x27deb1(0x1ba)+_0x5e5ed9+_0x27deb1(0x11b):'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured')+_0x27deb1(0x1bf):'';_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+'/create-composite\x20-\x20MySQL\x20Composite\x20create\x20(master-detail)\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'+_0x9eedd4+'/create-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x34f371+_0x27deb1(0x13c)+_0x34f371+_0x27deb1(0x1cd)+_0x34f371+_0x27deb1(0x1e4)+_0x1a7ac5+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20headerDataForValidation\x20=\x20Object.assign({},\x20data);\x0a\x20\x20\x20\x20\x20\x20delete\x20headerDataForValidation.'+_0x36864b+';\x0a\x0a\x20\x20\x20\x20\x20\x20var\x20validation\x20=\x20await\x20'+_0x1a7ac5+'.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\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!data.'+_0x36864b+'\x20||\x20!Array.isArray(data.'+_0x36864b+')\x20||\x20data.'+_0x36864b+'.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'+_0x36864b+'\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'+_0xcaa5ea+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x0a\x20\x20\x20\x20var\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:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x20e6c9[_0x27deb1(0x1c6)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x20e6c9[_0x27deb1(0x12f)][_0x27deb1(0x125)]+_0x27deb1(0x127)+_0x20e6c9['masterDetail'][_0x27deb1(0x174)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\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\x20var\x20result\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x204)+_0x9eedd4+'\x20composite\x20create\x20successful\x27);\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'+_0x9eedd4+_0x27deb1(0x115)+_0x9eedd4+_0x27deb1(0x1aa)+_0x9eedd4+_0x27deb1(0x247);}_0x20e6c9['action']&&_0x20e6c9[_0x27deb1(0x1ed)][_0x27deb1(0x173)]&&(_0x18aa1d+=_0x27deb1(0x17a)+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x1de)+_0x9eedd4+'/update-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x34f371+')\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\x20must\x20have\x20property\x20\x22'+_0x34f371+'\x22\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\x20var\x20data\x20=\x20req.body.'+_0x34f371+';\x0a\x0a\x20\x20\x20\x20if\x20(!data.'+_0x18288b+_0x27deb1(0x141)+_0x18288b+')\x20is\x20required\x20for\x20update\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'+_0x4bf635+'\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x1a7ac5+_0x27deb1(0x22f)+_0x36864b+_0x27deb1(0x1a1)+_0x1a7ac5+_0x27deb1(0x13a)+_0x36864b+_0x27deb1(0x1ff)+_0x36864b+'\x20!==\x20\x27object\x27\x20||\x20Array.isArray(data.'+_0x36864b+_0x27deb1(0x116)+_0x36864b+'\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\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x0a\x20\x20\x20\x20var\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:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x20e6c9['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'+_0x20e6c9[_0x27deb1(0x12f)]['detailTable']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x20e6c9['masterDetail'][_0x27deb1(0x174)]+_0x27deb1(0x171)+_0x1a7ac5+_0x27deb1(0x144)+_0x9eedd4+_0x27deb1(0x191)+_0x18288b+_0x27deb1(0x1c8)+_0x18288b+');\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'+_0x9eedd4+_0x27deb1(0x21d)+_0x9eedd4+_0x27deb1(0x1a4)+_0x9eedd4+'\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\x20\x20\x20\x20if\x20(error.errno\x20===\x201062)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20details\x20=\x20buildDuplicateDetails(error,\x20DUP_CONSTRAINT_FIELDS);\x20return\x20res.status(409).json({\x20success:\x20false,\x20error:\x20\x27Duplicate\x20entry\x27,\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x20...(details\x20?\x20{\x20details\x20}\x20:\x20{}),\x20timestamp:\x20new\x20Date().toISOString()\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(error.errno\x20===\x201452)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x20success:\x20false,\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x20timestamp:\x20new\x20Date().toISOString()\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'+_0x9eedd4+'\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'),_0x20e6c9['action']&&_0x20e6c9[_0x27deb1(0x1ed)]['readComposite']&&(_0x18aa1d+='//\x20POST\x20/api/'+_0x31c1ea+'/'+_0x9eedd4+_0x27deb1(0x1f8)+_0x9eedd4+_0x27deb1(0x1f6)+_0x18288b+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\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\x20var\x20result\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x1df)+_0x9eedd4+_0x27deb1(0x145)+_0x9eedd4+_0x27deb1(0x1bc)+_0x9eedd4+_0x27deb1(0x1a2));}if(_0x20e6c9[_0x27deb1(0x1ed)]?.['info']!==![]){const _0x25fc0d={'datatables':!!_0x20e6c9['action']?.['datatables'],'read':!!_0x20e6c9[_0x27deb1(0x1ed)]?.[_0x27deb1(0x1cb)],'first':!!_0x20e6c9['action']?.[_0x27deb1(0x1f5)],'create':!!_0x20e6c9['action']?.['create'],'update':!!_0x20e6c9[_0x27deb1(0x1ed)]?.['update'],'delete':!!_0x20e6c9['action']?.[_0x27deb1(0x212)],'lookup':!!_0x20e6c9[_0x27deb1(0x1ed)]?.['lookup'],'export':!!_0x20e6c9[_0x27deb1(0x1ed)]?.[_0x27deb1(0x1e8)],'import':!!_0x20e6c9['action']?.['import'],'info':_0x63e4db[_0x27deb1(0x23f)](_0x20e6c9['action']?.[_0x27deb1(0x16b)],![])};_0x18aa1d+='//\x20MySQL\x20endpoint\x20information\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[_0x27deb1(0x257)](_0x25fc0d)+_0x27deb1(0x161)+_0x1a7ac5+'.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'+_0x9eedd4+_0x27deb1(0x1ca)+_0x31c1ea+_0x27deb1(0x1cf)+_0x2215be+_0x27deb1(0x256);}else _0x18aa1d+='//\x20Endpoint\x20/info\x20dinonaktifkan\x20via\x20action.info\x20=\x20false\x0a';return _0x18aa1d+='\x0a//\x20MySQL\x20health\x20check\x0arouter.get(\x27/health\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20connectionInfo\x20=\x20await\x20'+_0x1a7ac5+_0x27deb1(0x139)+_0x9eedd4+_0x27deb1(0x183)+_0x9eedd4+'\x27,\x0a\x20\x20\x20\x20\x20\x20database:\x20\x27mysql\x27,\x0a\x20\x20\x20\x20\x20\x20error:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a',_0x18aa1d+='module.exports\x20=\x20router;',_0x18aa1d;}module[a0_0x4199b5(0x231)]={'createMysqlMainModuleTemplate':createMysqlMainModuleTemplate,'createMysqlModelTemplate':createMysqlModelTemplate,'createMysqlSubmoduleTemplate':createMysqlSubmoduleTemplate};function a0_0x4d9b(){const _0x500f4c=['igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGih0PoWOGicaGicaGih0kicaGicaGFsbJyxrJAcaOy2HLy2TfCNjVCIKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMvYAwzPy2f0Aw9UiezHAwXLzcCScIaGicaGicaGicbTzxnZywDLoIaNq291BgqGBM90ihzLCMLMEsbKyxrHigv4Axn0zw5JzsbIzwzVCMuGzgvSzxrLjYWkicaGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8Gy2HLy2TfCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqOk','psCGkYbKyxrHlG','qxzMyLK','jYWkicaGicaGBw9KDwXLoIaN','CMvHza','cIaGlY8GrMLLBgqGDMfSAwrHDgLVBIbJB25MAwD1CMf0Aw9UcG','iICScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGDMfYigrHDgeGpsbYzxeUyM9KEs4','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0Gj0vsx0rvuf9ftLrswsCGFhWGzxjYB3iUzxjYBM8Gpt09ideWnJiPihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGDxbKyxrPBMCG','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj215C3fSjYWkicaGicaGz2vUzxjHDgvKoIaN','CwTsywi','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDJB25ZDhjHAw50ihzPB2XHDgLVBICPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj2jLBg93ig1PBMLTDw0NksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNq29UC3rYywLUDcb2Aw9SyxrPB24NlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbJB25MAwD1CMvKigzVCIbHzgP1C3rTzw50jYKGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNAxmGCMvXDwLYzwqGzM9YigfKANvZDcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGyMuGysbUB24TEMvYBYbUDw1IzxiNksb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGBM90igjLigvTChr5jYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uGpt09icDeyxrHihrPzgfRigrPDgvTDwTHBICGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNBM90igzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicbTzxnZywDLoIaN','AKzNtgy','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','mtj5yxryDhG','ih07cMnVBxbVBMvUDevUz2LUzs5SB2fKq29UzMLNDxjHDgLVBKzYB21pyMPLy3qOx2nVBxbVBMvUDfbHEwXVywqPlNrOzw4OCMvZDwX0id0+ihSkicbPzIaOCMvZDwX0lNn1y2nLC3mPihSkicaGignVBNnVBguUBg9NkgbdB21WB25LBNqGy29UzMLNDxjHDgLVBIbSB2fKzwqGzM9Yia','oWOklY8GrwTZDhjHAYbUyw1HignVBNn0CMfPBNqGzgfYAsbLCNjVCIbnEvnrtcaOiI4UlIbMB3iGA2v5icC8DgjSpI48Awr4pICIksWGBM9YBwfSAxnHC2KklY8GBg93zxjJyxnLihrHBNbHihbYzwzPEcb0ywjLBcaOtxLtuuWGoc4WlJe5kYbTzw5HBwjHAgTHBIbXDwfSAwzPzxiGphrHyMXLpI4PlGPMDw5JDgLVBIbLEhrYywn0q29UC3rYywLUDe5HBwuOzxjYB3iPihSkicbPzIaOiwvYCM9YksbYzxr1CM4GBNvSBdSkicbJB25ZDcbZCMmGpsbLCNjVCI5ZCwXnzxnZywDLihX8igvYCM9YlM1LC3nHz2uGFhWGjYC7cIaGy29UC3qGBsa9ihnYyY5TyxrJAcGVzM9YigTLEsaNkfTEj10RksCVktSkicbPzIaOiw0PihjLDhvYBIbUDwXSoWOGihjLDhvYBIbTwZfDlNnWBgL0kcCUjYKUCg9WkcKUDg9mB3DLCKnHC2uOktSkFqOklY8GtwvUz2vTyMfSAwTHBIbTyxaGEYbMAwvSzdOGw3bLC2fUxsb9igf0yxuGBNvSBcaOy2fSBc1ZAxrLig1LBMCTB21PDcbGzgv0ywLSC2aPlGPMDw5JDgLVBIbIDwLSzer1CgXPy2f0zurLDgfPBhmOzxjYB3iSigXVB2T1CcKGEWOGignVBNn0ig5HBwuGpsbLEhrYywn0q29UC3rYywLUDe5HBwuOzxjYB3iPoWOGigLMicGHBMfTzsKGCMv0DxjUig51BgW7cIaGy29UC3qGzMLLBgrZid0GBg9VA3vWw25HBwvDoWOGigLMicGHqxjYyxKUAxnbCNjHEsHMAwvSzhmPihX8igzPzwXKCY5Szw5NDgGGpt09idaPihjLDhvYBIbUDwXSoWOGignVBNn0ig1ZzYa9igzPzwXKCY5Szw5NDgGGpIaXcIaGica/icDbihjLy29Yzcb3AxrOihrOAxmGy29TyMLUyxrPB24GB2yGDMfSDwvZigfSCMvHzhKGzxHPC3rZjWOGicaGoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjZSkicbJB25ZDcbKzxrHAwXZid0GE307cIaGzM9YicHJB25ZDcbMig9MigzPzwXKCYKGzgv0ywLSC1TMxsa9ifTTC2DDoWOGihjLDhvYBIbKzxrHAwXZoWP9cG','v2LYruO','DMLLD1f1zxj5','jZSkcIaGlY8GuMvHzc9xCML0zsbZB3vYy2uGy29UzMLNDxjHDgLVBGOGihrOAxmUDMLLD05HBwuGpsaN','cIaGicb9ksK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUie15u1fmigDLDeXVB2T1CerHDgfeEw5HBwLJoICSigvYCM9YktSkicaGihrOCM93igvYCM9YoWOGih0kFqOklYOQcIaQie92zxjYAwrLigDLDfn0yxrPy0XVB2T1CerHDgeGDw50DwSGtxLtuuWkicOVcMfZEw5JigDLDfn0yxrPy0XVB2T1CerHDgeOC2vSzwn0zwruywCPihSkicb0CNKGEWOGicaGlY8Gq2HLy2SGy2fJAguGzMLYC3qGlsbJywnOzsb0yw5WysbZzwXLy3rLzfrHzYbRyxjLBMeGzgf0ysbZyw1HcIaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ihr5Cgu6icDZDgf0AwmNih07cIaGicbJB25ZDcbJywnOzwrszxn1BhqGpsbHD2fPDcb0AgLZlMDLDenHy2HLzeXVB2T1CcHJywnOzu9WDgLVBNmSicDZDgf0AwmNktSkicaGigLMicHJywnOzwrszxn1BhqPihSkicaGicaGlY8GqxbWBhKGC2vSzwn0zwruywCGDg8Gy2fJAgvKihjLC3vSDaOGicaGicbYzxr1CM4Gy2fJAgvKuMvZDwX0lM1HCcHPDgvTid0+ihSkicaGicaGicbPzIaOAxrLBs5Pzca9pt0GC2vSzwn0zwruywCPihSkicaGicaGicaGihjLDhvYBIb7ic4UlML0zw0SihnLBgvJDgvKoIaNDhj1zsCGFtSkicaGicaGicb9cIaGicaGicaGCMv0DxjUihSGAwq6igL0zw0UAwqSihrLEhq6igL0zw0UDgv4Dcb9oWOGicaGicb9ktSkicaGih0kcIaGicbJB25ZDcbXDwvYEsa9igbtruXfq1qG','lY8GvgfIzwWGDgfUCgeGyxvKAxqGy29SDw1UCZOGzgLZywjSzsbPBMPLy3rPB24GAgvSCgvYcG','id09psbZzwXLy3rLzfrHzYKGEWOGicaGicaGihjVDY5ZzwXLy3rLzca9icD0CNvLjZSkicaGicaGFqOGicaGicbYzxr1CM4GCM93oWOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUie15u1fmigDLDfn0yxrPy0XVB2T1CerHDge6jYWGzxjYB3iPoWOGicaGDgHYB3CGzxjYB3i7cIaGFqP9cGOVkIOkicOGtg9VA3vWigrLBMDHBIbHzhzHBMnLzcbMAwX0zxiGC3vWCg9YDcb1BNr1AYbnEvnrtaOGkI8kyxn5BMmGz2v0tg9VA3vWrgf0yvDPDgHgAwX0zxiOB3b0Aw9UCYKGEWOGihrYEsb7cIaGicaVlYbdAgvJAYbJywnOzsbMAxjZDaOGicaGy29UC3qGy2fJAgvpChrPB25Zid0GEYaUlI5VChrPB25Zlcb0ExbLoIaNzMLSDgvYjYb9oWOGicaGy29UC3qGy2fJAgvKuMvZDwX0id0GyxDHAxqGDgHPCY5NzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcaNzMLSDgvYjYK7cIaGicbPzIaOy2fJAgvKuMvZDwX0ksbYzxr1CM4Gy2fJAgvKuMvZDwX0oWOkicaGignVBNn0ihnLBgvJDenVBhvTBNmGpsbVChrPB25ZlNnLBgvJDcb8FcbBjW','iga7cIaGicaGicaGCgfYyw1Zid0GD2HLCMvszxn1BhqUCgfYyw1ZoWOGicaGicb9ignHDgnOicHLksb7cIaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGzxjYB3iUC3rHDhvZq29Kzsa9idqWmdSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFqOkicaGic8VieHHBMrSzsbZB3j0x2nVBhvTBNmkicaGigLMicHVChrPB25ZlNnVCNrFy29SDw1UCYaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUC29YDf9JB2X1Bw5ZksaMjIbVChrPB25ZlNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGignVBNn0ig9YzgvYugfYDhmGpsbVChrPB25ZlNnVCNrFy29SDw1UCY5TyxaOAxrLBsa9pIb7cIaGicaGicaGy29UC3qGy29SDw1Uid0GAxrLBs5JB2X1Bw47cIaGicaGicaGy29UC3qGzgLYzwn0Aw9Uid0GkgL0zw0UzgLYzwn0Aw9UihX8icDbu0mNks50B1vWCgvYq2fZzsGPoWOGicaGicaGigLMicGHy29SDw1UksbYzxr1CM4GBNvSBdSkicaGicaGicbPzIaOixrOAxmUDMfSAwrgAwvSzhmUAw5JBhvKzxmOy29SDw1UksKGCMv0DxjUig51BgW7cIaGicaGicaGAwyGkgrPCMvJDgLVBIaHpt0Gj0ftqYCGjIyGzgLYzwn0Aw9Uice9psaNrevtqYCPihjLDhvYBIbUDwXSoWOGicaGicaGihjLDhvYBIbGjhTJB2X1Bw59icr7zgLYzwn0Aw9UFwa7cIaGicaGih0PlMzPBhrLCIHcB29SzwfUktSkcIaGicaGigLMicHVCMrLCLbHCNrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGignVBNn0igvYCM9Yid0GBMv3ievYCM9YkcDoBYb2ywXPzcbZB3j0ignVBhvTBNmGChjVDMLKzwqNktSkicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE29YzgvYugfYDhmUAM9PBIGNlcaNkx1GoWOGicaGFsbLBhnLihSkicaGicaGCxvLCNKGkZ0Gye9srevsiejzicr7ywXPyxngAwvSzcb8Fcb0zxH0rMLLBgr9ydSkicaGih0kcIaGicbJB25ZB2XLlMXVzYGNtxLtuuWGtg9VA3vWiezPBhrLCIbrDwvYEtONlcbXDwvYEsK7cIaGicbJB25ZB2XLlMXVzYGNugfYyw1LDgvYCZONlcbWyxjHBxmPoWOkicaGignVBNn0igrHDgeGpsbHD2fPDcbKyI5LEgvJDxrLuxvLCNKOCxvLCNKSihbHCMfTCY5Szw5NDgGGpIaWid8GCgfYyw1ZidOGDw5KzwzPBMvKktSkcIaGicbJB25ZDcbYzxn1BhqGpsbKyxrHlM1HCcHPDgvTid0+icH7cIaGicaGigLKoIbPDgvTlG','l3vWzgf0zs1JB21WB3nPDguGlsbnEvnrtcbdB21WB3nPDguGDxbKyxrLicHTyxn0zxiTzgv0ywLSkqPYB3v0zxiUCg9ZDcGNl3vWzgf0zs1JB21WB3nPDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGy29UC29Szs5SB2COj1jLCxvLC3qGyM9KEsa','lNjLywrdB21WB3nPDguOCMvXlMjVzhKPoWOkicaGignVBNnVBguUBg9NkcC','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGlY8GuKvbrcbVCgvYyxrPB25ZoIbPBMPLy3qGC2nVCguGAw50BYbYzxeUyM9KEs53AgvYzqOGigLMicHBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNCMvHzc1JB21WB3nPDguNxs5PBMnSDwrLCYHLBMrWB2LUDcKPihSkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbBC2nVCgvdB25KAxrPB25DoWOGicaGFsbLBhnLigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxeUyM9KEs53AgvYzs51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGih0GzwXZzsbPzIaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksb7cIaGicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGicaGAwyGkg9YAwDPBMfStg9NAwmGpt09icDbtKqNksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCY51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGicaGFsbLBhnLihSkicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicaGigXVz2LJoIaNqu5ejYWkicaGicaGicaGignVBMrPDgLVBNm6ifSkicaGicaGicaGicaGC2nVCgvdB25KAxrPB24ScIaGicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGicaGxqOGicaGicaGih07cIaGicaGih0kicaGih0kicb9cGOGic8VierftevurtOGChjLCgvUzcbZy29WzsbJB25KAxrPB24GDg8GD2HLCMuGyxjYyxKkicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNksb7cIaGicbPzIaOCMvXlMjVzhKUD2HLCMuPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUDw5ZAgLMDcHZy29WzunVBMrPDgLVBIK7cIaGicaGih0kicaGih0kicb9cGOGic8ViensrufursaVieferdOGzM9Yy2uGC2nVCguGy29SDw1UihzHBhvLcIaGAwyGkgvUzhbVAw50id09psaNywrKjYb8FcbLBMrWB2LUDca9pt0Gj2nYzwf0zsCPihSkicaGihjLCs5IB2r5wYC','lNjLzhvJzsHMDw5JDgLVBIHZDw0SigL0zw0PihSkicaGicaGicb2yxiGCxr5id0GtNvTyMvYkgL0zw0U','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','laOGicaGz2vUzxjHDgvKoIaN','oWOkicaGic8VifzHBgLKyxnPigrHBIbZyw5PDgfZAsbOzwfKzxiGzgf0ysbKzw5Nyw4Gy29UC3rYywLUDcaODgvYBwfZDwSGAgfZAcKkicaGigLMicH0ExbLB2yG','ChjPBwfYEuTLEq','AM9PBG','yvzWD3u','zxHWB3j0','icaGicaGjW','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','ywn0Aw9U','CMvXDwLYzwrgAwvSzhm','laOGicaGicaGihrLEhq6igL0zw0U','ChvZAa','ie1VzgvSic0GtxLtuuWGrgf0ywjHC2ukkIbhzw5LCMf0zwq6ia','ig5VDcbMB3vUzdOGjhTMAwXLugf0Ah1GktSkicaGicaGicb0zw1WBgf0zxnBiG','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','jZSkcIaGicaVlYbdB25MAwD1CMf0Aw9Uig9WDgLVBNmkicaGignVBNn0igXVz2DPBMDfBMfIBgvKid0Gy29UzMLNlMXVz2DPBMCGit09igzHBhnLoWOGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGBg9Nz2vYlMLUzM8OEWOGicaGicbLDMvUDdOGj21VzhvSzv9ZDgfYDgLUzYCScIaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicbWB3j0laOGicaGicbJB3jZoIbWCM9JzxnZlMvUDI5dt1jtx0voqujmruqGit09icDMywXZzsCScIaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGBg9Nz2LUzZOGBg9Nz2LUz0vUywjSzwqScIaGicaGigfWAuTLEtOGyxbPs2v5uMvXDwLYzwqkicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGlY8Gq09suYbTAwrKBgv3yxjLicHRB25MAwD1CMfZAsb2AweGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkicaGigfWCc51C2uOy29YC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGyxbWlNvZzsHZzwn1CML0EuHLywrLCNmUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbnAwrKBgv3yxjLihvUDhvRihbHCNnPBMCGsLnptIbKzw5Nyw4GCgvUyw5Nyw5HBIbLCNjVCGOGicaGyxbWlNvZzsHIB2r5ugfYC2vYlMPZB24OEWOGicaGicb2zxjPzNK6icHYzxeSihjLCYWGyNvMlcbLBMnVzgLUzYKGpt4GEWOGicaGicaGigLMicHIDwyUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM47cIaGicaGicaGFqOGicaGicaGihrYEsb7cIaGicaGicaGicbku09olNbHCNnLkgj1zIK7cIaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbku09oihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNvgHLihbHEwXVywqGC2vUDcbPCYbUB3qGysb2ywXPzcbku09oigzVCM1HDcCScIaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2ukicaGicaGicaGih0PoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDjBNzHBgLKiePtt04NktSkicaGicaGicb9cIaGicaGih0kicaGih0PktSkcIaGicbHChaUDxnLkgjVzhLqyxjZzxiUDxjSzw5JB2rLzcH7igv4DgvUzgvKoIb0CNvLih0PktSkcIaGicaVlYbszxf1zxn0igXVz2DPBMCGBwLKzgXLD2fYzsaOugLUBY1IyxnLzcKkicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGihjLCs5Pzca9ihjLCs5OzwfKzxjZwYD4lxjLCxvLC3qTAwqNxsb8Fcb1DwLKDJCOktSkicaGicaGCMvZlNnLDcGNwc1szxf1zxn0luLejYWGCMvXlMLKktSkcIaGicaGihjLCs5SB2CGpsbJCMvHDgvszxf1zxn0tg9Nz2vYkhSkicaGicaGicbYzxf1zxn0swq6ihjLCs5PzcWkicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGCgf0AdOGCMvXlNbHDgGScIaGicaGicaGAxa6ihjLCs5PCaOGicaGicb9ktSkcIaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicbJB25ZDcbBC2vJB25KCYWGBMfUB3nLy29UzhnDid0GChjVy2vZCY5OCNrPBwuOC3rHCNruAw1LktSkicaGicaGicbJB25ZDcbKDxjHDgLVBK1Zid0GCgfYC2vgBg9HDcGOC2vJB25KCYaQideWmdaGkYbUyw5VC2vJB25KCYaVidfLnIKUDg9gAxHLzcGYksK7cIaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGih0PoWOkicaGicaGBMv4DcGPoWOGicaGFsK7cGOGicaGlY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbbueKGA2v5igPPA2eGzgLWzxjSDwTHBIaOy29UC3rHBNqTDgLTzsbJB21WyxjPC29UkqOGicaGAwyGkgnVBMzPzY5RzxKPihSkicaGicaGy29UC3qGy3j5ChrVid0GCMvXDwLYzsGNy3j5ChrVjYK7cIaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicbHChaUDxnLkcHYzxeSihjLCYWGBMv4DcKGpt4GEWOGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicbPzIaOiwfWAuTLEsKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGignVBNn0ihbYB3zPzgvKs2v5id0GqNvMzMvYlMzYB20OyxbPs2v5ktSkicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGiwnYExb0BY50Aw1PBMDtywzLrxf1ywWOzxHWzwn0zwrlzxKSihbYB3zPzgvKs2v5ksKGEWOGicaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaXks5QC29UkhSGzxjYB3i6icDvBMf1DgHVCML6zwq6ieLUDMfSAwqGqvbjieTLEsCGFsK7cIaGicaGicaGFqOGicaGicaGig5LEhqOktSkicaGicaGFsK7cIaGicb9cGOGicaGlY8GuMf0zsbSAw1PDgLUzYbTAwrKBgv3yxjLicHZDg9YztOGBwvTB3j5ihvUDhvRihnPBMDSzsbTB2rLlcbszwrPCYb1BNr1AYbJBhvZDgvYig1VzguPcIaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicbHChaUDxnLkcCVyxbPjYWGCMf0zuXPBwL0zxiUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbjzgvTCg90zw5JEsbTAwrKBgv3yxjLicHWCM90zwn0CYbTDxrHDgLVBIbLBMrWB2LUDhmGzNjVBsbKDxbSAwnHDguGzxHLy3v0Aw9UkqOGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicbHChaUDxnLkcCVyxbPjYWGAwrLBxbVDgvUy3LnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cIaGicb9cGOGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGigfWCc51C2uOjY9HCgKNlcbIB2r5t3b0Aw9UC01PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkcIaGicaVlYbbDxrVlwXVywqGCgX1z2LUicHQAwTHigfKysKkicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','zMLYC3q','l3jLywqTy29TCg9ZAxrLoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7ihn1y2nLC3m6igzHBhnLlcbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCSig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCSihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPih0PoWOGicaGFqOkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0Esb3AgvYzsbPCYbYzxf1AxjLzcCScIaGicaGicaGzxHHBxbSztOGEYaID2HLCMuIoIbBEYaIA2v5iJOGiMzPzwXKx25HBwuIlcaIDMfSDwuIoIaIzMLLBgrFDMfSDwuIih1Dih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkcfbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksaMjIaHCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcb3AgvYzsbMB3jTyxqNlaOGicaGicaGig1LC3nHz2u6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGzxHHBxbSztOGEYaID2HLCMuIoIbBEYaIA2v5iJOGiG','j119ycK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','l3jLywqTy29TCg9ZAxrLic0GtxLtuuWGuMvHzcbOzwfKzxiGD2L0AcbKzxrHAwWGAxrLBxmkCM91DgvYlNbVC3qOjY9YzwfKlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','cIaGxtSkcIaGy29UC3qGzgf0yxrHyMXLC1DOzxjLid0G','iJSkicaGih0kicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIHGrxjYB3iGBg9HzgLUzYbnEvnrtcb0zw1WBgf0zsa','C210Egu','Dg9mB3DLCKnHC2u','cIaGicaVlYbjBNrLz3jHDgvKihrYyw5Zywn0Aw9UigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGihrYEsb7cIaGicaGignVBNn0igv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','zgvZA3jPChnP','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','ktSkicaGicaGy29UC29Szs5SB2COj1TgquXmqKfds10GvvbeqvrfignVBxbSzxrLzcb3AxrOB3v0igv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0zbteXcqunlxsbvuerbveuGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicb0AhjVDYbLCNjVCJSkicaGih0k','AhHjEuu','lY8Gq3vZDg9Tigf1zgL0ignVBhvTBNmGBwfWCgLUzYbKyxjPihbHEwXVywqk','DxbKyxrL','lMnYzwf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9NkcC','cIaGicaGih0','oWOGicaGD29YA2zSB3DdB25MAwCUx3bYB2PLy3qGpsaN','oWOGigLMicHIExbHC3nsB2XLCY5Szw5NDgGGpIaWicyMigj5CgfZC1jVBgvZlNnVBwuOCM9Szsa9pIb1C2vYuM9SzxmUAw5JBhvKzxmOCM9SzsKPksb7cIaGicbYzxr1CM4GBMv4DcGPoWOGih0kcIaGlY8GuMvHzcbZy29Wzsb2ywX1zsbMCM9TihvZzxiGy29UDgv4DaOGignVBNn0ihnJB3bLvMfSDwuGpsa','cI8ViokuGokuGokuGcbszxf1zxn0ifnJB3bLie1PzgrSzxDHCMuGkeXHEwvYideGuKXtksdILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILidILiaklY8GrhLUyw1PyYbWzxiTCMvXDwvZDcbMAwX0zxjPBMCGyNKGjW','laOGicaGicb0zxH0oIbPDgvTlG','cI8VieLUAxrPywXPEMuGy29TCg9Uzw50igvUz2LUzsbKzw5Nyw4GzxzLBNqGAgfUzgXLCNmGzgfYAsbWyxLSB2fKcMnVBNn0if9JB21WB25LBNrqyxLSB2fKid0GEYbJB21WB25LBNrZoIa','cN0kcM1VzhvSzs5LEhbVCNrZid0GBMv3ia','A29Kzq','zgf0yxrHyMXLC1f1zxj5','C3bSAxq','ExL5Es1nts1Kza','cIaGlY8GrMLSzsb1CgXVywqGzMLLBgrZicHku09oignVBhvTBNmPcIaGDgHPCY5MAwXLrMLLBgrZid0G','ihn0yxr1CYbJAgfUz2vKoIaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30G4OAsicr7CMvZDwX0lNDVCMTMBg93lM5LD1n0yxr1C31GktSkcIaGicbYzxr1CM4GCMvZlNn0yxr1CYGYmdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicbTzxnZywDLoIbGu3rHDhvZignOyw5NzwqGzNjVBsaKE3jLC3vSDc53B3jRzMXVDY5WCMv2Aw91C1n0yxr1C30GDg8GjhTYzxn1BhqUD29YA2zSB3CUBMv3u3rHDhvZFwaScIaGicaGigrHDge6ihjLC3vSDc5KyxrHlaOGicaGicb3B3jRzMXVDZOGCMvZDwX0lNDVCMTMBg93laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGy2HHBMDLlxn0yxr1CYa','zgvSzxrL','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbmB2nRigfJCxvPC2L0Aw9UigzHAwXLzaOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0zHAwXLzcb0BYbHy3f1AxjLigXVy2SNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNuMvZB3vYy2uGyNvZEsCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy2HHBMDPBMCGC3rHDhvZjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','jZSkcI8VienVBxbVBMvUDcbJB25MAwD1CMf0Aw9UihvUDhvRigv4Cg9YDc9PBxbVCNqGkhbHCNnLzcbVBgvOignVBMzPzY1LEhrYywn0B3iG4OcuigPHBMDHBIbKAw1VzgLMAwTHC2KPcMnVBNn0ignVBxbVBMvUDenVBMzPzYa9ihSkicb0ywjSzu5HBwu6icC','id0GCMvXDwLYzsGNlI4VlI4VBw9KzwXZlW','wNbrsM8','cIOGrgf0ywjHC2u6ie15u1fmcIOVcGOVlYbqCMLTyxj5igTLEsb1BNr1AYbLBMrWB2LUDcbPBMKky29UC3qGChjPBwfYEuTLEsa9icC','l3vWzgf0zsaTie15u1fmifvWzgf0zqPYB3v0zxiUCg9ZDcGNl3vWzgf0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbWCMLTyxj5igTLEqOGicaGy29UC3qGChjPBwfYEuTLEsa9icC','mJa0meTfBKfytW','Dw5PDf9WCMLJzq','cIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','y2HHCKf0','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqGkhDPDgGGzgv0ywLSigL0zw1ZksCScIaGicaGigrHDge6ihjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsb1CgrHDguG','jWOGih07cGOGihrOAxmUywr2yw5JzwrrDwvYEvrLBxbSyxrLCYa9ihrOAxmUBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOktSkFqOklYOQcIaQieXVywqGywr2yw5JzwqGCxvLCNKGDgvTCgXHDgvZigrHCMKGzMLSzqOGkI8kBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOksb7cIaGy29UC3qGDgvTCgXHDgvZid0GE307cGOGia','ksb8FcaWktS','zgv0ywLSq29UzMLN','Cg9W','DxbKyxrLzef0','qMnwDKm','EevPB2e','ih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGj01HC3rLCIbYzwnVCMqGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','igrHDgeGC3vJy2vZC2z1BgX5igfKANvZDgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fKANvZDcbKyxrHia','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLicyMihjLC3vSDc5KyxrHicyMihjLC3vSDc5KyxrHlMXLBMD0Aca+idaPihSkicaGicaGy29UC3qGCMvJB3jKid0GCMvZDwX0lMrHDgfBmf07cIaGicaGigLMicHYzwnVCMrBCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1UxsaHpt0GDw5KzwzPBMvKicyMcIaGicaGicaGicbtDhjPBMCOCMvJB3jKw3jLCs5FCMvXDwvZDfnJB3bLlMnVBhvTBL0Pice9psbtDhjPBMCOCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicbTzxnZywDLoIaN','AxnbCNjHEq','zMLLBgroyw1L','cIaG','tuT4t0G','jZSkicaGignVBNn0ihjLy29YzeLKid0GCMvXlMjVzhLBChjPBwfYEuTLEv0GFhWGCMvXlMjVzhKUAwq7cIaGicbPzIaOixjLy29YzeLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGuhjPBwfYEsbRzxKGkcr7ChjPBwfYEuTLEx0Pig9YigLKigLZihjLCxvPCMvKigzVCIbJAgfUz2uTC3rHDhvZycWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOixjLCs5IB2r5lNn0yxr1CYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj3n0yxr1CYbPCYbYzxf1AxjLzcbMB3iGy2HHBMDLlxn0yxr1CYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','DhjPBq','D0Thvgy','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicb2yxiGAgvHzgvYrgf0yuzVCLzHBgLKyxrPB24GpsbpyMPLy3qUyxnZAwDUkhT9lcbKyxrHktSkicaGicaGzgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','cIaGicbJB25ZDcbHzgP1C3rdB25MAwCGpsbJB21WB25LBNrdB25MAwCUywrQDxn0q29UzMLNihX8ihT9oWOGicaGBgv0ihjLC3bVBNnLrgf0ysa9ig51BgW7cGO','zxHWB3j0CW','A2v5CW','igXPC3qGzgf0ysCScIaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7cGO','Dg9vChbLCKnHC2u','oWOGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHYzxeUyM9KEs53AgvYzs5RzxKPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGsw52ywXPzcbMAwvSzdOGjhTYzxeUyM9KEs53AgvYzs5RzxL9ycWkicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGC2vSzwn0igzPzwXKCYbQAwTHigfKyqOGicaGAwyGkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihSkicaGicaGy29UC3qGAw52ywXPzezPzwXKCYa9ihjLCs5IB2r5lNnLBgvJDc5MAwX0zxiOzMLLBgqGpt4GixzHBgLKrMLLBgrZlMLUy2X1zgvZkgzPzwXKksK7cGOGicaGicbPzIaOAw52ywXPzezPzwXKCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihnLBgvJDcbMAwvSzhmNlaOGicaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgqOCYK6icr7Aw52ywXPzezPzwXKCY5QB2LUkcCSicCPFwaScIaGicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicb9cGOGicaGlY8Gq29UDMvYDcbRzsbHCNjHEsbMB3jTyxqGDw50DwSGA29TCgf0AwjPBgL0yxmGzgvUz2fUig1VzgvSlMDLDerHDgeOksdIHPiGyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOkqOGicaGy29UC3qGz2v0ugf5Bg9Hzca9ihSkicaGicaGD2HLCMu6ifT7igTLEtOGCMvXlMjVzhKUD2HLCMuUA2v5lcb2ywX1ztOGCMvXlMjVzhKUD2HLCMuUDMfSDwuGFv0ScIaGicaGihnLBgvJDdOGCMvXlMjVzhKUC2vSzwn0cIaGicb9oWOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','zgvMyxvSDfnJB3bL','id0G','zMLLBgrZ','cIaGicaGignVBNn0igrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGzfzHBhvLCYa9ifTDoWOGicaGicbJB25ZDcbKugXHy2vOB2XKzxjZid0Gw107cIaGicaGigzVCIaOy29UC3qGw2TLEsWGDMfSDwvDig9Mie9IAMvJDc5LBNrYAwvZkgL0zw0Pksb7cIaGicaGicaG','mtiYnZK2mwXIDKjLDq','tw9KzwWGzxH0zw5KCYbcyxnLtw9KzwWGEWOVkIOkicOGq29UC3rYDwn0B3ikicOVcMnVBNn0CNvJDg9YkcKGEWOGignVBNn0ihzHBgLKrMLLBgrZid0GwWOGicaG','zMLLBgrmywjLBhm','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGzxzLBNrdB250zxH0','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','vvHbvNG','zMLLBgrwywXPzgf0Aw9U','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','cIaGicaGigL0zw0U','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKiokaLcbUBYbXDhKGzMLLBgqGy29UzMLNDxjLza','zxHWB3j0uxvLCNK','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUBwvZC2fNzsa9pt0Gj0rHDgeGDgLKywSGzgL0zw11A2fUjYb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzM91BMqNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGig1LC3nHz2u6icC','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','yxv0B0nHBgn1Bgf0zuzPzwXKCW','icbSzxqGyMfZzvf1zxj5id0GyaOGicaG','DgH4tvm','zgv0ywLSuxvLCNK','zuvoDvy','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YigfKANvZDgaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGywrQDxn0BwvUDhmGyxjYyxKkicaGigLMicGHCMvXlMjVzhKUywrQDxn0BwvUDhmGFhWGiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUywrQDxn0BwvUDhmPihX8ihjLCs5IB2r5lMfKANvZDg1LBNrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNywrQDxn0BwvUDhmGyxjYyxKGAxmGCMvXDwLYzwqGyw5Kig11C3qGBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','mZe0odeYogjxrMP1Aa','iI5YzxbSywnLkcDMAwXLoICSicCNktSkicaGicaGy29UC3qGzMLSzvbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcbYzwXHDgL2zvbHDgGPoWOkicaGicaGAwyGkgzZlMv4Axn0C1n5BMmOzMLSzvbHDgGPksb7cIaGicaGicaGDgvTCgXHDgvZwYi','jZSkicaGia','cI8VienpuLmGzgL0yw5Nyw5PigrPigXLDMvSigfWCcbVBgvOignVCNmGBwLKzgXLD2fYzsaOBgLOyxqGA29UzMLNDxjHC2KGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkcI8VifjLCxvLC3qGsuqGDw50DwSGDhjHy2LUzYdIGjqGC3vWCg9YDcbJB3jYzwXHDgLVBIbjrcbKyxjPihvWC3rYzwfTcNjVDxrLCI51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGCMvXlM15C3fSuMvXDwvZDeLKid0GCMvXlMHLywrLCNnBj3GTy29YCMvSyxrPB24TAwqNxsb8FcbGBxLZCwXFjhTeyxrLlM5VDYGPFv8KE01HDgGUCMfUzg9TkcKUDg9tDhjPBMCOmZyPlNn1yNn0CIGYlca5kx1GoWOGihjLCY5ZzxrizwfKzxiOj1GTq29YCMvSyxrPB24TsuqNlcbYzxeUBxLZCwXszxf1zxn0swqPoWOGihjLCY5ZzxrizwfKzxiOj1GTtxLtuuWTuMvXDwvZDc1jrcCSihjLCs5TExnXBfjLCxvLC3rjzcK7cIaGBMv4DcGPoWP9ktSkcGOklY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbWyxLSB2fKie15u1fmcNjVDxrLCI51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGAwyGkhjLCs5TzxrOB2qGpt09icDqt1nujYKGEWOGicaGlY8Gu2TPCcb2ywXPzgf0Aw9UihvUDhvRigvUzhbVAw50igv4Cg9YDc9PBxbVCNqGkgrPDgfUz2fUAsbVBgvOignLBNrYywXPEMvKigHHBMrSzxiPcIaGicbPzIaOCMvXlNbHDgGUC3rHCNrZv2L0AcGNl2LTCg9YDcCPihX8ihjLCs5WyxrOlNn0yxj0C1DPDgGOjY9LEhbVCNqNksKGEWOGicaGicbYzxr1CM4GBMv4DcGPoWOGicaGFqOGicaGDhj5ihSkicaGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDnAxnZAw5NihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGignVBNn0igvUzhbVAw50id0GCMvXlNbHDgGUC3vIC3rYAw5NkdePoWOkicaGicaGAwyGkgvUzhbVAw50id09psaNzMLYC3qNksb7cIaGicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPicyMihjLCs5IB2r5lNDOzxjLlMXLBMD0Aca9pt0GmsKGEWOGicaGicaGicaGCMvXlMjVzhKUD2HLCMuGpsbYzxeUyM9KEs53AgvYzvSWxtSkicaGicaGicb9cIaGicaGicaGAwyGkcfYzxeUyM9KEs53AgvYzsb8Fcb0ExbLB2yGCMvXlMjVzhKUD2HLCMuGit09icDVyMPLy3qNihX8iefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNv2HLCMuGBxvZDcbIzsbHihnPBMDSzsbJB25KAxrPB24GE2TLEsWGDMfSDwv9jYWkicaGicaGicaGicaGzxHHBxbSztOGEWOGicaGicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6icjMAwvSzf9Uyw1LiIWGiNzHBhvLiJOGiMzPzwXKx3zHBhvLiIb9laOGicaGicaGicaGicaGicjZzwXLy3qIoIbBiMzPzwXKmsiSicjMAwvSzdiIxqOGicaGicaGicaGicb9laOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicaGigLMicHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZihX8ihjLCs5IB2r5lNDOzxjLlMXVz2LJksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGicbTzxnZywDLoIaNqwr2yw5JzwqGD2HLCMuGzM9YBwf0igLZig5VDcbZDxbWB3j0zwqGAw4Gl2zPCNn0igvUzhbVAw50lIbvC2uGl3jLywqGzw5KCg9PBNqGzM9YignVBxbSzxGGCxvLCMLLCYCScIaGicaGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicaGicaID2HLCMuIoIb7icjRzxKIoIaIzMLLBgrFBMfTzsiSicj2ywX1zsi6icjMAwvSzf92ywX1zsiGFqOGicaGicaGicaGicb9laOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNicyMicGHCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj0rftevursbWyxLSB2fKig11C3qGAw5JBhvKzsbHihDOzxjLihbYB3bLCNr5jYWkicaGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6ici','mty2mZm1m0H1Dw5Mua','ifn1yM1VzhvSzsaTie15u1fmierHDgfIyxnLcIOGr2vUzxjHDgvKoIa','A2D6Dfy','jYWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDnEvnrtcbPBMzVigvYCM9YoICSigvYCM9YktSkicaGihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw5MBYbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYbLBMrWB2LUDcbPBMzVjYWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7','C3rYAw5NAwz5','jYWkicaGigrHDgfIyxnLvhLWztOGj215C3fSjYWkicaGihbYAw1HCNLlzxK6icC','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0k','igrHDgeGC3vJy2vZC2z1BgX5ignYzwf0zwqGkhDPDgGGzgv0ywLSigL0zw1ZksCScIaGicaGigrHDge6ihjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsbJCMvHDguG','ksKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0EsaI','iL0GpsbUDwXSoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicb0zw1WBgf0zxnBiG','CMvHzenVBxbVC2L0zq','psr7CMvXlMjVzhLBjW','cIaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGigrLDgfPBezPzwXKCY5WDxnOkgTLEsK7cIaGicaGicaGicbKzxrHAwXwywX1zxmUChvZAcH2ywX1zsK7cIaGicaGicaGicbKzxrHAwXqBgfJzwHVBgrLCNmUChvZAcGNpYCPoWOGicaGicaGih0kicaGicaGFqOkicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGihrOAxmUx2fWCgvUzenYzwf0zuf1zgL0q29SDw1UCYHKzxrHAwXgAwvSzhmSigrLDgfPBfzHBhvLCYWGzgv0ywLSugXHy2vOB2XKzxjZlcbPDgvTlcbLDMvUDenVBNrLEhqPoWOkicaGicaGy29UC3qGzgv0ywLSsw5Zzxj0u3fSid0Gj0Lou0vsvcbjtLrpicCGkYbKzxrHAwXuywjSzuz1BgWGkYaNicGNicSGzgv0ywLSrMLLBgrZlMPVAw4OjYWGjYKGkYaNksbwquXvrvmGkcCGkYbKzxrHAwXqBgfJzwHVBgrLCNmUAM9PBIGNlcaNksaRicCPjZSkicaGicaGy29UC29Szs5SB2COj0v4zwn1DgLUzYbKzxrHAwWGsu5trvjuoICSihSGCxvLCNK6igrLDgfPBeLUC2vYDfnXBcWGDMfSDwvZoIbKzxrHAwXwywX1zxmGFsK7cIaGicaGigf3ywL0ignVBM5Ly3rPB24UzxHLy3v0zsHKzxrHAwXjBNnLCNrtCwWSigrLDgfPBfzHBhvLCYK7cGOGicaGicaVlYbtruXfq1qGyMfJAYbPBNnLCNrLzcbKzxrHAwWkicaGicaGy29UC3qGzgv0ywLSu2vSzwn0u3fSid0Gj1nftevdvcaQiezst00GjYaRigrLDgfPBfrHyMXLrNvSBcaRicCGv0HfuKuGjYaRigrLDgfPBfbRicSGjYa9id8NoWOGicaGicbJB25ZDcbBzgv0ywLSuM93C10GpsbHD2fPDcbJB25Uzwn0Aw9UlMv4zwn1DguOzgv0ywLSu2vSzwn0u3fSlcbBAxrLBvTKzxrHAwXqA11DktSkicaGicaGAwyGkgrLDgfPBfjVD3nBmf0PihSkicaGicaGicbPBNnLCNrLzeL0zw1ZlNb1C2GOzgv0ywLSuM93C1SWxsK7cIaGicaGih0kicaGih0kcIaGicbJB25ZB2XLlMXVzYGNsw5Zzxj0zwqGjYaRigLUC2vYDgvKsxrLBxmUBgvUz3rOicSGjYbKzxrHAwWGAxrLBsHZksCPoWOkicaGic8Vic0TlsbiB29RoIbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0ic0TlqOGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGihzHCIbFy2uYid0GzxzLBNrdB250zxH0lMnVBxbVBMvUDevUz2LUztSkicaGicaGDMfYif9dqJiGpsbLDMvUDenVBNrLEhqUq29UDgv4Dej1AwXKzxi7cIaGicaGihzHCIbFywz0zxjdDhGGpsbFq0iYlMj1AwXKq29TCg9ZAxrLsw5Zzxj0qwz0zxjdB250zxH0kgHLywrLCKrHDgeSigLUC2vYDgvKsgvHzgvYlcbPBNnLCNrLzeL0zw1Zlcb7cIaGicaGicaGDgfIBgvoyw1LoIaN','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGih0','zM9YBwf0','cIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5Yzxn1BhqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5KyxbHDgTHBIbKyxrHia','ifDirvjfia','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGDxnLCL9PzdOGCMvXlMHLywrLCNnBj3vZzxiTAwqNxsb8FcbYzxeUAgvHzgvYC1SNEc11C2vYlwLKj10GFhWGj3n5C3rLBsCScIaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30kicaGicaGicb9cIaGicaGih07cIaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','nZa5mJi2mhLewKfqsq','ihn0AwXSignVBNrHAw5ZicjMAwXLoIiGCMvMzxjLBMnLicG','zM9YBxvSyq','lMDLDerHDgeOEWOGicaGicaGicaGD2HLCMu6ifT7igTLEtOGzMLYC3rdB25KAxrPB24UA2v5lcb2ywX1ztOGzMLYC3rdB25KAxrPB24UDMfSDwuGFv0kicaGicaGicb9ktSkcIaGicaGicaGAwyGkcfLEgLZDgLUz0rHDgeUC3vJy2vZCYb8FcaHzxHPC3rPBMDeyxrHlMrHDgeGFhWGzxHPC3rPBMDeyxrHlMrHDgeUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicaGig1LC3nHz2u6icC','iI5ZDgfYDhnxAxrOkcDMAwXLoICPksb7cIaGicaGignVBNn0ihjLBgf0AxzLugf0Aca9ici','zgv0ywLSvgfIBgu','CM9JDgG','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','DgL0Bgu','ieXjs0uGp2aPoWOGicaGicbWyxjHBxmUChvZAcHGjsr7C2vHCMnOFsvGktSkicaGih0kcIaGicaVlYbbzgqGzxH0CMeGzMLSDgvYCWOGicaGAwyGkgv4DhjHrMLSDgvYCYaMjIbpyMPLy3qUA2v5CYHLEhrYyuzPBhrLCNmPlMXLBMD0Aca+idaPihSkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOzxH0CMfgAwX0zxjZksKGEWOGicaGicaGigLMicH0AgLZlNzHBgLKrMLLBgrZlMLUy2X1zgvZkgTLEsKGjIyGDMfSDwuGit09ig51BgWGjIyGDMfSDwuGit09ihvUzgvMAw5LzcKGEWOGicaGicaGicaGD2HLCMvdB25KAxrPB25ZlNb1C2GOycr7A2v5Fsa9id9GktSkicaGicaGicaGihbHCMfTCY5WDxnOkhzHBhvLktSkicaGicaGicb9cIaGicaGih0kicaGih0kcIaGicbJB25ZDcb3AgvYzunSyxvZzsa9ihDOzxjLq29UzgL0Aw9UCY5Szw5NDgGGpIaWid8Gj1DirvjficCGkYb3AgvYzunVBMrPDgLVBNmUAM9PBIGNieforcaNksa6icCNoWOkicaGignVBNn0ihf1zxj5id0Gyfnftevdvca','lMXLBMD0AdSkicaGih0kicaGigLMicHOzwfKzxjdywXJlNrVDgfSx3f0EsaMjIbOzwfKzxjdywXJlNrVDgfSx3f0Es5ZB3vYy2uPihSkicaGicaGDMfYihf0EuzPzwXKid0GAgvHzgvYq2fSyY50B3rHBf9XDhKUC291CMnLlNjLCgXHy2uOj2L0zw1ZlICSicCNktSkicaGicaGzgf0ys50B3rHBf9XDhKGpsbKyxrHlG','Au5wA1K','cIaGicaGignVBNn0igrLDgfPBezPzwXKCYa9ifTDoWOGicaGicbJB25ZDcbKzxrHAwXwywX1zxmGpsbBxtSkicaGicaGy29UC3qGzgv0ywLSugXHy2vOB2XKzxjZid0Gw107cGOGicaGicbMB3iGkgnVBNn0ifTRzxKSihzHBhvLxsbVzIbpyMPLy3qUzw50CMLLCYHPDgvTksKGEWOGicaGicaGia','iL0GpsaI','cGOGicaGzM9YicHJB25ZDcbPDgvTig9MigrHDgfBzgv0ywLSs2v5xsb8FcbBxsKGEWOGicaGicbPDgvTw2zRxsa9ig1HC3rLCLbRvMfSDwu7cGOGicaGicaVlYbbDxrVlwDLBMvYyxrLifvvsuqGDw50DwSGzgv0ywLSifbligjPBgeGy2XPzw50ihrPzgfRig1LBNL1ChbSEs4kicaGicaGlY8GtxLtuuWGDgLKywSGBwvUzhvRDw5NifjfvfvstKLorYWGC2vOAw5Nz2eGz2vUzxjHDg9YihbLCMX1ig1LBMDLDgfODwKkicaGicaGlY8GBMLSywKGueSGzgKGBxvRysbHz2fYifnftevdvc1IywnRigrHCgf0ig1LlxjLDhjPzxzLihjVDY4Gq29JB2SGDw50DwSkicaGicaGlY8GA29SB20GvKfsq0HbuIberuzbvuXuicHvvuLekcKPoYb1BNr1AYbbvvrpx0Loq1jftuvovcbPBNrLz2vYlcbJBgLLBNqkicaGicaGlY8GAgfYDxmGBwvUz2LYAw0GueSGyxrHDsb0AwrHAYbTzw5Nz3vUywTHBIbLBMrWB2LUDcbJB21WB3nPDguUcIaGicaGigLMicHPDgvTw2rLDgfPBfbRxsa9pt0GDw5KzwzPBMvKihX8igL0zw1Bzgv0ywLSugTDid09psbUDwXSksb7cIaGicaGicaGAxrLBvTKzxrHAwXqA10GpsbYzxf1AxjLkcD1DwLKjYKUDJCOktSkicaGicaGFqO','BwfZDgvYrgv0ywLS','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','nZyYtLH4Dhr0','tKzlthC','cIaGicaVlYbszwnHBgn1Bgf0zsbOzwfKzxiGDg90ywXZcIaGicbJB25ZDcbJywXJDwXHDgLVBNmGpsa','y29SDw1UrM9YBwf0CW','zMLSDgvY','oWOGihrOAxmUAgfZrxHWB3j0uxvLCNKGpsa','cIaGicbJB25ZDcbTB2r1BgvZrgLYid0GCgf0Ac5QB2LUkf9FzgLYBMfTzsWGjW','icb0AgLZlNzHBgLKyxrPB25dB25MAwCGpsb7FtSGlY8GtM8GzMLLBgqGDMfSAwrHDgLVBIbJB25MAwC','lMDLDenVBM5Ly3rPB25jBMzVkcK7cGOGicaGCMvZlMPZB24OEWOGicaGicbZDgf0Dxm6ignVBM5Ly3rPB25jBMzVid8Gj2HLywX0AhKNidOGj3vUA25VD24NlaOGicaGicbLBMrWB2LUDdOGjW','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbpyMPLy3qUyxnZAwDUkgrHDgeSihzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysK7cIaGicb9cGOGicaGAwyGkgrHDgeU','Aw5JBhvKzxm','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','Aw1WB3j0','se53wLm','cIaGicb0CNKGEWOGicaGicb2yxiGCMvZDwX0id0GyxDHAxqG','icbYzxr1CM4Gj1nftevdvcaQiezst00GjYaRihrOAxmUCMvHzfnVDxjJztS','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNuhjPBwfYEsbRzxKGka','jZOGEWOGicaGicaGihr5Cgu6icC','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCWOGicaGAwyGkhjLC3vSDc5KyxrHicyMiefYCMf5lMLZqxjYyxKOCMvZDwX0lMrHDgePksb7cIaGicaGihjLC3vSDc5KyxrHid0GCMvZDwX0lMrHDgeUBwfWkcHPDgvTlcbPBMrLEcKGpt4GkhSkicaGicaGicaUlI5PDgvTlaOGicaGicaGihjVD251BwvYyxrVCJOGB3b0Aw9UCY5ZDgfYDcaRigLUzgv4icSGmqOGicaGicb9ksK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5QC29UkhjLC3vSDcK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUia','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9NkcC','ignVBxbVC2L0zsbYzwfKihn1y2nLC3nMDwW6icCGkYaOCMvZDwX0lMnVDw50ihX8idaPicSGjYbYzwnVCMqOCYKNktSkcIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5Yzxn1BhqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbJB21WB3nPDguGCMvHzca','uwrHEMu','zgf0yxrHyMXLCW','wMrrBge','mtaXmZveEvvWAxO','cIOGrMLLBgrZoIa','mtm0otK3mhDrq251Ca','id0GpYbpuKrfuIbcwsbSAw5Lx251BwjLCIC7','cIOkkIbuywjSztOG','C3rHCNrZv2L0Aa','igrHDgeNlaOGicaGicbKzxrHAwXZoIbLCNjVCI5TzxnZywDLlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','jYWkicaGicaGicbZzxj2AwnLCZOGE30ScIaGicaGicaGywrKAxrPB25HBenVBNrLEhq6ihSkicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicbYzxf1zxn0swq6ihjLCs5Pzcb8FcbUDwXSlaOGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGic8VigrPlwzVCNDHCMqGA2uGD29YA2zSB3CGAg9VAYbJywXSigfNyxiGzw5KCg9PBNqGDhvQDwfUihLHBMCGChvUEwekicaGicaGicaGic8VihjLCxvLC3rty29WzsbHA3rPzIb0zxrHCcbTzw5LCMLTysbYzxeUDxnLCIbKzw5Nyw4GC2nVCguGEwfUzYbZyw1HlGOGicaGicaGicaGyxv0AeHLywrLCJOGCMvXlMHLywrLCNmUyxv0Ag9YAxPHDgLVBIb8FcbUDwXScIaGicaGicaGFqOGicaGicb9oWOkicaGicaGDhj5ihSkicaGicaGicbJB25ZDcb7ihjLC29SDMvtzxj2AwnLCYb9id0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9Zzxj2AwnLlxjLC29SDMvYjYK7cIaGicaGicaGzxzLBNrdB250zxH0lNnLCNzPy2vZid0GCMvZB2X2zvnLCNzPy2vZkcK7cIaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaVlYbtzxj2AwnLihjLC29SDMvYig9WC2LVBMfScIaGicaGih0kcIaGicaGihjLC3vSDca9igf3ywL0ia','jYWkicaGicaGicbMB3jLAwDUs2v5oIaN','zw5HyMXLza','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','cIaGicaVlYbgywXSyMfJAZOGBw9Kzsb0yw5WysbLDMvUDhmkicaGihrYEsb7cIaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','cIaGicbJB25ZDcb3B3jRzMXVD0nVBMzPzYa9ia','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5ZDgf0DxndB2rLid09psa0mdaGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8cIaGicaGicaGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNsw52ywXPzcbHz2DYzwDHDguGzNvUy3rPB24Nksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0LUDMfSAwqGywXPyxmNksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj29UBhKGywXSB3DLzcb3AxrOienpvu5ujYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzgvMAw5LzcbPBIbHz2DYzwDHDguGy29UzMLNjYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUBYbQB2LUigrLzMLUAxrPB25ZigzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigfNz3jLz2f0Aw5Nia','s1HJCKK','iIWGiNzHBhvLiJOGiNLVDxiTDMfSDwuIih1DcIaGicaGicaGicb9laOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIHGrxjYB3iGDMfSAwrHDgLUzYbnEvnrtcbWyxLSB2fKigzVCIaKE3jLCs5WyxrOFtPGlcbLCNjVCIK7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDjBNzHBgLKihbHEwXVywqGzM9YBwf0jYWkicaGicaGicbKzxrHAwXZoIbLCNjVCI5TzxnZywDLlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOGih0kicbUzxH0kcK7cN0PoWOk','tePzEuO','su1JwNm','igrHDgeGywrKzwqGC3vJy2vZC2z1BgX5oIaKE3jLC3vSDc4','iL0GpsbMCY5YzwfKrMLSzvn5BMmOzMLSzvbHDgGSicD1Dgy4jYK7cIaGicaGicaGy29UC29Szs5SB2COyfnrtcbuzw1WBgf0zsa','cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','jYWkicaGicaGicaGigHLywX0AenOzwnRoIbGAhr0CdOVlYr7zgLZCgXHEuHVC3r9oIr7Cg9YDh0VyxbPlW','lMDLDeXVB2T1CerHDgfeEw5HBwLJkhnLyxjJAcWGzxH0CMfgAwX0zxjZksa6cIaGicaGigf3ywL0ia','oWOGicaGy29UC3qGBw9KzwXjBMzVid0GyxDHAxqG','DxbKyxrLzej5','id0GjW','laOGigLTCg9YDenVBMzPzZOG','C2XPy2u','tw9KzwW','A3vrvgW','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','jZSkicaGignVBNn0ihbSDwDPBLbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcaNlI4NlcaNCgX1z2LUCYCSigaKE21VzhvSzu5HBwv9lxbSDwDPBI5QC2aPoWOGicaGBgv0ihbSDwDPBIa9ig51BgW7cIaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicb0CNKGEWOGicaGicaGihbSDwDPBIa9ihjLCxvPCMuOCgX1z2LUugf0AcK7cIaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGihbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqOyxbWlcbJB25MAwCPoWOGicaGicaGih0kicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFsbJyxrJAcaOCgX1z2LUrxjYB3iPihSkicaGicaGicbSB2DNzxiUzxjYB3iOEYbLDMvUDdOGj3bSDwDPBL9SB2fKx2vYCM9YjYWGzxjYB3i6ihbSDwDPBKvYCM9YlM1LC3nHz2uGFsWGyezHAwXLzcb0BYbSB2fKihbSDwDPBJOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGFqOGicaGFqOkicaGic8VieHLywX0AcbJAgvJAYbLBMrWB2LUDaOGicaGyxbWlMDLDcGNl2fWAs8','BMfTzq','Aw5MBW','y29TCg9Uzw50rw5NAw5Lid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY91DgLSCY9JB21WB25LBNqTzw5NAw5LjYKUy29TCg9Uzw50rw5NAw5LoWO','icHnEvnrtcbeyxrHyMfZzsKkicOGqhbHCMfTihTpyMPLy3r9ignVBMzPzYaTieTVBMzPz3vYyxnPihvUDhvRig1LBMPHBgfUA2fUig1VzhvScIaQiebWyxjHBsb7BNvTyMvYFsbJB25MAwCUCg9YDcaTifbVCNqGDw50DwSGC2vYDMvYcIaQiebWyxjHBsb7C3rYAw5NFsbJB25MAwCUA2v5ic0GqvbjieTLEsaOB3bZAw9UywWPcIaQiebYzxr1CM5ZihTqCM9TAxnLphzVAwq+FsbqCM9TAxnLihLHBMCGDgLKywSGCgvYBMfOihjLC29SDMuGywDHCIbZzxj2zxiGDgv0yxaGyMvYAMfSyw4kicOVcMfZEw5Jigz1BMn0Aw9Uigv4zwn1DguOy29UzMLNksb7cIaGCMv0DxjUig5LDYbqCM9TAxnLkcHYzxnVBhzLksa9pIb7cIaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicbJB25ZDcbWB3j0id0Gy29UzMLNlNbVCNqGFhWGmZaWmdSkicaGignVBNn0ihnLCNzLCKfKzhjLC3mGpsbJB25MAwCUC2vYDMvYqwrKCMvZCYb8FcaNmc4WlJaUmcC7cIaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','lMfKzerHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbjtLnfuLqGy29TCgXLDgvKihDPDgHVDxqGzxzLBNrZjYK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDieLou0vsvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','l2fKANvZDcaTie15u1fmiefKANvZDcaOyxrVBwLJigLUy3jLBwvUDc9KzwnYzw1LBNqPcNjVDxrLCI5WB3n0kcCVywrQDxn0jYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VifzHBgLKyxnPihbHEwXVywqkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihbYAw1HCNKGA2v5cIaGicbJB25ZDcbWCMLTyxj5s2v5id0GjW','jZSkicaGignVBNn0igzRid0GjW','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGDMfYihjLC3vSDca9igf3ywL0ia','BNvSBa','DxbKyxrLq29TCg9ZAxrL','zM9YzwLNBKTLEq','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','CwrTzLe','lY8Gue9tvcaVyxbPlW','cIOGqwn0Aw9UCZOG','oWOGicaGy29UC3qGCMvJywXJrMLLBgrZid0Gw107cIaGicbJB25ZDcbYzwnHBgnwywX1zxmGpsbBxtSkcIaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx2L0zw1Zksb7cIaGicaGihjLy2fSy0zPzwXKCY5WDxnOkcD0B3rHBf9PDgvTCYa9id8NktSkicaGicaGCMvJywXJvMfSDwvZlNb1C2GOywXSsxrLBxmUBgvUz3rOktSkicaGih0kicaGigLMicHJywXJDwXHDgLVBNmUDg90ywXFCxr5icyMignHBgn1Bgf0Aw9UCY50B3rHBf9XDhKUC291CMnLksb7cIaGicaGignVBNn0ihf0EuzPzwXKid0Gy2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicbJB25ZDcb0B3rHBff0Esa9igfSBeL0zw1ZlNjLzhvJzsHMDw5JDgLVBIHZDw0SigL0zw0PihSGCMv0DxjUihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPoYb9lcaWktSkicaGicaGCMvJywXJrMLLBgrZlNb1C2GOj3rVDgfSx3f0Esa9id8NktSkicaGicaGCMvJywXJvMfSDwvZlNb1C2GODg90ywXrDhKPoWOGicaGFqOGicaG','y29Kzq','lNvWzgf0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4Da','BwXWsui','ie9srevsiejzia','l2HLywX0AgaScIaGicaGicaGicbZzxj2AwnLsw5MBZOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9l2fWAs8','jhT0AgLZlMDLDfrHyMXLu291CMnLkcDYzwfKjYL9','jYWkicaGicaGzgf0ywjHC2u6icDTExnXBcCScIaGicaGignVBM5Ly3rPB246ignVBM5Ly3rPB25jBMzVid8Gj2fJDgL2zsCGoIaNDw5RBM93BICScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGCMvZlNn0yxr1CYG1mdmPlMPZB24OEWOGicaGicbZDgf0Dxm6icD1BMHLywX0AhKNlaOGicaGicbLBMrWB2LUDdOGjW','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0Gj0vsx0rvuf9ftLrswsCGFhWGzxjYB3iUzxjYBM8Gpt09ideWnJiPihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrQDxn0Aw5Nia','y3jLyxrL','igrHDgeGywrQDxn0zwqGC3vJy2vZC2z1BgX5oIa','ydSkcIaGicaVlYbcDwLSzcbxsevsrsbJBgf1C2uGAMLRysbHzgekicaGigLMicGOB3b0Aw9UCY53AgvYzsaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUD2HLCMuPicyMig9WDgLVBNmUD2HLCMuUBgvUz3rOid4GmcKGFhWkicaGicaGicaOB3b0Aw9UCY53AgvYzsaMjIbVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmPicyMig9WDgLVBNmUD2HLCMuUy29UzgL0Aw9UCY5Szw5NDgGGpIaWksKGEWOGicaGicb0CNKGEWOGicaGicaGignVBNn0ihDOzxjLuMvZDwX0id0GDgHPCY5IDwLSzenVBxbSzxHxAgvYzunSyxvZzsHVChrPB25ZlNDOzxjLlcbWyxjHBxmPoWOGicaGicaGihf1zxj5icS9iga','l2XVB2T1CcaTie15u1fmier5BMfTAwmGtg9VA3vWcNjVDxrLCI5NzxqOjY9SB29RDxaNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicbJB25ZDcbTExnXBfjLCxvLC3rjzca9ihjLCs5TExnXBfjLCxvLC3rjzdSkcIaGDhj5ihSkicaGignVBNn0ihjLCxvLC3rnB2rLid0GCMvXlMHLywrLCNnBj3GTCMvXDwvZDc1TB2rLj107cGOGicaGAwyGkhjLCxvLC3rnB2rLice9psaNzhLUyw1PyYCPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGuMvXDwvZDcbnB2rLjYWkicaGicaGicbTzxnZywDLoIaNwc1szxf1zxn0lu1VzguGAgvHzgvYig11C3qGyMuGC2v0ihrVigr5BMfTAwmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigXLDcbZzwfYy2GGpsbYzxeUCxvLCNKUC2vHCMnOihX8icCNoWOGicaGAwyGkefYCMf5lMLZqxjYyxKOC2vHCMnOksKGEWOGicaGicbZzwfYy2GGpsbZzwfYy2HBmf0GFhWGjYC7cIaGicb9cGOGicaGlY8Gu2vHCMnOigXLBMD0Acb2ywXPzgf0Aw9UcIaGicbPzIaOC2vHCMnOlMXLBMD0Aca+ideWmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNu2vHCMnOifrVBYbmB25NjYWkicaGicaGicbTzxnZywDLoIaNu2vHCMnOihbHCMfTzxrLCIbTDxn0ig5VDcbLEgnLzwqGmtaWignOyxjHy3rLCNmNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNnVBguUBg9NkgbBtxLtuuWTteTqxsaKE215C3fSuMvXDwvZDeLKFsbKEw5HBwLJihnLyxjJAdOGjhTZzwfYy2H9ycK7cGOGicaGlY8Gq29SBgvJDcbLEhrYysbMAwX0zxjZigrHCMKGCxvLCNKGCgfYyw1ZcIaGicbJB25ZDcbLEhrYyuzPBhrLCNmGpsb7FtSkicaGigzVCIaOy29UC3qGw2TLEsWGDMfSDwvDig9Mie9IAMvJDc5LBNrYAwvZkhjLCs5XDwvYEsKPihSkicaGicaGAwyGkgTLEsaHpt0Gj3nLyxjJAcCGjIyG','laOGihvWBg9HzenVBMzPzZOG','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','mtyZnNnLBe5OvG','CMvXDwvZDfnJB3bL','zMLSztO','whjyr2m','Bg9VA3vWrMLLBgrZ','CMvJB3jKswq','ignVBxbVC2L0zsb1CgrHDguGC3vJy2vZC2z1BdOG','jZSkicaGignVBNn0igHLywrLCKrHDgeGpsb7ic4UlMrHDgeGFtSkicaGigrLBgv0zsbOzwfKzxjeyxrHw2rLDgfPBeTLEv07cGOGicaGlY8Gls0TieHVB2S6ig9UqMvMB3jLq29TCg9ZAxrLsw5Zzxj0ic0TlqOGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGihzHCIbFy2uGpsbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5LoWOGicaGicb2yxiGx0ncid0GzxzLBNrdB250zxH0lKnVBNrLEhrcDwLSzgvYoWOGicaGicb2yxiGx2rLDgfPBeL0zw1Zid0Gzgf0yvTKzxrHAwXlzxLDihX8ifTDoWOGicaGicb2yxiGx2jLzM9Yzun0Eca9if9dqI5IDwLSzenVBxbVC2L0zuLUC2vYDejLzM9YzunVBNrLEhqOAgvHzgvYrgf0ysWGx2rLDgfPBeL0zw1Zlcb7cIaGicaGicaGDgfIBgvoyw1LoIaN','ydSkicaGih0k','Dg9ju09tDhjPBMC','DhLWzq','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOGicaGicaGihzHCIbYzxn1BhqGpsbHD2fPDca','lMDLDeXPC3qOB3b0Aw9UCYK7cGOGicaGlY8GrM9YBwf0ihjLC3bVBNnLigjLCMrHC2fYA2fUig1VzgukicaGigLMicHWywDPBMf0zsKGEWOGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGzgf0ytOGCMvZDwX0lMrHDgeScIaGicaGicaGy291BNq6ihjLC3vSDc5KyxrHid8GCMvZDwX0lMrHDgeUBgvUz3rOidOGmcWkicaGicaGicbWywDPBMf0Aw9UoIbYzxn1BhqUCgfNAw5HDgLVBIWkicaGicaGicbTzxnZywDLoIaNrgf0ysbYzxrYAwv2zwqGC3vJy2vZC2z1BgX5jWOGicaGicb9ktSkicaGih0GzwXZzsb7cIaGicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGicbKyxrHoIbYzxn1BhqUzgf0ysWkicaGicaGicbJB3vUDdOGCMvZDwX0lMrHDgeGpYbYzxn1BhqUzgf0ys5Szw5NDgGGoIaWcIaGicaGih0PoWOGicaGFqOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIa','ywDNCMvNyxrL','ktSkicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbbrePvu1qGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqO','lY8GtM8Gywr2yw5JzwqGCxvLCMLLCYbKzwzPBMvK','y3jLyxrLq29TCg9ZAxrL','lMfKzerHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cIaGicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicb0CNKGEWOGicaGicaGihzHCIbYzxn1BhqGpsbHD2fPDca','A3vRsw0','ANvKDwW','AwyGkgDLBMvYyxrLzezPzwXKCY5PBMnSDwrLCYHRzxKPksbJB250Aw51ztS','zMLUza','oWOkicaGicaGDMfYihzHBgLKyxrPB24GpsbHD2fPDca','ignVBxbVC2L0zsbKyxrHjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','ycK7cG','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUBwvZC2fNzsa9pt0Gj1jLy29YzcbUB3qGzM91BMqNihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbMB3vUzcCPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGBwvZC2fNztOGjW','BwfW','Aw1WB3j0q29UzMLN','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqNlaOGicaGicbKyxrHoIbYzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NDxbKyxrLigrHDgeG','DxbSB2fKq29UzMLN','ieXjtuLuideWmga7cIaGicbJB25ZDcbWyxjHBxmGpsbBycuKE3nLyxjJAcb8FcaNj30Lyf07cIaGicbJB25ZDcbKyxrHid0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5khf1zxj5lcbWyxjHBxmPoWOkicaGignVBNn0ihjLC3vSDca9igrHDgeUBwfWkgL0zw0Gpt4GkhSkicaGicaGAwq6igL0zw0U','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUzxjYBM8Gpt09ideWnJiPihSkicaGicaGy29UC3qGzgv0ywLSCYa9igj1AwXKrhvWBgLJyxrLrgv0ywLSCYHLCNjVCIWGrfvqx0nptLnuuKfjtLrFrKLftertktSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGlI4UkgrLDgfPBhmGpYb7igrLDgfPBhmGFsa6ihT9ksWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kicaGigLMicHLCNjVCI5LCNjUBYa9pt0Gmtq1mIKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy3jLyxrPBMCG','zw50CMLLCW','cGOGicaGy29UC3qGzgv0ywLSt3bLCMf0Aw9UCYa9igrHDgfBzgv0ywLSs2v5xsb8Fcb7FtSkicaGignVBNn0ihSGAw5Zzxj0oIbPBNnLCNrjDgvTCYa9ifTDlcb1CgrHDgu6ihvWzgf0zuL0zw1Zid0Gw10SigrLBgv0ztOGzgvSzxrLsxrLBxmGpsbBxsb9id0Gzgv0ywLSt3bLCMf0Aw9UCZSkcIaGicbJB25ZDcbKzwXLDgvKsxrLBxmGpsbBxtSkicaGignVBNn0ihvWzgf0zwrjDgvTCYa9ifTDoWOGicaGy29UC3qGAw5Zzxj0zwrjDgvTCYa9ifTDoWOkicaGic8VideUierftevursbVCgvYyxrPB25ZcIaGicbMB3iGkgnVBNn0igL0zw0GB2yGzgvSzxrLsxrLBxmPihSkicaGicaGAwyGkcfPDgvTw2rLDgfPBfbRxsKGDgHYB3CGBMv3ievYCM9YkcDnAxnZAw5NicCGkYbKzxrHAwXqAYaRicCGAw4GzgvSzxrLig9WzxjHDgLVBICPoWOGicaGicbJB25ZDcbKzwXtCwWGpsaNrevmrvrfiezst00GjYaRigrLDgfPBfrHyMXLrNvSBcaRicCGv0HfuKuGjYaRigrLDgfPBfbRicSGjYa9id8NoWOGicaGicbHD2fPDcbJB25Uzwn0Aw9UlMv4zwn1DguOzgvSu3fSlcbBAxrLBvTKzxrHAwXqA11DktSkicaGicaGzgvSzxrLzeL0zw1ZlNb1C2GOAxrLBsK7cIaGicb9cIaGicbJB25ZB2XLlMXVzYGNrgvSzxrLzcaNicSGzgvSzxrLzeL0zw1ZlMXLBMD0AcaRicCGzgv0ywLSigL0zw0OCYKNktSkcIaGicaVlYaYlIbvuerbveuGB3bLCMf0Aw9UCWOGicaGzM9YicHJB25ZDcbPDgvTig9MihvWzgf0zuL0zw1Zksb7cIaGicaGigLMicGHAxrLBvTKzxrHAwXqA10PihrOCM93ig5LDYbfCNjVCIGNtwLZC2LUzYaNicSGzgv0ywLSugSGkYaNigLUihvWzgf0zsbVCgvYyxrPB24NktSk','cIaGlY8GrMXHzYb1BNr1AYbZzwXMlwrVy3vTzw50Aw5NiefqssaOzw5KCg9PBNqGl2LUzM8PcIaGDgHPCY5OyxnwAwv3uxvLCNKGpsa','C291CMnL','BNvTyMvY','ChjPy2vgAwvSza','ywrQDxn0','BgvUz3rO','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8Gq1jfqvrflunptvbpu0LursaVifvqrefurs1dt01qt1njveu6igzVCMnLihnJB3bLignVBhvTBIbPBNnPzguGBwfZDgvYigjVzhKUcIaGAwyGkgvUzhbVAw50id09psaNy3jLyxrLlwnVBxbVC2L0zsCGFhWGzw5KCg9PBNqGpt09icD1CgrHDguTy29TCg9ZAxrLjYKGEWOGicaGy29UC3qGBwfZDgvYqM9KEsa9ihjLCs5IB2r5wYC','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFqOk','cIaGicaGih07cIaGicaGigLMicHPDgvTlG','ieXjtuLuideWmdbGoWOGicaGy29UC3qGzgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsK7cGOGicaGlY8Gq2fJAguGCMvZDwX0ihrHBNbHihnLBgvJDgvKigzSywCkicaGignVBNn0ignHy2HLrgf0ysa9igrHDgeUBwfWkgL0zw0Gpt4GkhSkicaGicaGAwq6igL0zw0U','cIaGDhj5ihSkicaGigLMicH0ExbLB2yGiG','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','lMfNz3jLz2f0zurHDgeOCMvXlMjVzhKGFhWGE30SigfNz3jLz2f0zunVBMzPzYK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fNCMvNyxnPigrHDgeG','ksb8FcaWoWOGicaGicaGihzHCIbWCMLJzsa9ie51BwjLCIHPDgvTlG','oWOGigLMicHZy29WzvzHBhvLid09psb1BMrLzMLUzwqGFhWGC2nVCgvwywX1zsa9pt0GBNvSBcKGEWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaZks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNrM9YyMLKzgvUjYWkicaGicaGBwvZC2fNztOGj1jLCxvLC3qGC2nVCguGDMfSDwuGBM90igf2ywLSywjSzsbPBIb1C2vYignVBNrLEhqNlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqOkicaVlYbfEhbVC2uGC2nVCguGAw5MBYbMB3iGCM91DguGAgfUzgXLCNmGkg93BMvYC2HPCcb2zxjPzMLJyxrPB24GAw4Gl2zPCNn0lcaVDxbKyxrLlcaVDxbKyxrLlwnVBxbVC2L0zsKkicbYzxeUx3jLCxvLC3rty29Wzsa9ihSGy29SDw1UoIaN','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbYzwfKAw5Nia','DMfSAwrHDgLVBNm','CMvWBgfJzq','cIaGicbJB25ZB2XLlMXVzYGNq2fSy3vSyxrLzcb0B3rHBhm6jYWGEYb0B3rHBf9PDgvTCZOGzgf0ys50B3rHBf9PDgvTCYWGDg90ywXFCxr5oIbKyxrHlNrVDgfSx3f0EsWGDg90ywXFyw1VDw50oIbKyxrHlNrVDgfSx2fTB3vUDcb9ktSkicaGia','zgf0yxrHyMXLC1DOzxjL','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','BhPoqxm','AxrLBxmU','C3rYAw5N','zMLLBgrqB2XPy3K','DgfIBgvoyw1L'];a0_0x4d9b=function(){return _0x500f4c;};return a0_0x4d9b();}