sonamu 0.6.0 → 0.7.1
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.
- package/.swcrc.project-default +18 -0
- package/bin/cli.js +24 -0
- package/dist/ai/agents/agent.d.ts +11 -0
- package/dist/ai/agents/agent.d.ts.map +1 -0
- package/dist/ai/agents/agent.js +65 -0
- package/dist/ai/agents/index.d.ts +3 -0
- package/dist/ai/agents/index.d.ts.map +1 -0
- package/dist/ai/agents/index.js +4 -0
- package/dist/ai/agents/types.d.ts +43 -0
- package/dist/ai/agents/types.d.ts.map +1 -0
- package/dist/ai/agents/types.js +3 -0
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +3 -0
- package/dist/ai/providers/rtzr/api.d.ts +22 -0
- package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/api.js +28 -0
- package/dist/ai/providers/rtzr/error.d.ts +18 -0
- package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/error.js +29 -0
- package/dist/ai/providers/rtzr/index.d.ts +5 -0
- package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/index.js +6 -0
- package/dist/ai/providers/rtzr/model.d.ts +52 -0
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/model.js +137 -0
- package/dist/ai/providers/rtzr/options.d.ts +7 -0
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/options.js +47 -0
- package/dist/ai/providers/rtzr/provider.d.ts +18 -0
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/provider.js +54 -0
- package/dist/ai/providers/rtzr/utils.d.ts +19 -0
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/utils.js +88 -0
- package/dist/api/base-frame.d.ts +2 -2
- package/dist/api/base-frame.d.ts.map +1 -1
- package/dist/api/base-frame.js +2 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +6 -1
- package/dist/api/code-converters.d.ts +58 -14
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +178 -409
- package/dist/api/config.d.ts +27 -13
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +19 -26
- package/dist/api/context.d.ts +4 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/decorators.d.ts +20 -6
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +111 -18
- package/dist/api/index.d.ts +2 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -3
- package/dist/api/sonamu.d.ts +7 -7
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +83 -51
- package/dist/api/validator.d.ts +6 -0
- package/dist/api/validator.d.ts.map +1 -0
- package/dist/api/validator.js +81 -0
- package/dist/bin/build-config.d.ts +5 -1
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +5 -2
- package/dist/bin/cli.js +165 -64
- package/dist/bin/loader-register.d.ts +2 -0
- package/dist/bin/loader-register.d.ts.map +1 -0
- package/dist/bin/loader-register.js +34 -0
- package/dist/database/_batch_update.d.ts +5 -3
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +30 -13
- package/dist/database/base-model.d.ts +96 -10
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +232 -89
- package/dist/database/base-model.types.d.ts +93 -0
- package/dist/database/base-model.types.d.ts.map +1 -0
- package/dist/database/base-model.types.js +10 -0
- package/dist/database/code-generator.d.ts +1 -1
- package/dist/database/code-generator.d.ts.map +1 -1
- package/dist/database/code-generator.js +11 -10
- package/dist/database/db.d.ts +5 -6
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +22 -25
- package/dist/database/puri-subset.test-d.js +81 -0
- package/dist/database/puri-subset.types.d.ts +123 -0
- package/dist/database/puri-subset.types.d.ts.map +1 -0
- package/dist/database/puri-subset.types.js +16 -0
- package/dist/database/puri-wrapper.d.ts +13 -11
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +2 -2
- package/dist/database/puri.d.ts +25 -14
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +83 -21
- package/dist/database/puri.types.d.ts +21 -7
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +4 -1
- package/dist/database/transaction-context.d.ts +1 -1
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +1 -1
- package/dist/database/upsert-builder.d.ts +9 -3
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +227 -78
- package/dist/entity/entity-manager.d.ts +165 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +26 -10
- package/dist/entity/entity.d.ts +5 -3
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +153 -54
- package/dist/exceptions/error-handler.d.ts +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +1 -1
- package/dist/exceptions/so-exceptions.d.ts +1 -1
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +1 -1
- package/dist/file-storage/driver.d.ts +1 -1
- package/dist/file-storage/driver.d.ts.map +1 -1
- package/dist/file-storage/driver.js +1 -1
- package/dist/file-storage/file-storage.js +2 -2
- package/dist/index.d.ts +18 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -13
- package/dist/migration/code-generation.d.ts +1 -1
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +123 -67
- package/dist/migration/migration-set.d.ts +2 -10
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +67 -218
- package/dist/migration/migrator.d.ts +24 -73
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +121 -301
- package/dist/migration/postgresql-schema-reader.d.ts +51 -0
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
- package/dist/migration/postgresql-schema-reader.js +245 -0
- package/dist/migration/types.d.ts +6 -38
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/migration/types.js +1 -1
- package/dist/naite/messaging-types.d.ts +43 -0
- package/dist/naite/messaging-types.d.ts.map +1 -0
- package/dist/naite/messaging-types.js +7 -0
- package/dist/naite/naite-reporter.d.ts +41 -0
- package/dist/naite/naite-reporter.d.ts.map +1 -0
- package/dist/naite/naite-reporter.js +102 -0
- package/dist/naite/naite.d.ts +91 -8
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +285 -41
- package/dist/stream/sse.d.ts +2 -2
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +1 -1
- package/dist/syncer/api-parser.d.ts +3 -13
- package/dist/syncer/api-parser.d.ts.map +1 -1
- package/dist/syncer/api-parser.js +67 -56
- package/dist/syncer/checksum.d.ts +2 -2
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +11 -11
- package/dist/syncer/code-generator.d.ts +3 -3
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +37 -17
- package/dist/syncer/entity-operations.d.ts +2 -2
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +9 -8
- package/dist/syncer/file-patterns.d.ts +1 -1
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +1 -1
- package/dist/syncer/index.d.ts +4 -4
- package/dist/syncer/index.d.ts.map +1 -1
- package/dist/syncer/index.js +5 -5
- package/dist/syncer/module-loader.d.ts +4 -4
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +17 -12
- package/dist/syncer/syncer.d.ts +31 -24
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +92 -45
- package/dist/template/entity-converter.d.ts +1 -1
- package/dist/template/entity-converter.d.ts.map +1 -1
- package/dist/template/entity-converter.js +15 -8
- package/dist/template/helpers.d.ts +2 -2
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +3 -3
- package/dist/template/implementations/entity.template.d.ts +2 -2
- package/dist/template/implementations/entity.template.d.ts.map +1 -1
- package/dist/template/implementations/entity.template.js +4 -5
- package/dist/template/implementations/generated.template.d.ts +2 -3
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +46 -29
- package/dist/template/implementations/generated_http.template.d.ts +2 -3
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +9 -9
- package/dist/template/implementations/generated_sso.template.d.ts +3 -4
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +54 -25
- package/dist/template/implementations/init_types.template.d.ts +2 -2
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +2 -2
- package/dist/template/implementations/model.template.d.ts +2 -2
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +47 -37
- package/dist/template/implementations/model_test.template.d.ts +2 -2
- package/dist/template/implementations/model_test.template.d.ts.map +1 -1
- package/dist/template/implementations/model_test.template.js +2 -2
- package/dist/template/implementations/service.template.d.ts +4 -4
- package/dist/template/implementations/service.template.d.ts.map +1 -1
- package/dist/template/implementations/service.template.js +24 -16
- package/dist/template/implementations/view_enums_buttonset.template.d.ts +2 -2
- package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_buttonset.template.js +1 -1
- package/dist/template/implementations/view_enums_dropdown.template.d.ts +2 -2
- package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_dropdown.template.js +2 -2
- package/dist/template/implementations/view_enums_select.template.d.ts +2 -2
- package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_select.template.js +2 -2
- package/dist/template/implementations/view_form.template.d.ts +2 -2
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +4 -4
- package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
- package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_all_select.template.js +1 -1
- package/dist/template/implementations/view_id_async_select.template.d.ts +2 -2
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_async_select.template.js +1 -1
- package/dist/template/implementations/view_list.template.d.ts +2 -2
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +29 -19
- package/dist/template/implementations/view_list_columns.template.d.ts +3 -3
- package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list_columns.template.js +1 -1
- package/dist/template/implementations/view_search_input.template.d.ts +2 -2
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +1 -1
- package/dist/template/index.d.ts +4 -2
- package/dist/template/index.d.ts.map +1 -1
- package/dist/template/index.js +5 -3
- package/dist/template/template-manager.d.ts +56 -0
- package/dist/template/template-manager.d.ts.map +1 -0
- package/dist/template/template-manager.js +125 -0
- package/dist/template/template-types.d.ts +16 -0
- package/dist/template/template-types.d.ts.map +1 -0
- package/dist/template/template-types.js +7 -0
- package/dist/template/template.d.ts +12 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +19 -6
- package/dist/template/zod-converter.d.ts +40 -7
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +386 -58
- package/dist/testing/_relation-graph.d.ts +1 -1
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +12 -3
- package/dist/testing/fixture-manager.d.ts +42 -11
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +338 -236
- package/dist/types/types.d.ts +709 -104
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +309 -52
- package/dist/typings/knex.d.js +2 -2
- package/dist/utils/async-utils.d.ts.map +1 -1
- package/dist/utils/async-utils.js +3 -3
- package/dist/utils/console-util.js +1 -1
- package/dist/utils/controller.d.ts +1 -0
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +4 -1
- package/dist/utils/esm-utils.d.ts +0 -6
- package/dist/utils/esm-utils.d.ts.map +1 -1
- package/dist/utils/esm-utils.js +2 -9
- package/dist/utils/formatter.d.ts +3 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +110 -0
- package/dist/utils/fs-utils.d.ts +1 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +1 -1
- package/dist/utils/lodash-able.d.ts.map +1 -1
- package/dist/utils/lodash-able.js +1 -1
- package/dist/utils/object-utils.d.ts +44 -0
- package/dist/utils/object-utils.d.ts.map +1 -0
- package/dist/utils/object-utils.js +191 -0
- package/dist/utils/path-utils.d.ts +1 -1
- package/dist/utils/path-utils.d.ts.map +1 -1
- package/dist/utils/path-utils.js +3 -3
- package/dist/utils/process-utils.js +1 -1
- package/dist/utils/sql-parser.d.ts +5 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +14 -3
- package/dist/utils/type-utils.d.ts +23 -0
- package/dist/utils/type-utils.d.ts.map +1 -0
- package/dist/utils/type-utils.js +45 -0
- package/dist/utils/utils.d.ts +7 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +44 -5
- package/dist/utils/zod-error.d.ts +1 -1
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +1 -1
- package/package.json +55 -30
- package/src/ai/agents/agent.ts +87 -0
- package/src/ai/agents/index.ts +2 -0
- package/src/ai/agents/types.ts +47 -0
- package/src/ai/index.ts +1 -0
- package/src/ai/providers/rtzr/api.ts +37 -0
- package/src/ai/providers/rtzr/error.ts +34 -0
- package/src/ai/providers/rtzr/index.ts +4 -0
- package/src/ai/providers/rtzr/model.ts +201 -0
- package/src/ai/providers/rtzr/options.ts +49 -0
- package/src/ai/providers/rtzr/provider.ts +91 -0
- package/src/ai/providers/rtzr/utils.ts +127 -0
- package/src/api/base-frame.ts +4 -2
- package/src/api/caster.ts +17 -23
- package/src/api/code-converters.ts +176 -533
- package/src/api/config.ts +39 -56
- package/src/api/context.ts +7 -18
- package/src/api/decorators.ts +175 -46
- package/src/api/index.ts +2 -2
- package/src/api/sonamu.ts +133 -124
- package/src/api/validator.ts +83 -0
- package/src/bin/build-config.ts +7 -1
- package/src/bin/cli.ts +192 -110
- package/src/bin/loader-register.ts +38 -0
- package/src/database/_batch_update.ts +46 -31
- package/src/database/base-model.ts +390 -182
- package/src/database/base-model.types.ts +155 -0
- package/src/database/code-generator.ts +13 -32
- package/src/database/db.ts +36 -50
- package/src/database/puri-subset.test-d.ts +471 -0
- package/src/database/puri-subset.types.ts +195 -0
- package/src/database/puri-wrapper.ts +58 -67
- package/src/database/puri.ts +182 -126
- package/src/database/puri.types.ts +64 -31
- package/src/database/transaction-context.ts +1 -1
- package/src/database/upsert-builder.ts +261 -132
- package/src/entity/entity-manager.ts +36 -28
- package/src/entity/entity.ts +330 -249
- package/src/exceptions/error-handler.ts +3 -3
- package/src/exceptions/so-exceptions.ts +11 -11
- package/src/file-storage/driver.ts +5 -5
- package/src/file-storage/file-storage.ts +2 -2
- package/src/index.ts +18 -12
- package/src/migration/code-generation.ts +185 -172
- package/src/migration/migration-set.ts +80 -293
- package/src/migration/migrator.ts +182 -425
- package/src/migration/mysql-schema-reader.ts.txt +272 -0
- package/src/migration/postgresql-schema-reader.ts +310 -0
- package/src/migration/types.ts +6 -39
- package/src/naite/messaging-types.ts +51 -0
- package/src/naite/naite-reporter.ts +128 -0
- package/src/naite/naite.ts +378 -33
- package/src/shared/web.shared.ts.txt +20 -24
- package/src/stream/sse.ts +5 -5
- package/src/syncer/api-parser.ts +52 -69
- package/src/syncer/checksum.ts +25 -37
- package/src/syncer/code-generator.ts +58 -62
- package/src/syncer/entity-operations.ts +12 -15
- package/src/syncer/file-patterns.ts +2 -2
- package/src/syncer/index.ts +4 -4
- package/src/syncer/module-loader.ts +28 -25
- package/src/syncer/syncer.ts +155 -162
- package/src/template/entity-converter.ts +18 -27
- package/src/template/helpers.ts +8 -11
- package/src/template/implementations/entity.template.ts +6 -6
- package/src/template/implementations/generated.template.ts +99 -99
- package/src/template/implementations/generated_http.template.ts +21 -54
- package/src/template/implementations/generated_sso.template.ts +78 -65
- package/src/template/implementations/init_types.template.ts +4 -6
- package/src/template/implementations/model.template.ts +47 -38
- package/src/template/implementations/model_test.template.ts +3 -3
- package/src/template/implementations/service.template.ts +56 -80
- package/src/template/implementations/view_enums_buttonset.template.ts +2 -2
- package/src/template/implementations/view_enums_dropdown.template.ts +4 -4
- package/src/template/implementations/view_enums_select.template.ts +3 -3
- package/src/template/implementations/view_form.template.ts +34 -75
- package/src/template/implementations/view_id_all_select.template.ts +2 -2
- package/src/template/implementations/view_id_async_select.template.ts +9 -23
- package/src/template/implementations/view_list.template.ts +54 -95
- package/src/template/implementations/view_list_columns.template.ts +4 -10
- package/src/template/implementations/view_search_input.template.ts +2 -2
- package/src/template/index.ts +4 -2
- package/src/template/template-manager.ts +166 -0
- package/src/template/template-types.ts +16 -0
- package/src/template/template.ts +29 -10
- package/src/template/zod-converter.ts +459 -101
- package/src/testing/_relation-graph.ts +18 -11
- package/src/testing/fixture-manager.ts +468 -362
- package/src/types/types.ts +516 -248
- package/src/typings/knex.d.ts +7 -9
- package/src/utils/async-utils.ts +8 -12
- package/src/utils/console-util.ts +1 -1
- package/src/utils/controller.ts +3 -0
- package/src/utils/esm-utils.ts +8 -18
- package/src/utils/formatter.ts +109 -0
- package/src/utils/fs-utils.ts +1 -1
- package/src/utils/lodash-able.ts +1 -4
- package/src/utils/object-utils.ts +217 -0
- package/src/utils/path-utils.ts +3 -6
- package/src/utils/process-utils.ts +1 -1
- package/src/utils/sql-parser.ts +23 -5
- package/src/utils/type-utils.ts +83 -0
- package/src/utils/utils.ts +58 -9
- package/src/utils/zod-error.ts +3 -3
- package/dist/bin/cli-wrapper.d.ts +0 -3
- package/dist/bin/cli-wrapper.d.ts.map +0 -1
- package/dist/bin/cli-wrapper.js +0 -72
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
- package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -39
- package/dist/entity/entity-utils.d.ts +0 -61
- package/dist/entity/entity-utils.d.ts.map +0 -1
- package/dist/entity/entity-utils.js +0 -210
- package/src/bin/cli-wrapper.ts +0 -82
- package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
- package/src/entity/entity-utils.ts +0 -291
|
@@ -1,17 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* zod-converter 구성
|
|
3
|
+
* 1. 유틸리티
|
|
4
|
+
* - getZodTypeById
|
|
5
|
+
*
|
|
6
|
+
* 2. Zod 타입 변환 (EntityProp -> ZodType)
|
|
7
|
+
* - propToZodType
|
|
8
|
+
*
|
|
9
|
+
* 3. EntityProp/Node -> Zod 코드 문자열
|
|
10
|
+
* - propToZodTypeDef
|
|
11
|
+
* - propNodeToZodTypeDef
|
|
12
|
+
*
|
|
13
|
+
* 4. Zod 타입 인스턴스를 해당하는 Zod 코드 문자열로 변환 (ZodType -> ZodCode)
|
|
14
|
+
* - zodTypeToZodCode
|
|
15
|
+
*
|
|
16
|
+
* 5. Zod 타입을 UI 렌더링에 사용할 수 있는 RenderingNode로 변환 (ZodType -> RenderingNode)
|
|
17
|
+
* - zodTypeToRenderingNode
|
|
18
|
+
* - resolveRenderType
|
|
19
|
+
*/ import inflection from "inflection";
|
|
4
20
|
import path from "path";
|
|
5
|
-
import {
|
|
21
|
+
import { z } from "zod";
|
|
6
22
|
import { Sonamu } from "../api/sonamu.js";
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
23
|
+
import { EntityManager } from "../entity/entity-manager.js";
|
|
24
|
+
import { isBelongsToOneRelationProp, isBigIntegerArrayProp, isBigIntegerSingleProp, isBooleanArrayProp, isBooleanSingleProp, isDateArrayProp, isDateSingleProp, isEnumArrayProp, isEnumSingleProp, isIntegerArrayProp, isIntegerSingleProp, isJsonProp, isNumberArrayProp, isNumberSingleProp, isNumericArrayProp, isNumericSingleProp, isOneToOneRelationProp, isRelationProp, isStringArrayProp, isStringSingleProp, isUuidArrayProp, isUuidSingleProp, isVirtualProp } from "../types/types.js";
|
|
25
|
+
import { createImportUrl } from "../utils/esm-utils.js";
|
|
9
26
|
/**
|
|
10
27
|
* Zod 타입 ID로부터 동적으로 Zod 스키마를 로드합니다.
|
|
11
28
|
* dist 디렉토리에서 ESM으로 import하여 가져옵니다.
|
|
12
29
|
*/ export async function getZodTypeById(zodTypeId) {
|
|
13
30
|
const modulePath = EntityManager.getModulePath(zodTypeId);
|
|
14
|
-
const moduleAbsPath = path.join(Sonamu.apiRootPath, "dist", "application", modulePath
|
|
31
|
+
const moduleAbsPath = path.join(Sonamu.apiRootPath, "dist", "application", `${modulePath}.js`);
|
|
15
32
|
const importUrl = createImportUrl(moduleAbsPath);
|
|
16
33
|
const imported = await import(importUrl);
|
|
17
34
|
if (!imported[zodTypeId]) {
|
|
@@ -19,6 +36,367 @@ import { getTextTypeLength } from "../api/index.js";
|
|
|
19
36
|
}
|
|
20
37
|
return imported[zodTypeId].describe(zodTypeId);
|
|
21
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* EntityProp을 Zod 타입으로 변환합니다.
|
|
41
|
+
* 각 prop의 타입에 따라 적절한 Zod validator를 생성합니다.
|
|
42
|
+
*/ export async function propToZodType(prop) {
|
|
43
|
+
let zodType = z.unknown();
|
|
44
|
+
if (isIntegerSingleProp(prop)) {
|
|
45
|
+
zodType = z.number().int();
|
|
46
|
+
} else if (isIntegerArrayProp(prop)) {
|
|
47
|
+
zodType = z.number().int().array();
|
|
48
|
+
} else if (isBigIntegerSingleProp(prop)) {
|
|
49
|
+
zodType = z.bigint();
|
|
50
|
+
} else if (isBigIntegerArrayProp(prop)) {
|
|
51
|
+
zodType = z.bigint().array();
|
|
52
|
+
} else if (isEnumSingleProp(prop)) {
|
|
53
|
+
zodType = await getZodTypeById(prop.id);
|
|
54
|
+
} else if (isEnumArrayProp(prop)) {
|
|
55
|
+
zodType = (await getZodTypeById(prop.id)).array();
|
|
56
|
+
} else if (isStringSingleProp(prop)) {
|
|
57
|
+
if (prop.length) {
|
|
58
|
+
zodType = z.string().max(prop.length);
|
|
59
|
+
} else {
|
|
60
|
+
zodType = z.string();
|
|
61
|
+
}
|
|
62
|
+
} else if (isStringArrayProp(prop)) {
|
|
63
|
+
if (prop.length) {
|
|
64
|
+
zodType = z.string().max(prop.length).array();
|
|
65
|
+
} else {
|
|
66
|
+
zodType = z.string().array();
|
|
67
|
+
}
|
|
68
|
+
} else if (isNumberSingleProp(prop)) {
|
|
69
|
+
zodType = z.number();
|
|
70
|
+
} else if (isNumberArrayProp(prop)) {
|
|
71
|
+
zodType = z.number().array();
|
|
72
|
+
} else if (isNumericSingleProp(prop)) {
|
|
73
|
+
zodType = z.string();
|
|
74
|
+
} else if (isNumericArrayProp(prop)) {
|
|
75
|
+
zodType = z.string().array();
|
|
76
|
+
} else if (isBooleanSingleProp(prop)) {
|
|
77
|
+
zodType = z.boolean();
|
|
78
|
+
} else if (isBooleanArrayProp(prop)) {
|
|
79
|
+
zodType = z.boolean().array();
|
|
80
|
+
} else if (isDateSingleProp(prop)) {
|
|
81
|
+
zodType = z.date();
|
|
82
|
+
} else if (isDateArrayProp(prop)) {
|
|
83
|
+
zodType = z.date().array();
|
|
84
|
+
} else if (isUuidSingleProp(prop)) {
|
|
85
|
+
zodType = z.uuid();
|
|
86
|
+
} else if (isUuidArrayProp(prop)) {
|
|
87
|
+
zodType = z.uuid().array();
|
|
88
|
+
} else if (isJsonProp(prop)) {
|
|
89
|
+
zodType = await getZodTypeById(prop.id);
|
|
90
|
+
} else if (isVirtualProp(prop)) {
|
|
91
|
+
zodType = await getZodTypeById(prop.id);
|
|
92
|
+
} else if (isRelationProp(prop)) {
|
|
93
|
+
if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop) && prop.hasJoinColumn) {
|
|
94
|
+
zodType = z.number().int();
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
throw new Error(`prop을 zodType으로 변환하는데 실패 ${prop}}`);
|
|
98
|
+
}
|
|
99
|
+
if (prop.unsigned) {
|
|
100
|
+
zodType = zodType.nonnegative();
|
|
101
|
+
}
|
|
102
|
+
if (prop.nullable) {
|
|
103
|
+
zodType = zodType.nullable();
|
|
104
|
+
}
|
|
105
|
+
return zodType;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* EntityProp을 Zod 타입 정의 코드 문자열로 변환합니다.
|
|
109
|
+
*/ export function propToZodTypeDef(prop, injectImportKeys) {
|
|
110
|
+
let stmt;
|
|
111
|
+
if (isIntegerSingleProp(prop)) {
|
|
112
|
+
stmt = `${prop.name}: z.int()`;
|
|
113
|
+
} else if (isIntegerArrayProp(prop)) {
|
|
114
|
+
stmt = `${prop.name}: z.int().array()`;
|
|
115
|
+
} else if (isBigIntegerSingleProp(prop)) {
|
|
116
|
+
stmt = `${prop.name}: z.bigint()`;
|
|
117
|
+
} else if (isBigIntegerArrayProp(prop)) {
|
|
118
|
+
stmt = `${prop.name}: z.bigint().array()`;
|
|
119
|
+
} else if (isEnumSingleProp(prop)) {
|
|
120
|
+
stmt = `${prop.name}: ${prop.id}`;
|
|
121
|
+
injectImportKeys.push(prop.id);
|
|
122
|
+
} else if (isEnumArrayProp(prop)) {
|
|
123
|
+
stmt = `${prop.name}: ${prop.id}.array()`;
|
|
124
|
+
injectImportKeys.push(prop.id);
|
|
125
|
+
} else if (isStringSingleProp(prop)) {
|
|
126
|
+
if (prop.length) {
|
|
127
|
+
stmt = `${prop.name}: z.string().max(${prop.length})`;
|
|
128
|
+
} else {
|
|
129
|
+
stmt = `${prop.name}: z.string()`;
|
|
130
|
+
}
|
|
131
|
+
} else if (isStringArrayProp(prop)) {
|
|
132
|
+
if (prop.length) {
|
|
133
|
+
stmt = `${prop.name}: z.string().max(${prop.length}).array()`;
|
|
134
|
+
} else {
|
|
135
|
+
stmt = `${prop.name}: z.string().array()`;
|
|
136
|
+
}
|
|
137
|
+
} else if (isNumberSingleProp(prop)) {
|
|
138
|
+
stmt = `${prop.name}: z.number()`;
|
|
139
|
+
} else if (isNumberArrayProp(prop)) {
|
|
140
|
+
stmt = `${prop.name}: z.number().array()`;
|
|
141
|
+
} else if (isNumericSingleProp(prop)) {
|
|
142
|
+
stmt = `${prop.name}: z.string()`;
|
|
143
|
+
} else if (isNumericArrayProp(prop)) {
|
|
144
|
+
stmt = `${prop.name}: z.string().array()`;
|
|
145
|
+
} else if (isDateSingleProp(prop)) {
|
|
146
|
+
stmt = `${prop.name}: z.date()`;
|
|
147
|
+
} else if (isDateArrayProp(prop)) {
|
|
148
|
+
stmt = `${prop.name}: z.date().array()`;
|
|
149
|
+
} else if (isBooleanSingleProp(prop)) {
|
|
150
|
+
stmt = `${prop.name}: z.boolean()`;
|
|
151
|
+
} else if (isBooleanArrayProp(prop)) {
|
|
152
|
+
stmt = `${prop.name}: z.boolean().array()`;
|
|
153
|
+
} else if (isUuidSingleProp(prop)) {
|
|
154
|
+
stmt = `${prop.name}: z.uuid()`;
|
|
155
|
+
} else if (isUuidArrayProp(prop)) {
|
|
156
|
+
stmt = `${prop.name}: z.uuid().array()`;
|
|
157
|
+
} else if (isJsonProp(prop)) {
|
|
158
|
+
stmt = `${prop.name}: ${prop.id}`;
|
|
159
|
+
injectImportKeys.push(prop.id);
|
|
160
|
+
} else if (isVirtualProp(prop)) {
|
|
161
|
+
stmt = `${prop.name}: ${prop.id}`;
|
|
162
|
+
injectImportKeys.push(prop.id);
|
|
163
|
+
} else if (isRelationProp(prop)) {
|
|
164
|
+
if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop) && prop.hasJoinColumn) {
|
|
165
|
+
stmt = `${prop.name}_id: z.int()`;
|
|
166
|
+
} else {
|
|
167
|
+
// 그외 relation 케이스 제외
|
|
168
|
+
return `// ${prop.name}: ${prop.relationType} ${prop.with}`;
|
|
169
|
+
}
|
|
170
|
+
} else {
|
|
171
|
+
return "// unable to resolve";
|
|
172
|
+
}
|
|
173
|
+
if (prop.unsigned) {
|
|
174
|
+
stmt += ".nonnegative()";
|
|
175
|
+
}
|
|
176
|
+
if (prop.nullable) {
|
|
177
|
+
stmt += ".nullable()";
|
|
178
|
+
}
|
|
179
|
+
return `${stmt},`;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* EntityPropNode를 Zod 타입 정의 코드 문자열로 변환합니다.
|
|
183
|
+
* plain, array, object 노드 타입을 재귀적으로 처리하여 중첩 구조를 지원합니다.
|
|
184
|
+
*/ export function propNodeToZodTypeDef(propNode, injectImportKeys) {
|
|
185
|
+
if (propNode.nodeType === "plain") {
|
|
186
|
+
return propToZodTypeDef(propNode.prop, injectImportKeys);
|
|
187
|
+
} else if (propNode.nodeType === "array") {
|
|
188
|
+
return [
|
|
189
|
+
propNode.prop ? `${propNode.prop.name}: ` : "",
|
|
190
|
+
"z.array(z.object({",
|
|
191
|
+
propNode.children.map((childPropNode)=>propNodeToZodTypeDef(childPropNode, injectImportKeys)).join("\n"),
|
|
192
|
+
"",
|
|
193
|
+
"})),"
|
|
194
|
+
].join("\n");
|
|
195
|
+
} else if (propNode.nodeType === "object") {
|
|
196
|
+
return [
|
|
197
|
+
propNode.prop ? `${propNode.prop.name}: ` : "",
|
|
198
|
+
"z.object({",
|
|
199
|
+
propNode.children.map((childPropNode)=>propNodeToZodTypeDef(childPropNode, injectImportKeys)).join("\n"),
|
|
200
|
+
"",
|
|
201
|
+
`})${propNode.prop?.nullable ? ".nullable()" : ""},`
|
|
202
|
+
].join("\n");
|
|
203
|
+
} else {
|
|
204
|
+
throw Error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export function zodTypeToTsTypeDef(zt) {
|
|
208
|
+
switch(zt.def.type){
|
|
209
|
+
case "string":
|
|
210
|
+
case "number":
|
|
211
|
+
case "boolean":
|
|
212
|
+
case "bigint":
|
|
213
|
+
case "date":
|
|
214
|
+
case "null":
|
|
215
|
+
case "undefined":
|
|
216
|
+
case "any":
|
|
217
|
+
case "unknown":
|
|
218
|
+
case "never":
|
|
219
|
+
return zt.def.type;
|
|
220
|
+
case "nullable":
|
|
221
|
+
return `${zodTypeToTsTypeDef(zt.def.innerType)} | null`;
|
|
222
|
+
case "default":
|
|
223
|
+
return zodTypeToTsTypeDef(zt.def.innerType);
|
|
224
|
+
case "record":
|
|
225
|
+
{
|
|
226
|
+
const recordType = zt;
|
|
227
|
+
return `{ [ key: ${zodTypeToTsTypeDef(recordType.def.keyType)} ]: ${zodTypeToTsTypeDef(recordType.def.valueType)}}`;
|
|
228
|
+
}
|
|
229
|
+
case "literal":
|
|
230
|
+
return Array.from(zt.values).map((value)=>{
|
|
231
|
+
if (typeof value === "string") {
|
|
232
|
+
return `"${value}"`;
|
|
233
|
+
}
|
|
234
|
+
if (value === null) {
|
|
235
|
+
return `null`;
|
|
236
|
+
}
|
|
237
|
+
if (value === undefined) {
|
|
238
|
+
return `undefined`;
|
|
239
|
+
}
|
|
240
|
+
return `${value}`;
|
|
241
|
+
}).join(" | ");
|
|
242
|
+
case "union":
|
|
243
|
+
return `${zt.options.map((option)=>zodTypeToTsTypeDef(option)).join(" | ")}`;
|
|
244
|
+
case "enum":
|
|
245
|
+
return `${zt.options.map((val)=>`"${val}"`).join(" | ")}`;
|
|
246
|
+
case "array":
|
|
247
|
+
return `${zodTypeToTsTypeDef(zt.element)}[]`;
|
|
248
|
+
case "object":
|
|
249
|
+
{
|
|
250
|
+
const shape = zt.shape;
|
|
251
|
+
return [
|
|
252
|
+
"{",
|
|
253
|
+
...Object.keys(shape).map((key)=>{
|
|
254
|
+
if (shape[key].def.type === "optional") {
|
|
255
|
+
return `${key}?: ${zodTypeToTsTypeDef(shape[key].def.innerType)},`;
|
|
256
|
+
} else {
|
|
257
|
+
return `${key}: ${zodTypeToTsTypeDef(shape[key])},`;
|
|
258
|
+
}
|
|
259
|
+
}),
|
|
260
|
+
"}"
|
|
261
|
+
].join("\n");
|
|
262
|
+
}
|
|
263
|
+
case "optional":
|
|
264
|
+
return `${zodTypeToTsTypeDef(zt.def.innerType)} | undefined`;
|
|
265
|
+
case "template_literal":
|
|
266
|
+
{
|
|
267
|
+
const def = zt.def;
|
|
268
|
+
// 빈 template literal은 string으로 폴백
|
|
269
|
+
if (!def.parts || def.parts.length === 0) {
|
|
270
|
+
return "string";
|
|
271
|
+
}
|
|
272
|
+
// 각 part를 TypeScript 타입 문자열로 변환
|
|
273
|
+
const parts = def.parts.map((part)=>{
|
|
274
|
+
// 리터럴 값 (string, number, boolean, null, undefined)
|
|
275
|
+
if (typeof part === "string") {
|
|
276
|
+
return `${part}`;
|
|
277
|
+
}
|
|
278
|
+
// ZodType - 재귀적으로 변환
|
|
279
|
+
if (part && typeof part === "object" && part._zod) {
|
|
280
|
+
const innerType = zodTypeToTsTypeDef(part);
|
|
281
|
+
return `\${${innerType}}`;
|
|
282
|
+
}
|
|
283
|
+
// 폴백
|
|
284
|
+
return `\${string}`;
|
|
285
|
+
});
|
|
286
|
+
return `\`${parts.join("")}\``;
|
|
287
|
+
}
|
|
288
|
+
case "file":
|
|
289
|
+
return "File";
|
|
290
|
+
default:
|
|
291
|
+
throw new Error(`처리되지 않은 ZodType ${zt.def.type}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Zod 타입 인스턴스를 해당하는 Zod 코드 문자열로 변환합니다.
|
|
296
|
+
*/ export function zodTypeToZodCode(zt) {
|
|
297
|
+
switch(zt.def.type){
|
|
298
|
+
case "string":
|
|
299
|
+
return "z.string()";
|
|
300
|
+
case "number":
|
|
301
|
+
return "z.number()";
|
|
302
|
+
case "bigint":
|
|
303
|
+
return "z.bigint()";
|
|
304
|
+
case "boolean":
|
|
305
|
+
return "z.boolean()";
|
|
306
|
+
case "date":
|
|
307
|
+
return "z.date()";
|
|
308
|
+
case "null":
|
|
309
|
+
return "z.null()";
|
|
310
|
+
case "undefined":
|
|
311
|
+
return "z.undefined()";
|
|
312
|
+
case "any":
|
|
313
|
+
return "z.any()";
|
|
314
|
+
case "unknown":
|
|
315
|
+
return "z.unknown()";
|
|
316
|
+
case "never":
|
|
317
|
+
return "z.never()";
|
|
318
|
+
case "nullable":
|
|
319
|
+
return `${zodTypeToZodCode(zt.def.innerType)}.nullable()`;
|
|
320
|
+
case "default":
|
|
321
|
+
{
|
|
322
|
+
const zDefaultDef = zt.def;
|
|
323
|
+
return `${zodTypeToZodCode(zDefaultDef.innerType)}.default(${zDefaultDef.defaultValue})`;
|
|
324
|
+
}
|
|
325
|
+
case "record":
|
|
326
|
+
{
|
|
327
|
+
const zRecordDef = zt.def;
|
|
328
|
+
return `z.record(${zodTypeToZodCode(zRecordDef.keyType)}, ${zodTypeToZodCode(zRecordDef.valueType)})`;
|
|
329
|
+
}
|
|
330
|
+
case "literal":
|
|
331
|
+
{
|
|
332
|
+
const items = Array.from(zt.values).map((value)=>{
|
|
333
|
+
if (typeof value === "string") {
|
|
334
|
+
return `"${value}"`;
|
|
335
|
+
}
|
|
336
|
+
if (value === null) {
|
|
337
|
+
return `null`;
|
|
338
|
+
}
|
|
339
|
+
if (value === undefined) {
|
|
340
|
+
return `undefined`;
|
|
341
|
+
}
|
|
342
|
+
return `${value}`;
|
|
343
|
+
});
|
|
344
|
+
if (items.length === 1) {
|
|
345
|
+
return `z.literal(${items[0]})`;
|
|
346
|
+
}
|
|
347
|
+
return `z.literal([${items.join(", ")}])`;
|
|
348
|
+
}
|
|
349
|
+
case "union":
|
|
350
|
+
return `z.union([${zt.def.options.map((option)=>zodTypeToZodCode(option)).join(",")}])`;
|
|
351
|
+
case "enum":
|
|
352
|
+
// NOTE: z.enum(["A", "B"])도 z.enum({ A: "A", B: "B" })로 처리됨.
|
|
353
|
+
return `z.enum({${Object.entries(zt.def.entries).map(([key, val])=>typeof val === "string" ? `${key}: "${val}"` : `${key}: ${val}`).join(", ")}})`;
|
|
354
|
+
case "array":
|
|
355
|
+
return `z.array(${zodTypeToZodCode(zt.def.element)})`;
|
|
356
|
+
case "object":
|
|
357
|
+
{
|
|
358
|
+
const shape = zt.shape;
|
|
359
|
+
return [
|
|
360
|
+
"z.object({",
|
|
361
|
+
...Object.keys(shape).map((key)=>`${key}: ${zodTypeToZodCode(shape[key])},`),
|
|
362
|
+
"})"
|
|
363
|
+
].join("\n");
|
|
364
|
+
}
|
|
365
|
+
case "optional":
|
|
366
|
+
return `${zodTypeToZodCode(zt.def.innerType)}.optional()`;
|
|
367
|
+
case "file":
|
|
368
|
+
return `z.file()`;
|
|
369
|
+
case "template_literal":
|
|
370
|
+
{
|
|
371
|
+
const def = zt.def;
|
|
372
|
+
// 빈 template literal
|
|
373
|
+
if (!def.parts || def.parts.length === 0) {
|
|
374
|
+
return "z.templateLiteral([])";
|
|
375
|
+
}
|
|
376
|
+
// 각 part를 Zod 코드 문자열로 변환
|
|
377
|
+
const parts = def.parts.map((part)=>{
|
|
378
|
+
// 문자열 리터럴
|
|
379
|
+
if (typeof part === "string") {
|
|
380
|
+
return `"${part}"`;
|
|
381
|
+
}
|
|
382
|
+
// ZodType - 재귀적으로 변환
|
|
383
|
+
if (part && typeof part === "object" && part._zod) {
|
|
384
|
+
return zodTypeToZodCode(part);
|
|
385
|
+
}
|
|
386
|
+
// 폴백
|
|
387
|
+
return "z.string()";
|
|
388
|
+
});
|
|
389
|
+
return `z.templateLiteral([${parts.join(", ")}])`;
|
|
390
|
+
}
|
|
391
|
+
case "intersection":
|
|
392
|
+
{
|
|
393
|
+
const zIntersectionDef = zt.def;
|
|
394
|
+
return `z.intersection(${zodTypeToZodCode(zIntersectionDef.left)}, ${zodTypeToZodCode(zIntersectionDef.right)})`;
|
|
395
|
+
}
|
|
396
|
+
default:
|
|
397
|
+
throw new Error(`처리되지 않은 ZodType ${zt.def.type}`);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
22
400
|
/**
|
|
23
401
|
* Zod 타입을 UI 렌더링에 사용할 수 있는 RenderingNode로 변환합니다.
|
|
24
402
|
* 재귀적으로 중첩된 타입들을 처리합니다.
|
|
@@ -112,55 +490,5 @@ import { getTextTypeLength } from "../api/index.js";
|
|
|
112
490
|
throw new Error(`타입 파싱 불가 ${key} ${zodType.def.type}`);
|
|
113
491
|
}
|
|
114
492
|
}
|
|
115
|
-
/**
|
|
116
|
-
* EntityProp을 Zod 타입으로 변환합니다.
|
|
117
|
-
* 각 prop의 타입에 따라 적절한 Zod validator를 생성합니다.
|
|
118
|
-
*/ export async function propToZodType(prop) {
|
|
119
|
-
let zodType = z.unknown();
|
|
120
|
-
if (isIntegerProp(prop)) {
|
|
121
|
-
zodType = z.number().int();
|
|
122
|
-
} else if (isBigIntegerProp(prop)) {
|
|
123
|
-
zodType = z.bigint();
|
|
124
|
-
} else if (isTextProp(prop)) {
|
|
125
|
-
zodType = z.string().max(getTextTypeLength(prop.textType));
|
|
126
|
-
} else if (isEnumProp(prop)) {
|
|
127
|
-
zodType = await getZodTypeById(prop.id);
|
|
128
|
-
} else if (isStringProp(prop)) {
|
|
129
|
-
zodType = z.string().max(prop.length);
|
|
130
|
-
} else if (isFloatProp(prop) || isDoubleProp(prop)) {
|
|
131
|
-
zodType = z.number();
|
|
132
|
-
} else if (isDecimalProp(prop)) {
|
|
133
|
-
zodType = z.string();
|
|
134
|
-
} else if (isBooleanProp(prop)) {
|
|
135
|
-
zodType = z.boolean();
|
|
136
|
-
} else if (isDateProp(prop)) {
|
|
137
|
-
zodType = z.string().length(10);
|
|
138
|
-
} else if (isTimeProp(prop)) {
|
|
139
|
-
zodType = z.string().length(8);
|
|
140
|
-
} else if (isDateTimeProp(prop)) {
|
|
141
|
-
zodType = z.date();
|
|
142
|
-
} else if (isTimestampProp(prop)) {
|
|
143
|
-
zodType = z.date();
|
|
144
|
-
} else if (isJsonProp(prop)) {
|
|
145
|
-
zodType = await getZodTypeById(prop.id);
|
|
146
|
-
} else if (isUuidProp(prop)) {
|
|
147
|
-
zodType = z.uuid();
|
|
148
|
-
} else if (isVirtualProp(prop)) {
|
|
149
|
-
zodType = await getZodTypeById(prop.id);
|
|
150
|
-
} else if (isRelationProp(prop)) {
|
|
151
|
-
if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop) && prop.hasJoinColumn) {
|
|
152
|
-
zodType = z.number().int();
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
throw new Error(`prop을 zodType으로 변환하는데 실패 ${prop}}`);
|
|
156
|
-
}
|
|
157
|
-
if (prop.unsigned) {
|
|
158
|
-
zodType = zodType.nonnegative();
|
|
159
|
-
}
|
|
160
|
-
if (prop.nullable) {
|
|
161
|
-
zodType = zodType.nullable();
|
|
162
|
-
}
|
|
163
|
-
return zodType;
|
|
164
|
-
}
|
|
165
493
|
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBFbnRpdHlQcm9wLFxuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNCaWdJbnRlZ2VyUHJvcCxcbiAgaXNCb29sZWFuUHJvcCxcbiAgaXNEYXRlUHJvcCxcbiAgaXNEYXRlVGltZVByb3AsXG4gIGlzRGVjaW1hbFByb3AsXG4gIGlzRG91YmxlUHJvcCxcbiAgaXNFbnVtUHJvcCxcbiAgaXNGbG9hdFByb3AsXG4gIGlzSW50ZWdlclByb3AsXG4gIGlzSnNvblByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1N0cmluZ1Byb3AsXG4gIGlzVGV4dFByb3AsXG4gIGlzVGltZVByb3AsXG4gIGlzVGltZXN0YW1wUHJvcCxcbiAgaXNVdWlkUHJvcCxcbiAgaXNWaXJ0dWFsUHJvcCxcbiAgUmVuZGVyaW5nTm9kZSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlSW1wb3J0VXJsIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRUZXh0VHlwZUxlbmd0aCB9IGZyb20gXCIuLi9hcGlcIjtcblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIFwiZGlzdFwiLFxuICAgIFwiYXBwbGljYXRpb25cIixcbiAgICBtb2R1bGVQYXRoICsgXCIuanNcIlxuICApO1xuICBjb25zdCBpbXBvcnRVcmwgPSBjcmVhdGVJbXBvcnRVcmwobW9kdWxlQWJzUGF0aCk7XG4gIGNvbnN0IGltcG9ydGVkID0gYXdhaXQgaW1wb3J0KGltcG9ydFVybCk7XG5cbiAgaWYgKCFpbXBvcnRlZFt6b2RUeXBlSWRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHpvZFR5cGVJZCAke3pvZFR5cGVJZH1gKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0ZWRbem9kVHlwZUlkXS5kZXNjcmliZSh6b2RUeXBlSWQpO1xufVxuXG4vKipcbiAqIFpvZCDtg4DsnoXsnYQgVUkg66CM642U66eB7JeQIOyCrOyaqe2VoCDsiJgg7J6I64qUIFJlbmRlcmluZ05vZGXroZwg67OA7ZmY7ZWp64uI64ukLlxuICog7J6s6reA7KCB7Jy866GcIOykkeyyqeuQnCDtg4DsnoXrk6TsnYQg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShcbiAgem9kVHlwZTogei5ab2RUeXBlPGFueT4sXG4gIGJhc2VLZXk6IHN0cmluZyA9IFwicm9vdFwiXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICBjb25zdCBjb2x1bW5LZXlzID0gT2JqZWN0LmtleXMoem9kVHlwZS5zaGFwZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW5LZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlLnNoYXBlW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU8YW55Pj4pLmRlZi5lbGVtZW50O1xuICAgIGlmIChpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiBiYXNlS2V5LmluY2x1ZGVzKFwiaW1hZ2VzXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXktaW1hZ2VzXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJhcnJheVwiLFxuICAgICAgZWxlbWVudDogem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICBjb25zdCBvcHRpb25Ob2RlcyA9ICh6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+KS5kZWYub3B0aW9ucy5tYXAoXG4gICAgICAob3B0KSA9PiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSlcbiAgICApO1xuICAgIC8vIFRPRE86IFpvZFVuaW9u7J20IOuTpOyWtOyeiOuKlCDqsr3smrAg7ZW465Ok66eBXG4gICAgcmV0dXJuIG9wdGlvbk5vZGVzWzBdO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gICAgICAgICh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSxcbiAgICAgICAgYmFzZUtleVxuICAgICAgKSxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uem9kVHlwZVRvUmVuZGVyaW5nTm9kZShcbiAgICAgICAgKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLFxuICAgICAgICBiYXNlS2V5XG4gICAgICApLFxuICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogcmVzb2x2ZVJlbmRlclR5cGUoYmFzZUtleSwgem9kVHlwZSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoXqs7wg7YKkIOydtOumhOycvOuhnOu2gO2EsCDsoIHsoIjtlZwgUmVuZGVyVHlwZeydhCDqsrDsoJXtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZW5kZXJUeXBlKFxuICBrZXk6IHN0cmluZyxcbiAgem9kVHlwZTogei5ab2RUeXBlQW55XG4pOiBSZW5kZXJpbmdOb2RlW1wicmVuZGVyVHlwZVwiXSB7XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlKSB7XG4gICAgcmV0dXJuIFwiZGF0ZXRpbWVcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICBpZiAoa2V5LmluY2x1ZGVzKFwiaW1nXCIpIHx8IGtleS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaW1hZ2VcIjtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICByZXR1cm4gXCJlbnVtc1wiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFJlY29yZCkge1xuICAgIHJldHVybiBcInJlY29yZFwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFueSB8fCB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSBwcm9w7J2YIO2DgOyeheyXkCDrlLDrnbwg7KCB7KCI7ZWcIFpvZCB2YWxpZGF0b3Lrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvcFRvWm9kVHlwZShwcm9wOiBFbnRpdHlQcm9wKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgbGV0IHpvZFR5cGU6IHouWm9kVHlwZUFueSA9IHoudW5rbm93bigpO1xuICBpZiAoaXNJbnRlZ2VyUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlclByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5iaWdpbnQoKTtcbiAgfSBlbHNlIGlmIChpc1RleHRQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCkubWF4KGdldFRleHRUeXBlTGVuZ3RoKHByb3AudGV4dFR5cGUpKTtcbiAgfSBlbHNlIGlmIChpc0VudW1Qcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gIH0gZWxzZSBpZiAoaXNGbG9hdFByb3AocHJvcCkgfHwgaXNEb3VibGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNEZWNpbWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLmxlbmd0aCgxMCk7XG4gIH0gZWxzZSBpZiAoaXNUaW1lUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLmxlbmd0aCg4KTtcbiAgfSBlbHNlIGlmIChpc0RhdGVUaW1lUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc1RpbWVzdGFtcFByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCk7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVmlydHVhbFByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoXG4gICAgICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fFxuICAgICAgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKVxuICAgICkge1xuICAgICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgcHJvcOydhCB6b2RUeXBl7Jy866GcIOuzgO2ZmO2VmOuKlOuNsCDsi6TtjKggJHtwcm9wfX1gKTtcbiAgfVxuXG4gIGlmICgocHJvcCBhcyB7IHVuc2lnbmVkPzogYm9vbGVhbiB9KS51bnNpZ25lZCkge1xuICAgIHpvZFR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZE51bWJlcikubm9ubmVnYXRpdmUoKTtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHpvZFR5cGUgPSB6b2RUeXBlLm51bGxhYmxlKCk7XG4gIH1cblxuICByZXR1cm4gem9kVHlwZTtcbn1cbiJdLCJuYW1lcyI6WyJ6IiwiRW50aXR5TWFuYWdlciIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNCaWdJbnRlZ2VyUHJvcCIsImlzQm9vbGVhblByb3AiLCJpc0RhdGVQcm9wIiwiaXNEYXRlVGltZVByb3AiLCJpc0RlY2ltYWxQcm9wIiwiaXNEb3VibGVQcm9wIiwiaXNFbnVtUHJvcCIsImlzRmxvYXRQcm9wIiwiaXNJbnRlZ2VyUHJvcCIsImlzSnNvblByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc1N0cmluZ1Byb3AiLCJpc1RleHRQcm9wIiwiaXNUaW1lUHJvcCIsImlzVGltZXN0YW1wUHJvcCIsImlzVXVpZFByb3AiLCJpc1ZpcnR1YWxQcm9wIiwicGF0aCIsImNyZWF0ZUltcG9ydFVybCIsIlNvbmFtdSIsImluZmxlY3Rpb24iLCJnZXRUZXh0VHlwZUxlbmd0aCIsImdldFpvZFR5cGVCeUlkIiwiem9kVHlwZUlkIiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJtb2R1bGVBYnNQYXRoIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiaW1wb3J0VXJsIiwiaW1wb3J0ZWQiLCJFcnJvciIsImRlc2NyaWJlIiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsInpvZFR5cGUiLCJiYXNlS2V5IiwiZGVmIiwibmFtZSIsImxhYmVsIiwiY2FtZWxpemUiLCJab2RPYmplY3QiLCJjb2x1bW5LZXlzIiwiT2JqZWN0Iiwia2V5cyIsInNoYXBlIiwiY2hpbGRyZW4iLCJtYXAiLCJrZXkiLCJpbm5lclR5cGUiLCJyZW5kZXJUeXBlIiwiWm9kQXJyYXkiLCJlbGVtZW50IiwiWm9kU3RyaW5nIiwiaW5jbHVkZXMiLCJab2RVbmlvbiIsIm9wdGlvbk5vZGVzIiwib3B0aW9ucyIsIm9wdCIsIlpvZE9wdGlvbmFsIiwib3B0aW9uYWwiLCJab2ROdWxsYWJsZSIsIm51bGxhYmxlIiwicmVzb2x2ZVJlbmRlclR5cGUiLCJab2REYXRlIiwiZGVzY3JpcHRpb24iLCJlbmRzV2l0aCIsIlpvZE51bWJlciIsIlpvZEJvb2xlYW4iLCJab2RFbnVtIiwiWm9kUmVjb3JkIiwiWm9kQW55IiwiWm9kVW5rbm93biIsIlpvZExpdGVyYWwiLCJ0eXBlIiwicHJvcFRvWm9kVHlwZSIsInByb3AiLCJ1bmtub3duIiwibnVtYmVyIiwiaW50IiwiYmlnaW50Iiwic3RyaW5nIiwibWF4IiwidGV4dFR5cGUiLCJpZCIsImxlbmd0aCIsImJvb2xlYW4iLCJkYXRlIiwidXVpZCIsImhhc0pvaW5Db2x1bW4iLCJ1bnNpZ25lZCIsIm5vbm5lZ2F0aXZlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxPQUFPLE1BQU07QUFDcEIsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUVFQywwQkFBMEIsRUFDMUJDLGdCQUFnQixFQUNoQkMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsYUFBYSxFQUNiQyxZQUFZLEVBQ1pDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxhQUFhLEVBQ2JDLFVBQVUsRUFD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
|
|
494
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5UHJvcE5vZGUsXG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0JpZ0ludGVnZXJBcnJheVByb3AsXG4gIGlzQmlnSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzQm9vbGVhbkFycmF5UHJvcCxcbiAgaXNCb29sZWFuU2luZ2xlUHJvcCxcbiAgaXNEYXRlQXJyYXlQcm9wLFxuICBpc0RhdGVTaW5nbGVQcm9wLFxuICBpc0VudW1BcnJheVByb3AsXG4gIGlzRW51bVNpbmdsZVByb3AsXG4gIGlzSW50ZWdlckFycmF5UHJvcCxcbiAgaXNJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNKc29uUHJvcCxcbiAgaXNOdW1iZXJBcnJheVByb3AsXG4gIGlzTnVtYmVyU2luZ2xlUHJvcCxcbiAgaXNOdW1lcmljQXJyYXlQcm9wLFxuICBpc051bWVyaWNTaW5nbGVQcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNTdHJpbmdBcnJheVByb3AsXG4gIGlzU3RyaW5nU2luZ2xlUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlSW1wb3J0VXJsIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RSZWNvcmQgPSB6LlpvZFJlY29yZDx6LlpvZFN0cmluZyB8IHouWm9kTnVtYmVyIHwgei5ab2RTeW1ib2wsIHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9iamVjdCA9IHouWm9kT2JqZWN0PCRab2RMb29zZVNoYXBlPjtcbnR5cGUgQW55Wm9kTnVsbGFibGUgPSB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT47XG50eXBlIEFueVpvZERlZmF1bHQgPSB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVW5pb24gPSB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPjtcbnR5cGUgQW55Wm9kQXJyYXkgPSB6LlpvZEFycmF5PHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9wdGlvbmFsID0gei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RUZW1wbGF0ZUxpdGVyYWwgPSB6LlpvZFRlbXBsYXRlTGl0ZXJhbDxzdHJpbmc+O1xuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcImRpc3RcIiwgXCJhcHBsaWNhdGlvblwiLCBgJHttb2R1bGVQYXRofS5qc2ApO1xuICBjb25zdCBpbXBvcnRVcmwgPSBjcmVhdGVJbXBvcnRVcmwobW9kdWxlQWJzUGF0aCk7XG4gIGNvbnN0IGltcG9ydGVkID0gYXdhaXQgaW1wb3J0KGltcG9ydFVybCk7XG5cbiAgaWYgKCFpbXBvcnRlZFt6b2RUeXBlSWRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHpvZFR5cGVJZCAke3pvZFR5cGVJZH1gKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0ZWRbem9kVHlwZUlkXS5kZXNjcmliZSh6b2RUeXBlSWQpO1xufVxuXG4vKipcbiAqIEVudGl0eVByb3DsnYQgWm9kIO2DgOyeheycvOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDqsIEgcHJvcOydmCDtg4DsnoXsl5Ag65Sw6528IOyggeygiO2VnCBab2QgdmFsaWRhdG9y66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3BUb1pvZFR5cGUocHJvcDogRW50aXR5UHJvcCk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIGxldCB6b2RUeXBlOiB6LlpvZFR5cGVBbnkgPSB6LnVua25vd24oKTtcbiAgaWYgKGlzSW50ZWdlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5pbnQoKTtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5pbnQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5iaWdpbnQoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5iaWdpbnQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNFbnVtQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IChhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKSkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCkubWF4KHByb3AubGVuZ3RoKS5hcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc051bWJlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKTtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY0FycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJvb2xlYW4oKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouZGF0ZSgpO1xuICB9IGVsc2UgaWYgKGlzRGF0ZUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZFNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei51dWlkKCk7XG4gIH0gZWxzZSBpZiAoaXNVdWlkQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpIHtcbiAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5hcnJheSgpYDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoubnVtYmVyKClgO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoubnVtYmVyKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0RhdGVTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpYDtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5kYXRlKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKWA7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYm9vbGVhbigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzVXVpZFNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKClgO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnV1aWQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfV9pZDogei5pbnQoKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOq3uOyZuCByZWxhdGlvbiDsvIDsnbTsiqQg7KCc7Jm4XG4gICAgICByZXR1cm4gYC8vICR7cHJvcC5uYW1lfTogJHtwcm9wLnJlbGF0aW9uVHlwZX0gJHtwcm9wLndpdGh9YDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiLy8gdW5hYmxlIHRvIHJlc29sdmVcIjtcbiAgfVxuXG4gIGlmICgocHJvcCBhcyB7IHVuc2lnbmVkPzogYm9vbGVhbiB9KS51bnNpZ25lZCkge1xuICAgIHN0bXQgKz0gXCIubm9ubmVnYXRpdmUoKVwiO1xuICB9XG4gIGlmIChwcm9wLm51bGxhYmxlKSB7XG4gICAgc3RtdCArPSBcIi5udWxsYWJsZSgpXCI7XG4gIH1cblxuICByZXR1cm4gYCR7c3RtdH0sYDtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9wTm9kZeulvCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHBsYWluLCBhcnJheSwgb2JqZWN0IOuFuOuTnCDtg4DsnoXsnYQg7J6s6reA7KCB7Jy866GcIOyymOumrO2VmOyXrCDspJHssqkg6rWs7KGw66W8IOyngOybkO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwicGxhaW5cIikge1xuICAgIHJldHVybiBwcm9wVG9ab2RUeXBlRGVmKHByb3BOb2RlLnByb3AsIGluamVjdEltcG9ydEtleXMpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcImFycmF5XCIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvcE5vZGUucHJvcCA/IGAke3Byb3BOb2RlLnByb3AubmFtZX06IGAgOiBcIlwiLFxuICAgICAgXCJ6LmFycmF5KHoub2JqZWN0KHtcIixcbiAgICAgIHByb3BOb2RlLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoKGNoaWxkUHJvcE5vZGUpID0+IHByb3BOb2RlVG9ab2RUeXBlRGVmKGNoaWxkUHJvcE5vZGUsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIFwiXCIsXG4gICAgICBcIn0pKSxcIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvcE5vZGUucHJvcCA/IGAke3Byb3BOb2RlLnByb3AubmFtZX06IGAgOiBcIlwiLFxuICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgYH0pJHtwcm9wTm9kZS5wcm9wPy5udWxsYWJsZSA/IFwiLm51bGxhYmxlKClcIiA6IFwiXCJ9LGAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB6b2RUeXBlVG9Uc1R5cGVEZWYoenQ6IHouWm9kVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoenQuZGVmLnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgY2FzZSBcIm51bGxcIjpcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgY2FzZSBcImFueVwiOlxuICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4genQuZGVmLnR5cGU7XG4gICAgY2FzZSBcIm51bGxhYmxlXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9IHwgbnVsbGA7XG4gICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgIHJldHVybiB6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZi5pbm5lclR5cGUpO1xuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgcmVjb3JkVHlwZSA9IHp0IGFzIEFueVpvZFJlY29yZDtcbiAgICAgIHJldHVybiBgeyBbIGtleTogJHt6b2RUeXBlVG9Uc1R5cGVEZWYocmVjb3JkVHlwZS5kZWYua2V5VHlwZSl9IF06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLnZhbHVlVHlwZSl9fWA7XG4gICAgfVxuICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSgoenQgYXMgei5ab2RMaXRlcmFsKS52YWx1ZXMpXG4gICAgICAgIC5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGBudWxsYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGB1bmRlZmluZWRgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiB8IFwiKTtcbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgQW55Wm9kVW5pb24pLm9wdGlvbnNcbiAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB6b2RUeXBlVG9Uc1R5cGVEZWYob3B0aW9uKSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgcmV0dXJuIGAkeyh6dCBhcyB6LlpvZEVudW0pLm9wdGlvbnMubWFwKCh2YWwpID0+IGBcIiR7dmFsfVwiYCkuam9pbihcIiB8IFwiKX1gO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kQXJyYXkpLmVsZW1lbnQpfVtdYDtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IHNoYXBlID0gKHp0IGFzIEFueVpvZE9iamVjdCkuc2hhcGU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcIntcIixcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoc2hhcGUpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHNoYXBlW2tleV0uZGVmLnR5cGUgPT09IFwib3B0aW9uYWxcIikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX0/OiAke3pvZFR5cGVUb1RzVHlwZURlZihzaGFwZVtrZXldLmRlZi5pbm5lclR5cGUpfSxgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XSl9LGA7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgXCJ9XCIsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNhc2UgXCJvcHRpb25hbFwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kT3B0aW9uYWwpLmRlZi5pbm5lclR5cGUpfSB8IHVuZGVmaW5lZGA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbOydgCBzdHJpbmfsnLzroZwg7Y+067CxXG4gICAgICBpZiAoIWRlZi5wYXJ0cyB8fCBkZWYucGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyDqsIEgcGFydOulvCBUeXBlU2NyaXB0IO2DgOyehSDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66as7YSw65+0IOqwkiAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG51bGwsIHVuZGVmaW5lZClcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGAke3BhcnR9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFpvZFR5cGUgLSDsnqzqt4DsoIHsnLzroZwg67OA7ZmYXG4gICAgICAgIGlmIChwYXJ0ICYmIHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiICYmIChwYXJ0IGFzIHouWm9kVHlwZSkuX3pvZCkge1xuICAgICAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGVUb1RzVHlwZURlZihwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIGBcXCR7JHtpbm5lclR5cGV9fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIGBcXCR7c3RyaW5nfWA7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGBcXGAke3BhcnRzLmpvaW4oXCJcIil9XFxgYDtcbiAgICB9XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiBcIkZpbGVcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsspjrpqzrkJjsp4Ag7JWK7J2AIFpvZFR5cGUgJHt6dC5kZWYudHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6b2RUeXBlVG9ab2RDb2RlKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBcInoubnVtYmVyKClcIjtcbiAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICByZXR1cm4gXCJ6LmJpZ2ludCgpXCI7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiBcInouYm9vbGVhbigpXCI7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcInouZGF0ZSgpXCI7XG4gICAgY2FzZSBcIm51bGxcIjpcbiAgICAgIHJldHVybiBcInoubnVsbCgpXCI7XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgcmV0dXJuIFwiei51bmRlZmluZWQoKVwiO1xuICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgIHJldHVybiBcInouYW55KClcIjtcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgICAgcmV0dXJuIFwiei51bmtub3duKClcIjtcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiBcInoubmV2ZXIoKVwiO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoKHp0IGFzIEFueVpvZE51bGxhYmxlKS5kZWYuaW5uZXJUeXBlKX0ubnVsbGFibGUoKWA7XG4gICAgY2FzZSBcImRlZmF1bHRcIjoge1xuICAgICAgY29uc3QgekRlZmF1bHREZWYgPSAoenQgYXMgQW55Wm9kRGVmYXVsdCkuZGVmO1xuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoekRlZmF1bHREZWYuaW5uZXJUeXBlKX0uZGVmYXVsdCgke3pEZWZhdWx0RGVmLmRlZmF1bHRWYWx1ZX0pYDtcbiAgICB9XG4gICAgY2FzZSBcInJlY29yZFwiOiB7XG4gICAgICBjb25zdCB6UmVjb3JkRGVmID0gKHp0IGFzIEFueVpvZFJlY29yZCkuZGVmO1xuICAgICAgcmV0dXJuIGB6LnJlY29yZCgke3pvZFR5cGVUb1pvZENvZGUoelJlY29yZERlZi5rZXlUeXBlKX0sICR7em9kVHlwZVRvWm9kQ29kZShcbiAgICAgICAgelJlY29yZERlZi52YWx1ZVR5cGUsXG4gICAgICApfSlgO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOiB7XG4gICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbDxzdHJpbmcgfCBudW1iZXI+KS52YWx1ZXMpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGB6LmxpdGVyYWwoJHtpdGVtc1swXX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgei5saXRlcmFsKFske2l0ZW1zLmpvaW4oXCIsIFwiKX1dKWA7XG4gICAgfVxuICAgIGNhc2UgXCJ1bmlvblwiOlxuICAgICAgcmV0dXJuIGB6LnVuaW9uKFskeyh6dCBhcyBBbnlab2RVbmlvbikuZGVmLm9wdGlvbnNcbiAgICAgICAgLm1hcCgob3B0aW9uOiB6LlpvZFR5cGUpID0+IHpvZFR5cGVUb1pvZENvZGUob3B0aW9uKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pYDtcbiAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgLy8gTk9URTogei5lbnVtKFtcIkFcIiwgXCJCXCJdKeuPhCB6LmVudW0oeyBBOiBcIkFcIiwgQjogXCJCXCIgfSnroZwg7LKY66as65CoLlxuICAgICAgcmV0dXJuIGB6LmVudW0oeyR7T2JqZWN0LmVudHJpZXMoKHp0IGFzIHouWm9kRW51bSkuZGVmLmVudHJpZXMpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbF0pID0+ICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiID8gYCR7a2V5fTogXCIke3ZhbH1cImAgOiBgJHtrZXl9OiAke3ZhbH1gKSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKX19KWA7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICByZXR1cm4gYHouYXJyYXkoJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZEFycmF5PHouWm9kVHlwZT4pLmRlZi5lbGVtZW50KX0pYDtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IHNoYXBlID0gKHp0IGFzIEFueVpvZE9iamVjdCkuc2hhcGU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcInoub2JqZWN0KHtcIixcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoc2hhcGUpLm1hcCgoa2V5KSA9PiBgJHtrZXl9OiAke3pvZFR5cGVUb1pvZENvZGUoc2hhcGVba2V5XSl9LGApLFxuICAgICAgICBcIn0pXCIsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNhc2UgXCJvcHRpb25hbFwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoKHp0IGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSl9Lm9wdGlvbmFsKClgO1xuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gYHouZmlsZSgpYDtcbiAgICBjYXNlIFwidGVtcGxhdGVfbGl0ZXJhbFwiOiB7XG4gICAgICBjb25zdCBkZWYgPSAoenQgYXMgQW55Wm9kVGVtcGxhdGVMaXRlcmFsKS5kZWY7XG5cbiAgICAgIC8vIOu5iCB0ZW1wbGF0ZSBsaXRlcmFsXG4gICAgICBpZiAoIWRlZi5wYXJ0cyB8fCBkZWYucGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcInoudGVtcGxhdGVMaXRlcmFsKFtdKVwiO1xuICAgICAgfVxuXG4gICAgICAvLyDqsIEgcGFydOulvCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZhcbiAgICAgIGNvbnN0IHBhcnRzID0gZGVmLnBhcnRzLm1hcCgocGFydDogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyDrrLjsnpDsl7Qg66as7YSw65+0XG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgXCIke3BhcnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIC8vIFpvZFR5cGUgLSDsnqzqt4DsoIHsnLzroZwg67OA7ZmYXG4gICAgICAgIGlmIChwYXJ0ICYmIHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiICYmIChwYXJ0IGFzIHouWm9kVHlwZSkuX3pvZCkge1xuICAgICAgICAgIHJldHVybiB6b2RUeXBlVG9ab2RDb2RlKHBhcnQgYXMgei5ab2RUeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIO2PtOuwsVxuICAgICAgICByZXR1cm4gXCJ6LnN0cmluZygpXCI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGB6LnRlbXBsYXRlTGl0ZXJhbChbJHtwYXJ0cy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwiaW50ZXJzZWN0aW9uXCI6IHtcbiAgICAgIGNvbnN0IHpJbnRlcnNlY3Rpb25EZWYgPSAoenQgYXMgei5ab2RJbnRlcnNlY3Rpb248ei5ab2RUeXBlLCB6LlpvZFR5cGU+KS5kZWY7XG4gICAgICByZXR1cm4gYHouaW50ZXJzZWN0aW9uKCR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLmxlZnQpfSwgJHt6b2RUeXBlVG9ab2RDb2RlKHpJbnRlcnNlY3Rpb25EZWYucmlnaHQpfSlgO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsspjrpqzrkJjsp4Ag7JWK7J2AIFpvZFR5cGUgJHt6dC5kZWYudHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoXsnYQgVUkg66CM642U66eB7JeQIOyCrOyaqe2VoCDsiJgg7J6I64qUIFJlbmRlcmluZ05vZGXroZwg67OA7ZmY7ZWp64uI64ukLlxuICog7J6s6reA7KCB7Jy866GcIOykkeyyqeuQnCDtg4DsnoXrk6TsnYQg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShcbiAgem9kVHlwZTogei5ab2RUeXBlQW55LFxuICBiYXNlS2V5OiBzdHJpbmcgPSBcInJvb3RcIixcbik6IFJlbmRlcmluZ05vZGUge1xuICBjb25zdCBkZWYgPSB7XG4gICAgbmFtZTogYmFzZUtleSxcbiAgICBsYWJlbDogaW5mbGVjdGlvbi5jYW1lbGl6ZShiYXNlS2V5LCBmYWxzZSksXG4gICAgem9kVHlwZSxcbiAgfTtcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIGlmIChpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiBiYXNlS2V5LmluY2x1ZGVzKFwiaW1hZ2VzXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXktaW1hZ2VzXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJhcnJheVwiLFxuICAgICAgZWxlbWVudDogem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICBjb25zdCBvcHRpb25Ob2RlcyA9ICh6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+KS5kZWYub3B0aW9ucy5tYXAoKG9wdCkgPT5cbiAgICAgIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUob3B0LCBiYXNlS2V5KSxcbiAgICApO1xuICAgIC8vIFRPRE86IFpvZFVuaW9u7J20IOuTpOyWtOyeiOuKlCDqsr3smrAg7ZW465Ok66eBXG4gICAgcmV0dXJuIG9wdGlvbk5vZGVzWzBdO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVsbGFibGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uem9kVHlwZVRvUmVuZGVyaW5nTm9kZSgoem9kVHlwZSBhcyB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsIGJhc2VLZXkpLFxuICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogcmVzb2x2ZVJlbmRlclR5cGUoYmFzZUtleSwgem9kVHlwZSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoXqs7wg7YKkIOydtOumhOycvOuhnOu2gO2EsCDsoIHsoIjtlZwgUmVuZGVyVHlwZeydhCDqsrDsoJXtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZW5kZXJUeXBlKGtleTogc3RyaW5nLCB6b2RUeXBlOiB6LlpvZFR5cGVBbnkpOiBSZW5kZXJpbmdOb2RlW1wicmVuZGVyVHlwZVwiXSB7XG4gIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REYXRlKSB7XG4gICAgcmV0dXJuIFwiZGF0ZXRpbWVcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICBpZiAoa2V5LmluY2x1ZGVzKFwiaW1nXCIpIHx8IGtleS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaW1hZ2VcIjtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICByZXR1cm4gXCJlbnVtc1wiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFJlY29yZCkge1xuICAgIHJldHVybiBcInJlY29yZFwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFueSB8fCB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNCaWdJbnRlZ2VyQXJyYXlQcm9wIiwiaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCIsImlzQm9vbGVhbkFycmF5UHJvcCIsImlzQm9vbGVhblNpbmdsZVByb3AiLCJpc0RhdGVBcnJheVByb3AiLCJpc0RhdGVTaW5nbGVQcm9wIiwiaXNFbnVtQXJyYXlQcm9wIiwiaXNFbnVtU2luZ2xlUHJvcCIsImlzSW50ZWdlckFycmF5UHJvcCIsImlzSW50ZWdlclNpbmdsZVByb3AiLCJpc0pzb25Qcm9wIiwiaXNOdW1iZXJBcnJheVByb3AiLCJpc051bWJlclNpbmdsZVByb3AiLCJpc051bWVyaWNBcnJheVByb3AiLCJpc051bWVyaWNTaW5nbGVQcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsImlzUmVsYXRpb25Qcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1NpbmdsZVByb3AiLCJpc1V1aWRBcnJheVByb3AiLCJpc1V1aWRTaW5nbGVQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsImNyZWF0ZUltcG9ydFVybCIsImdldFpvZFR5cGVCeUlkIiwiem9kVHlwZUlkIiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJtb2R1bGVBYnNQYXRoIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiaW1wb3J0VXJsIiwiaW1wb3J0ZWQiLCJFcnJvciIsImRlc2NyaWJlIiwicHJvcFRvWm9kVHlwZSIsInByb3AiLCJ6b2RUeXBlIiwidW5rbm93biIsIm51bWJlciIsImludCIsImFycmF5IiwiYmlnaW50IiwiaWQiLCJsZW5ndGgiLCJzdHJpbmciLCJtYXgiLCJib29sZWFuIiwiZGF0ZSIsInV1aWQiLCJoYXNKb2luQ29sdW1uIiwidW5zaWduZWQiLCJub25uZWdhdGl2ZSIsIm51bGxhYmxlIiwicHJvcFRvWm9kVHlwZURlZiIsImluamVjdEltcG9ydEtleXMiLCJzdG10IiwibmFtZSIsInB1c2giLCJyZWxhdGlvblR5cGUiLCJ3aXRoIiwicHJvcE5vZGVUb1pvZFR5cGVEZWYiLCJwcm9wTm9kZSIsIm5vZGVUeXBlIiwiY2hpbGRyZW4iLCJtYXAiLCJjaGlsZFByb3BOb2RlIiwiem9kVHlwZVRvVHNUeXBlRGVmIiwienQiLCJkZWYiLCJ0eXBlIiwiaW5uZXJUeXBlIiwicmVjb3JkVHlwZSIsImtleVR5cGUiLCJ2YWx1ZVR5cGUiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWwiLCJlbGVtZW50Iiwic2hhcGUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwicGFydHMiLCJwYXJ0IiwiX3pvZCIsInpvZFR5cGVUb1pvZENvZGUiLCJ6RGVmYXVsdERlZiIsImRlZmF1bHRWYWx1ZSIsInpSZWNvcmREZWYiLCJpdGVtcyIsImVudHJpZXMiLCJ6SW50ZXJzZWN0aW9uRGVmIiwibGVmdCIsInJpZ2h0Iiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsImJhc2VLZXkiLCJsYWJlbCIsImNhbWVsaXplIiwiWm9kT2JqZWN0IiwiY29sdW1uS2V5cyIsInJlbmRlclR5cGUiLCJab2RBcnJheSIsIlpvZFN0cmluZyIsImluY2x1ZGVzIiwiWm9kVW5pb24iLCJvcHRpb25Ob2RlcyIsIm9wdCIsIlpvZE9wdGlvbmFsIiwib3B0aW9uYWwiLCJab2ROdWxsYWJsZSIsInJlc29sdmVSZW5kZXJUeXBlIiwiWm9kRGF0ZSIsImRlc2NyaXB0aW9uIiwiZW5kc1dpdGgiLCJab2ROdW1iZXIiLCJab2RCb29sZWFuIiwiWm9kRW51bSIsIlpvZFJlY29yZCIsIlpvZEFueSIsIlpvZFVua25vd24iLCJab2RMaXRlcmFsIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBRUQsT0FBT0EsZ0JBQWdCLGFBQWE7QUFDcEMsT0FBT0MsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBRXhCLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFDdkMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUdFQywwQkFBMEIsRUFDMUJDLHFCQUFxQixFQUNyQkMsc0JBQXNCLEVBQ3RCQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNuQkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNuQkMsVUFBVSxFQUNWQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLHNCQUFzQixFQUN0QkMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGFBQWEsUUFFUixvQkFBaUI7QUFDeEIsU0FBU0MsZUFBZSxRQUFRLHdCQUFxQjtBQVdyRDs7O0NBR0MsR0FDRCxPQUFPLGVBQWVDLGVBQWVDLFNBQWlCO0lBQ3BELE1BQU1DLGFBQWEzQixjQUFjNEIsYUFBYSxDQUFDRjtJQUMvQyxNQUFNRyxnQkFBZ0JoQyxLQUFLaUMsSUFBSSxDQUFDL0IsT0FBT2dDLFdBQVcsRUFBRSxRQUFRLGVBQWUsR0FBR0osV0FBVyxHQUFHLENBQUM7SUFDN0YsTUFBTUssWUFBWVIsZ0JBQWdCSztJQUNsQyxNQUFNSSxXQUFXLE1BQU0sTUFBTSxDQUFDRDtJQUU5QixJQUFJLENBQUNDLFFBQVEsQ0FBQ1AsVUFBVSxFQUFFO1FBQ3hCLE1BQU0sSUFBSVEsTUFBTSxDQUFDLGtCQUFrQixFQUFFUixXQUFXO0lBQ2xEO0lBQ0EsT0FBT08sUUFBUSxDQUFDUCxVQUFVLENBQUNTLFFBQVEsQ0FBQ1Q7QUFDdEM7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLGVBQWVVLGNBQWNDLElBQWdCO0lBQ2xELElBQUlDLFVBQXdCeEMsRUFBRXlDLE9BQU87SUFDckMsSUFBSTVCLG9CQUFvQjBCLE9BQU87UUFDN0JDLFVBQVV4QyxFQUFFMEMsTUFBTSxHQUFHQyxHQUFHO0lBQzFCLE9BQU8sSUFBSS9CLG1CQUFtQjJCLE9BQU87UUFDbkNDLFVBQVV4QyxFQUFFMEMsTUFBTSxHQUFHQyxHQUFHLEdBQUdDLEtBQUs7SUFDbEMsT0FBTyxJQUFJdkMsdUJBQXVCa0MsT0FBTztRQUN2Q0MsVUFBVXhDLEVBQUU2QyxNQUFNO0lBQ3BCLE9BQU8sSUFBSXpDLHNCQUFzQm1DLE9BQU87UUFDdENDLFVBQVV4QyxFQUFFNkMsTUFBTSxHQUFHRCxLQUFLO0lBQzVCLE9BQU8sSUFBSWpDLGlCQUFpQjRCLE9BQU87UUFDakNDLFVBQVUsTUFBTWIsZUFBZVksS0FBS08sRUFBRTtJQUN4QyxPQUFPLElBQUlwQyxnQkFBZ0I2QixPQUFPO1FBQ2hDQyxVQUFVLEFBQUMsQ0FBQSxNQUFNYixlQUFlWSxLQUFLTyxFQUFFLENBQUEsRUFBR0YsS0FBSztJQUNqRCxPQUFPLElBQUl0QixtQkFBbUJpQixPQUFPO1FBQ25DLElBQUlBLEtBQUtRLE1BQU0sRUFBRTtZQUNmUCxVQUFVeEMsRUFBRWdELE1BQU0sR0FBR0MsR0FBRyxDQUFDVixLQUFLUSxNQUFNO1FBQ3RDLE9BQU87WUFDTFAsVUFBVXhDLEVBQUVnRCxNQUFNO1FBQ3BCO0lBQ0YsT0FBTyxJQUFJM0Isa0JBQWtCa0IsT0FBTztRQUNsQyxJQUFJQSxLQUFLUSxNQUFNLEVBQUU7WUFDZlAsVUFBVXhDLEVBQUVnRCxNQUFNLEdBQUdDLEdBQUcsQ0FBQ1YsS0FBS1EsTUFBTSxFQUFFSCxLQUFLO1FBQzdDLE9BQU87WUFDTEosVUFBVXhDLEVBQUVnRCxNQUFNLEdBQUdKLEtBQUs7UUFDNUI7SUFDRixPQUFPLElBQUk1QixtQkFBbUJ1QixPQUFPO1FBQ25DQyxVQUFVeEMsRUFBRTBDLE1BQU07SUFDcEIsT0FBTyxJQUFJM0Isa0JBQWtCd0IsT0FBTztRQUNsQ0MsVUFBVXhDLEVBQUUwQyxNQUFNLEdBQUdFLEtBQUs7SUFDNUIsT0FBTyxJQUFJMUIsb0JBQW9CcUIsT0FBTztRQUNwQ0MsVUFBVXhDLEVBQUVnRCxNQUFNO0lBQ3BCLE9BQU8sSUFBSS9CLG1CQUFtQnNCLE9BQU87UUFDbkNDLFVBQVV4QyxFQUFFZ0QsTUFBTSxHQUFHSixLQUFLO0lBQzVCLE9BQU8sSUFBSXJDLG9CQUFvQmdDLE9BQU87UUFDcENDLFVBQVV4QyxFQUFFa0QsT0FBTztJQUNyQixPQUFPLElBQUk1QyxtQkFBbUJpQyxPQUFPO1FBQ25DQyxVQUFVeEMsRUFBRWtELE9BQU8sR0FBR04sS0FBSztJQUM3QixPQUFPLElBQUluQyxpQkFBaUI4QixPQUFPO1FBQ2pDQyxVQUFVeEMsRUFBRW1ELElBQUk7SUFDbEIsT0FBTyxJQUFJM0MsZ0JBQWdCK0IsT0FBTztRQUNoQ0MsVUFBVXhDLEVBQUVtRCxJQUFJLEdBQUdQLEtBQUs7SUFDMUIsT0FBTyxJQUFJcEIsaUJBQWlCZSxPQUFPO1FBQ2pDQyxVQUFVeEMsRUFBRW9ELElBQUk7SUFDbEIsT0FBTyxJQUFJN0IsZ0JBQWdCZ0IsT0FBTztRQUNoQ0MsVUFBVXhDLEVBQUVvRCxJQUFJLEdBQUdSLEtBQUs7SUFDMUIsT0FBTyxJQUFJOUIsV0FBV3lCLE9BQU87UUFDM0JDLFVBQVUsTUFBTWIsZUFBZVksS0FBS08sRUFBRTtJQUN4QyxPQUFPLElBQUlyQixjQUFjYyxPQUFPO1FBQzlCQyxVQUFVLE1BQU1iLGVBQWVZLEtBQUtPLEVBQUU7SUFDeEMsT0FBTyxJQUFJMUIsZUFBZW1CLE9BQU87UUFDL0IsSUFBSXBDLDJCQUEyQm9DLFNBQVVwQix1QkFBdUJvQixTQUFTQSxLQUFLYyxhQUFhLEVBQUc7WUFDNUZiLFVBQVV4QyxFQUFFMEMsTUFBTSxHQUFHQyxHQUFHO1FBQzFCO0lBQ0YsT0FBTztRQUNMLE1BQU0sSUFBSVAsTUFBTSxDQUFDLHlCQUF5QixFQUFFRyxLQUFLLENBQUMsQ0FBQztJQUNyRDtJQUVBLElBQUksQUFBQ0EsS0FBZ0NlLFFBQVEsRUFBRTtRQUM3Q2QsVUFBVSxBQUFDQSxRQUF3QmUsV0FBVztJQUNoRDtJQUNBLElBQUloQixLQUFLaUIsUUFBUSxFQUFFO1FBQ2pCaEIsVUFBVUEsUUFBUWdCLFFBQVE7SUFDNUI7SUFFQSxPQUFPaEI7QUFDVDtBQUVBOztDQUVDLEdBQ0QsT0FBTyxTQUFTaUIsaUJBQWlCbEIsSUFBZ0IsRUFBRW1CLGdCQUEwQjtJQUMzRSxJQUFJQztJQUNKLElBQUk5QyxvQkFBb0IwQixPQUFPO1FBQzdCb0IsT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxJQUFJaEQsbUJBQW1CMkIsT0FBTztRQUNuQ29CLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDeEMsT0FBTyxJQUFJdkQsdUJBQXVCa0MsT0FBTztRQUN2Q29CLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ25DLE9BQU8sSUFBSXhELHNCQUFzQm1DLE9BQU87UUFDdENvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzNDLE9BQU8sSUFBSWpELGlCQUFpQjRCLE9BQU87UUFDakNvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLEVBQUUsRUFBRXJCLEtBQUtPLEVBQUUsRUFBRTtRQUNqQ1ksaUJBQWlCRyxJQUFJLENBQUN0QixLQUFLTyxFQUFFO0lBQy9CLE9BQU8sSUFBSXBDLGdCQUFnQjZCLE9BQU87UUFDaENvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLEVBQUUsRUFBRXJCLEtBQUtPLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDekNZLGlCQUFpQkcsSUFBSSxDQUFDdEIsS0FBS08sRUFBRTtJQUMvQixPQUFPLElBQUl4QixtQkFBbUJpQixPQUFPO1FBQ25DLElBQUlBLEtBQUtRLE1BQU0sRUFBRTtZQUNmWSxPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFckIsS0FBS1EsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxPQUFPO1lBQ0xZLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25DO0lBQ0YsT0FBTyxJQUFJdkMsa0JBQWtCa0IsT0FBTztRQUNsQyxJQUFJQSxLQUFLUSxNQUFNLEVBQUU7WUFDZlksT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxpQkFBaUIsRUFBRXJCLEtBQUtRLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDL0QsT0FBTztZQUNMWSxPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQzNDO0lBQ0YsT0FBTyxJQUFJNUMsbUJBQW1CdUIsT0FBTztRQUNuQ29CLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ25DLE9BQU8sSUFBSTdDLGtCQUFrQndCLE9BQU87UUFDbENvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzNDLE9BQU8sSUFBSTFDLG9CQUFvQnFCLE9BQU87UUFDcENvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNuQyxPQUFPLElBQUkzQyxtQkFBbUJzQixPQUFPO1FBQ25Db0IsT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUMzQyxPQUFPLElBQUluRCxpQkFBaUI4QixPQUFPO1FBQ2pDb0IsT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDakMsT0FBTyxJQUFJcEQsZ0JBQWdCK0IsT0FBTztRQUNoQ29CLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDekMsT0FBTyxJQUFJckQsb0JBQW9CZ0MsT0FBTztRQUNwQ29CLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3BDLE9BQU8sSUFBSXRELG1CQUFtQmlDLE9BQU87UUFDbkNvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQzVDLE9BQU8sSUFBSXBDLGlCQUFpQmUsT0FBTztRQUNqQ29CLE9BQU8sR0FBR3BCLEtBQUtxQixJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ2pDLE9BQU8sSUFBSXJDLGdCQUFnQmdCLE9BQU87UUFDaENvQixPQUFPLEdBQUdwQixLQUFLcUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3pDLE9BQU8sSUFBSTlDLFdBQVd5QixPQUFPO1FBQzNCb0IsT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxFQUFFLEVBQUVyQixLQUFLTyxFQUFFLEVBQUU7UUFDakNZLGlCQUFpQkcsSUFBSSxDQUFDdEIsS0FBS08sRUFBRTtJQUMvQixPQUFPLElBQUlyQixjQUFjYyxPQUFPO1FBQzlCb0IsT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxFQUFFLEVBQUVyQixLQUFLTyxFQUFFLEVBQUU7UUFDakNZLGlCQUFpQkcsSUFBSSxDQUFDdEIsS0FBS08sRUFBRTtJQUMvQixPQUFPLElBQUkxQixlQUFlbUIsT0FBTztRQUMvQixJQUFJcEMsMkJBQTJCb0MsU0FBVXBCLHVCQUF1Qm9CLFNBQVNBLEtBQUtjLGFBQWEsRUFBRztZQUM1Rk0sT0FBTyxHQUFHcEIsS0FBS3FCLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbkMsT0FBTztZQUNMLHFCQUFxQjtZQUNyQixPQUFPLENBQUMsR0FBRyxFQUFFckIsS0FBS3FCLElBQUksQ0FBQyxFQUFFLEVBQUVyQixLQUFLdUIsWUFBWSxDQUFDLENBQUMsRUFBRXZCLEtBQUt3QixJQUFJLEVBQUU7UUFDN0Q7SUFDRixPQUFPO1FBQ0wsT0FBTztJQUNUO0lBRUEsSUFBSSxBQUFDeEIsS0FBZ0NlLFFBQVEsRUFBRTtRQUM3Q0ssUUFBUTtJQUNWO0lBQ0EsSUFBSXBCLEtBQUtpQixRQUFRLEVBQUU7UUFDakJHLFFBQVE7SUFDVjtJQUVBLE9BQU8sR0FBR0EsS0FBSyxDQUFDLENBQUM7QUFDbkI7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVNLLHFCQUFxQkMsUUFBd0IsRUFBRVAsZ0JBQTBCO0lBQ3ZGLElBQUlPLFNBQVNDLFFBQVEsS0FBSyxTQUFTO1FBQ2pDLE9BQU9ULGlCQUFpQlEsU0FBUzFCLElBQUksRUFBRW1CO0lBQ3pDLE9BQU8sSUFBSU8sU0FBU0MsUUFBUSxLQUFLLFNBQVM7UUFDeEMsT0FBTztZQUNMRCxTQUFTMUIsSUFBSSxHQUFHLEdBQUcwQixTQUFTMUIsSUFBSSxDQUFDcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO1lBQzVDO1lBQ0FLLFNBQVNFLFFBQVEsQ0FDZEMsR0FBRyxDQUFDLENBQUNDLGdCQUFrQkwscUJBQXFCSyxlQUFlWCxtQkFDM0QxQixJQUFJLENBQUM7WUFDUjtZQUNBO1NBQ0QsQ0FBQ0EsSUFBSSxDQUFDO0lBQ1QsT0FBTyxJQUFJaUMsU0FBU0MsUUFBUSxLQUFLLFVBQVU7UUFDekMsT0FBTztZQUNMRCxTQUFTMUIsSUFBSSxHQUFHLEdBQUcwQixTQUFTMUIsSUFBSSxDQUFDcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHO1lBQzVDO1lBQ0FLLFNBQVNFLFFBQVEsQ0FDZEMsR0FBRyxDQUFDLENBQUNDLGdCQUFrQkwscUJBQXFCSyxlQUFlWCxtQkFDM0QxQixJQUFJLENBQUM7WUFDUjtZQUNBLENBQUMsRUFBRSxFQUFFaUMsU0FBUzFCLElBQUksRUFBRWlCLFdBQVcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1NBQ3JELENBQUN4QixJQUFJLENBQUM7SUFDVCxPQUFPO1FBQ0wsTUFBTUk7SUFDUjtBQUNGO0FBRUEsT0FBTyxTQUFTa0MsbUJBQW1CQyxFQUFhO0lBQzlDLE9BQVFBLEdBQUdDLEdBQUcsQ0FBQ0MsSUFBSTtRQUNqQixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1lBQ0gsT0FBT0YsR0FBR0MsR0FBRyxDQUFDQyxJQUFJO1FBQ3BCLEtBQUs7WUFDSCxPQUFPLEdBQUdILG1CQUFtQixBQUFDQyxHQUFzQkMsR0FBRyxDQUFDRSxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQzdFLEtBQUs7WUFDSCxPQUFPSixtQkFBbUIsQUFBQ0MsR0FBcUJDLEdBQUcsQ0FBQ0UsU0FBUztRQUMvRCxLQUFLO1lBQVU7Z0JBQ2IsTUFBTUMsYUFBYUo7Z0JBQ25CLE9BQU8sQ0FBQyxTQUFTLEVBQUVELG1CQUFtQkssV0FBV0gsR0FBRyxDQUFDSSxPQUFPLEVBQUUsSUFBSSxFQUFFTixtQkFBbUJLLFdBQVdILEdBQUcsQ0FBQ0ssU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNySDtRQUNBLEtBQUs7WUFDSCxPQUFPQyxNQUFNQyxJQUFJLENBQUMsQUFBQ1IsR0FBb0JTLE1BQU0sRUFDMUNaLEdBQUcsQ0FBQyxDQUFDYTtnQkFDSixJQUFJLE9BQU9BLFVBQVUsVUFBVTtvQkFDN0IsT0FBTyxDQUFDLENBQUMsRUFBRUEsTUFBTSxDQUFDLENBQUM7Z0JBQ3JCO2dCQUVBLElBQUlBLFVBQVUsTUFBTTtvQkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDZjtnQkFFQSxJQUFJQSxVQUFVQyxXQUFXO29CQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUNwQjtnQkFFQSxPQUFPLEdBQUdELE9BQU87WUFDbkIsR0FDQ2pELElBQUksQ0FBQztRQUNWLEtBQUs7WUFDSCxPQUFPLEdBQUcsQUFBQ3VDLEdBQW1CWSxPQUFPLENBQ2xDZixHQUFHLENBQUMsQ0FBQ2dCLFNBQVdkLG1CQUFtQmMsU0FDbkNwRCxJQUFJLENBQUMsUUFBUTtRQUNsQixLQUFLO1lBQ0gsT0FBTyxHQUFHLEFBQUN1QyxHQUFpQlksT0FBTyxDQUFDZixHQUFHLENBQUMsQ0FBQ2lCLE1BQVEsQ0FBQyxDQUFDLEVBQUVBLElBQUksQ0FBQyxDQUFDLEVBQUVyRCxJQUFJLENBQUMsUUFBUTtRQUM1RSxLQUFLO1lBQ0gsT0FBTyxHQUFHc0MsbUJBQW1CLEFBQUNDLEdBQW1CZSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQy9ELEtBQUs7WUFBVTtnQkFDYixNQUFNQyxRQUFRLEFBQUNoQixHQUFvQmdCLEtBQUs7Z0JBQ3hDLE9BQU87b0JBQ0w7dUJBQ0dDLE9BQU9DLElBQUksQ0FBQ0YsT0FBT25CLEdBQUcsQ0FBQyxDQUFDc0I7d0JBQ3pCLElBQUlILEtBQUssQ0FBQ0csSUFBSSxDQUFDbEIsR0FBRyxDQUFDQyxJQUFJLEtBQUssWUFBWTs0QkFDdEMsT0FBTyxHQUFHaUIsSUFBSSxHQUFHLEVBQUVwQixtQkFBbUJpQixLQUFLLENBQUNHLElBQUksQ0FBQ2xCLEdBQUcsQ0FBQ0UsU0FBUyxFQUFFLENBQUMsQ0FBQzt3QkFDcEUsT0FBTzs0QkFDTCxPQUFPLEdBQUdnQixJQUFJLEVBQUUsRUFBRXBCLG1CQUFtQmlCLEtBQUssQ0FBQ0csSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDckQ7b0JBQ0Y7b0JBQ0E7aUJBQ0QsQ0FBQzFELElBQUksQ0FBQztZQUNUO1FBQ0EsS0FBSztZQUNILE9BQU8sR0FBR3NDLG1CQUFtQixBQUFDQyxHQUFzQkMsR0FBRyxDQUFDRSxTQUFTLEVBQUUsWUFBWSxDQUFDO1FBQ2xGLEtBQUs7WUFBb0I7Z0JBQ3ZCLE1BQU1GLE1BQU0sQUFBQ0QsR0FBNkJDLEdBQUc7Z0JBRTdDLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDQSxJQUFJbUIsS0FBSyxJQUFJbkIsSUFBSW1CLEtBQUssQ0FBQzVDLE1BQU0sS0FBSyxHQUFHO29CQUN4QyxPQUFPO2dCQUNUO2dCQUVBLGdDQUFnQztnQkFDaEMsTUFBTTRDLFFBQVFuQixJQUFJbUIsS0FBSyxDQUFDdkIsR0FBRyxDQUFDLENBQUN3QjtvQkFDM0IsbURBQW1EO29CQUNuRCxJQUFJLE9BQU9BLFNBQVMsVUFBVTt3QkFDNUIsT0FBTyxHQUFHQSxNQUFNO29CQUNsQjtvQkFFQSxxQkFBcUI7b0JBQ3JCLElBQUlBLFFBQVEsT0FBT0EsU0FBUyxZQUFZLEFBQUNBLEtBQW1CQyxJQUFJLEVBQUU7d0JBQ2hFLE1BQU1uQixZQUFZSixtQkFBbUJzQjt3QkFDckMsT0FBTyxDQUFDLEdBQUcsRUFBRWxCLFVBQVUsQ0FBQyxDQUFDO29CQUMzQjtvQkFFQSxLQUFLO29CQUNMLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQ3JCO2dCQUVBLE9BQU8sQ0FBQyxFQUFFLEVBQUVpQixNQUFNM0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hDO1FBQ0EsS0FBSztZQUNILE9BQU87UUFDVDtZQUNFLE1BQU0sSUFBSUksTUFBTSxDQUFDLGdCQUFnQixFQUFFbUMsR0FBR0MsR0FBRyxDQUFDQyxJQUFJLEVBQUU7SUFDcEQ7QUFDRjtBQUVBOztDQUVDLEdBQ0QsT0FBTyxTQUFTcUIsaUJBQWlCdkIsRUFBYTtJQUM1QyxPQUFRQSxHQUFHQyxHQUFHLENBQUNDLElBQUk7UUFDakIsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBTyxHQUFHcUIsaUJBQWlCLEFBQUN2QixHQUFzQkMsR0FBRyxDQUFDRSxTQUFTLEVBQUUsV0FBVyxDQUFDO1FBQy9FLEtBQUs7WUFBVztnQkFDZCxNQUFNcUIsY0FBYyxBQUFDeEIsR0FBcUJDLEdBQUc7Z0JBQzdDLE9BQU8sR0FBR3NCLGlCQUFpQkMsWUFBWXJCLFNBQVMsRUFBRSxTQUFTLEVBQUVxQixZQUFZQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFGO1FBQ0EsS0FBSztZQUFVO2dCQUNiLE1BQU1DLGFBQWEsQUFBQzFCLEdBQW9CQyxHQUFHO2dCQUMzQyxPQUFPLENBQUMsU0FBUyxFQUFFc0IsaUJBQWlCRyxXQUFXckIsT0FBTyxFQUFFLEVBQUUsRUFBRWtCLGlCQUMxREcsV0FBV3BCLFNBQVMsRUFDcEIsQ0FBQyxDQUFDO1lBQ047UUFDQSxLQUFLO1lBQVc7Z0JBQ2QsTUFBTXFCLFFBQVFwQixNQUFNQyxJQUFJLENBQUMsQUFBQ1IsR0FBcUNTLE1BQU0sRUFBRVosR0FBRyxDQUFDLENBQUNhO29CQUMxRSxJQUFJLE9BQU9BLFVBQVUsVUFBVTt3QkFDN0IsT0FBTyxDQUFDLENBQUMsRUFBRUEsTUFBTSxDQUFDLENBQUM7b0JBQ3JCO29CQUVBLElBQUlBLFVBQVUsTUFBTTt3QkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDZjtvQkFFQSxJQUFJQSxVQUFVQyxXQUFXO3dCQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDO29CQUNwQjtvQkFFQSxPQUFPLEdBQUdELE9BQU87Z0JBQ25CO2dCQUVBLElBQUlpQixNQUFNbkQsTUFBTSxLQUFLLEdBQUc7b0JBQ3RCLE9BQU8sQ0FBQyxVQUFVLEVBQUVtRCxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakM7Z0JBQ0EsT0FBTyxDQUFDLFdBQVcsRUFBRUEsTUFBTWxFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQztRQUNBLEtBQUs7WUFDSCxPQUFPLENBQUMsU0FBUyxFQUFFLEFBQUN1QyxHQUFtQkMsR0FBRyxDQUFDVyxPQUFPLENBQy9DZixHQUFHLENBQUMsQ0FBQ2dCLFNBQXNCVSxpQkFBaUJWLFNBQzVDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLEtBQUs7WUFDSCw2REFBNkQ7WUFDN0QsT0FBTyxDQUFDLFFBQVEsRUFBRXdELE9BQU9XLE9BQU8sQ0FBQyxBQUFDNUIsR0FBaUJDLEdBQUcsQ0FBQzJCLE9BQU8sRUFDM0QvQixHQUFHLENBQUMsQ0FBQyxDQUFDc0IsS0FBS0wsSUFBSSxHQUFNLE9BQU9BLFFBQVEsV0FBVyxHQUFHSyxJQUFJLEdBQUcsRUFBRUwsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHSyxJQUFJLEVBQUUsRUFBRUwsS0FBSyxFQUNwRnJELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixLQUFLO1lBQ0gsT0FBTyxDQUFDLFFBQVEsRUFBRThELGlCQUFpQixBQUFDdkIsR0FBNkJDLEdBQUcsQ0FBQ2MsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRixLQUFLO1lBQVU7Z0JBQ2IsTUFBTUMsUUFBUSxBQUFDaEIsR0FBb0JnQixLQUFLO2dCQUN4QyxPQUFPO29CQUNMO3VCQUNHQyxPQUFPQyxJQUFJLENBQUNGLE9BQU9uQixHQUFHLENBQUMsQ0FBQ3NCLE1BQVEsR0FBR0EsSUFBSSxFQUFFLEVBQUVJLGlCQUFpQlAsS0FBSyxDQUFDRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUM3RTtpQkFDRCxDQUFDMUQsSUFBSSxDQUFDO1lBQ1Q7UUFDQSxLQUFLO1lBQ0gsT0FBTyxHQUFHOEQsaUJBQWlCLEFBQUN2QixHQUFnQ0MsR0FBRyxDQUFDRSxTQUFTLEVBQUUsV0FBVyxDQUFDO1FBQ3pGLEtBQUs7WUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ25CLEtBQUs7WUFBb0I7Z0JBQ3ZCLE1BQU1GLE1BQU0sQUFBQ0QsR0FBNkJDLEdBQUc7Z0JBRTdDLHFCQUFxQjtnQkFDckIsSUFBSSxDQUFDQSxJQUFJbUIsS0FBSyxJQUFJbkIsSUFBSW1CLEtBQUssQ0FBQzVDLE1BQU0sS0FBSyxHQUFHO29CQUN4QyxPQUFPO2dCQUNUO2dCQUVBLHlCQUF5QjtnQkFDekIsTUFBTTRDLFFBQVFuQixJQUFJbUIsS0FBSyxDQUFDdkIsR0FBRyxDQUFDLENBQUN3QjtvQkFDM0IsVUFBVTtvQkFDVixJQUFJLE9BQU9BLFNBQVMsVUFBVTt3QkFDNUIsT0FBTyxDQUFDLENBQUMsRUFBRUEsS0FBSyxDQUFDLENBQUM7b0JBQ3BCO29CQUNBLHFCQUFxQjtvQkFDckIsSUFBSUEsUUFBUSxPQUFPQSxTQUFTLFlBQVksQUFBQ0EsS0FBbUJDLElBQUksRUFBRTt3QkFDaEUsT0FBT0MsaUJBQWlCRjtvQkFDMUI7b0JBRUEsS0FBSztvQkFDTCxPQUFPO2dCQUNUO2dCQUVBLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRUQsTUFBTTNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRDtRQUNBLEtBQUs7WUFBZ0I7Z0JBQ25CLE1BQU1vRSxtQkFBbUIsQUFBQzdCLEdBQStDQyxHQUFHO2dCQUM1RSxPQUFPLENBQUMsZUFBZSxFQUFFc0IsaUJBQWlCTSxpQkFBaUJDLElBQUksRUFBRSxFQUFFLEVBQUVQLGlCQUFpQk0saUJBQWlCRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2xIO1FBQ0E7WUFDRSxNQUFNLElBQUlsRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUVtQyxHQUFHQyxHQUFHLENBQUNDLElBQUksRUFBRTtJQUNwRDtBQUNGO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTOEIsdUJBQ2QvRCxPQUFxQixFQUNyQmdFLFVBQWtCLE1BQU07SUFFeEIsTUFBTWhDLE1BQU07UUFDVlosTUFBTTRDO1FBQ05DLE9BQU8zRyxXQUFXNEcsUUFBUSxDQUFDRixTQUFTO1FBQ3BDaEU7SUFDRjtJQUNBLElBQUlBLG1CQUFtQnhDLEVBQUUyRyxTQUFTLEVBQUU7UUFDbEMsTUFBTUMsYUFBYXBCLE9BQU9DLElBQUksQ0FBQ2pELFFBQVErQyxLQUFLO1FBQzVDLE1BQU1wQixXQUFXeUMsV0FBV3hDLEdBQUcsQ0FBQyxDQUFDc0I7WUFDL0IsTUFBTWhCLFlBQVlsQyxRQUFRK0MsS0FBSyxDQUFDRyxJQUFJO1lBQ3BDLE9BQU9hLHVCQUF1QjdCLFdBQVdnQjtRQUMzQztRQUNBLE9BQU87WUFDTCxHQUFHbEIsR0FBRztZQUNOcUMsWUFBWTtZQUNaMUM7UUFDRjtJQUNGLE9BQU8sSUFBSTNCLG1CQUFtQnhDLEVBQUU4RyxRQUFRLEVBQUU7UUFDeEMsTUFBTXBDLFlBQVksQUFBQ2xDLFFBQXFDZ0MsR0FBRyxDQUFDYyxPQUFPO1FBQ25FLElBQUlaLHFCQUFxQjFFLEVBQUUrRyxTQUFTLElBQUlQLFFBQVFRLFFBQVEsQ0FBQyxXQUFXO1lBQ2xFLE9BQU87Z0JBQ0wsR0FBR3hDLEdBQUc7Z0JBQ05xQyxZQUFZO1lBQ2Q7UUFDRjtRQUNBLE9BQU87WUFDTCxHQUFHckMsR0FBRztZQUNOcUMsWUFBWTtZQUNadkIsU0FBU2lCLHVCQUF1QjdCLFdBQVc4QjtRQUM3QztJQUNGLE9BQU8sSUFBSWhFLG1CQUFtQnhDLEVBQUVpSCxRQUFRLEVBQUU7UUFDeEMsTUFBTUMsY0FBYyxBQUFDMUUsUUFBb0NnQyxHQUFHLENBQUNXLE9BQU8sQ0FBQ2YsR0FBRyxDQUFDLENBQUMrQyxNQUN4RVosdUJBQXVCWSxLQUFLWDtRQUU5Qiw4QkFBOEI7UUFDOUIsT0FBT1UsV0FBVyxDQUFDLEVBQUU7SUFDdkIsT0FBTyxJQUFJMUUsbUJBQW1CeEMsRUFBRW9ILFdBQVcsRUFBRTtRQUMzQyxPQUFPO1lBQ0wsR0FBR2IsdUJBQXVCLEFBQUMvRCxRQUFxQ2dDLEdBQUcsQ0FBQ0UsU0FBUyxFQUFFOEIsUUFBUTtZQUN2RmEsVUFBVTtRQUNaO0lBQ0YsT0FBTyxJQUFJN0UsbUJBQW1CeEMsRUFBRXNILFdBQVcsRUFBRTtRQUMzQyxPQUFPO1lBQ0wsR0FBR2YsdUJBQXVCLEFBQUMvRCxRQUFxQ2dDLEdBQUcsQ0FBQ0UsU0FBUyxFQUFFOEIsUUFBUTtZQUN2RmhELFVBQVU7UUFDWjtJQUNGLE9BQU87UUFDTCxPQUFPO1lBQ0wsR0FBR2dCLEdBQUc7WUFDTnFDLFlBQVlVLGtCQUFrQmYsU0FBU2hFO1FBQ3pDO0lBQ0Y7QUFDRjtBQUVBOztDQUVDLEdBQ0QsU0FBUytFLGtCQUFrQjdCLEdBQVcsRUFBRWxELE9BQXFCO0lBQzNELElBQUlBLG1CQUFtQnhDLEVBQUV3SCxPQUFPLEVBQUU7UUFDaEMsT0FBTztJQUNULE9BQU8sSUFBSWhGLG1CQUFtQnhDLEVBQUUrRyxTQUFTLEVBQUU7UUFDekMsSUFBSXJCLElBQUlzQixRQUFRLENBQUMsVUFBVXRCLElBQUlzQixRQUFRLENBQUMsVUFBVTtZQUNoRCxPQUFPO1FBQ1QsT0FBTyxJQUFJeEUsUUFBUWlGLFdBQVcsS0FBSyxxQkFBcUI7WUFDdEQsT0FBTztRQUNULE9BQU8sSUFBSS9CLElBQUlnQyxRQUFRLENBQUMsU0FBUztZQUMvQixPQUFPO1FBQ1QsT0FBTztZQUNMLE9BQU87UUFDVDtJQUNGLE9BQU8sSUFBSWxGLG1CQUFtQnhDLEVBQUUySCxTQUFTLEVBQUU7UUFDekMsSUFBSWpDLFFBQVEsTUFBTTtZQUNoQixPQUFPO1FBQ1QsT0FBTyxJQUFJQSxJQUFJZ0MsUUFBUSxDQUFDLFFBQVE7WUFDOUIsT0FBTztRQUNULE9BQU87WUFDTCxPQUFPO1FBQ1Q7SUFDRixPQUFPLElBQUlsRixtQkFBbUJ4QyxFQUFFNEgsVUFBVSxFQUFFO1FBQzFDLE9BQU87SUFDVCxPQUFPLElBQUlwRixtQkFBbUJ4QyxFQUFFNkgsT0FBTyxFQUFFO1FBQ3ZDLE9BQU87SUFDVCxPQUFPLElBQUlyRixtQkFBbUJ4QyxFQUFFOEgsU0FBUyxFQUFFO1FBQ3pDLE9BQU87SUFDVCxPQUFPLElBQUl0RixtQkFBbUJ4QyxFQUFFK0gsTUFBTSxJQUFJdkYsbUJBQW1CeEMsRUFBRWdJLFVBQVUsRUFBRTtRQUN6RSxPQUFPO0lBQ1QsT0FBTyxJQUFJeEYsbUJBQW1CeEMsRUFBRWlILFFBQVEsRUFBRTtRQUN4QyxPQUFPO0lBQ1QsT0FBTyxJQUFJekUsbUJBQW1CeEMsRUFBRWlJLFVBQVUsRUFBRTtRQUMxQyxPQUFPO0lBQ1QsT0FBTztRQUNMLE1BQU0sSUFBSTdGLE1BQU0sQ0FBQyxTQUFTLEVBQUVzRCxJQUFJLENBQUMsRUFBRWxELFFBQVFnQyxHQUFHLENBQUNDLElBQUksRUFBRTtJQUN2RDtBQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_relation-graph.d.ts","sourceRoot":"","sources":["../../src/testing/_relation-graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_relation-graph.d.ts","sourceRoot":"","sources":["../../src/testing/_relation-graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAS9E,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAwC;IAErD,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI;IA+C3C,iBAAiB,IAAI,MAAM,EAAE;CAyD9B"}
|