@hitsoft/kadooglu.kalite 0.0.0-stage → 1.0.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.
Files changed (62) hide show
  1. package/README.md +23 -2
  2. package/config/enums/index.d.ts +1 -0
  3. package/config/enums/route-names.d.ts +5 -0
  4. package/config/index.d.ts +5 -0
  5. package/config/kalite-config.module.d.ts +8 -0
  6. package/config/providers/index.d.ts +1 -0
  7. package/config/providers/route.provider.d.ts +4 -0
  8. package/config/public-api.d.ts +3 -0
  9. package/esm2020/config/enums/index.mjs +2 -0
  10. package/esm2020/config/enums/route-names.mjs +2 -0
  11. package/esm2020/config/hitsoft-kadooglu.kalite-config.mjs +5 -0
  12. package/esm2020/config/kalite-config.module.mjs +18 -0
  13. package/esm2020/config/providers/index.mjs +2 -0
  14. package/esm2020/config/providers/route.provider.mjs +57 -0
  15. package/esm2020/config/public-api.mjs +4 -0
  16. package/esm2020/hitsoft-kadooglu.kalite.mjs +5 -0
  17. package/esm2020/lib/components/intake-form.component.mjs +162 -0
  18. package/esm2020/lib/components/intake-list.component.mjs +80 -0
  19. package/esm2020/lib/components/kalite.component.mjs +18 -0
  20. package/esm2020/lib/components/process-analysis.component.mjs +197 -0
  21. package/esm2020/lib/components/quality-definitions.component.mjs +97 -0
  22. package/esm2020/lib/components/quality-notifications.component.mjs +64 -0
  23. package/esm2020/lib/components/quality-parameters.component.mjs +332 -0
  24. package/esm2020/lib/components/quality-reports.component.mjs +107 -0
  25. package/esm2020/lib/kalite-notification.module.mjs +23 -0
  26. package/esm2020/lib/kalite-routing.module.mjs +41 -0
  27. package/esm2020/lib/kalite.module.mjs +41 -0
  28. package/esm2020/lib/models/intake.models.mjs +2 -0
  29. package/esm2020/lib/models/quality.models.mjs +2 -0
  30. package/esm2020/lib/services/kalite.service.mjs +21 -0
  31. package/esm2020/lib/services/print-form.mjs +96 -0
  32. package/esm2020/lib/services/quality-api.service.mjs +119 -0
  33. package/esm2020/lib/services/quality-measurements.mjs +127 -0
  34. package/esm2020/public-api.mjs +16 -0
  35. package/fesm2015/hitsoft-kadooglu.kalite-config.mjs +80 -0
  36. package/fesm2015/hitsoft-kadooglu.kalite-config.mjs.map +1 -0
  37. package/fesm2015/hitsoft-kadooglu.kalite.mjs +1483 -0
  38. package/fesm2015/hitsoft-kadooglu.kalite.mjs.map +1 -0
  39. package/fesm2020/hitsoft-kadooglu.kalite-config.mjs +80 -0
  40. package/fesm2020/hitsoft-kadooglu.kalite-config.mjs.map +1 -0
  41. package/fesm2020/hitsoft-kadooglu.kalite.mjs +1442 -0
  42. package/fesm2020/hitsoft-kadooglu.kalite.mjs.map +1 -0
  43. package/index.d.ts +5 -0
  44. package/lib/components/intake-form.component.d.ts +50 -0
  45. package/lib/components/intake-list.component.d.ts +48 -0
  46. package/lib/components/kalite.component.d.ts +10 -0
  47. package/lib/components/process-analysis.component.d.ts +46 -0
  48. package/lib/components/quality-definitions.component.d.ts +46 -0
  49. package/lib/components/quality-notifications.component.d.ts +44 -0
  50. package/lib/components/quality-parameters.component.d.ts +82 -0
  51. package/lib/components/quality-reports.component.d.ts +31 -0
  52. package/lib/kalite-notification.module.d.ts +14 -0
  53. package/lib/kalite-routing.module.d.ts +7 -0
  54. package/lib/kalite.module.d.ts +23 -0
  55. package/lib/models/intake.models.d.ts +185 -0
  56. package/lib/models/quality.models.d.ts +114 -0
  57. package/lib/services/kalite.service.d.ts +10 -0
  58. package/lib/services/print-form.d.ts +2 -0
  59. package/lib/services/quality-api.service.d.ts +71 -0
  60. package/lib/services/quality-measurements.d.ts +8 -0
  61. package/package.json +42 -3
  62. package/public-api.d.ts +12 -0
package/README.md CHANGED
@@ -1,3 +1,24 @@
1
- # Temporary Holding Version
1
+ # Kalite
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.4.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project kalite` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project kalite`.
8
+ > Note: Don't forget to add `--project kalite` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build kalite` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build kalite`, go to the dist folder `cd dist/kalite` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test kalite` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1 @@
1
+ export * from './route-names';
@@ -0,0 +1,5 @@
1
+ export declare const enum eKaliteRouteNames {
2
+ Kalite = "Kalite::Menu:Kalite",
3
+ ProcessAnalysis = "Kalite::Menu:ProcessAnalysis",
4
+ Parameters = "Kalite::Menu:Parameters"
5
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@hitsoft/kadooglu.kalite/config" />
5
+ export * from './public-api';
@@ -0,0 +1,8 @@
1
+ import { ModuleWithProviders } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class KaliteConfigModule {
4
+ static forRoot(): ModuleWithProviders<KaliteConfigModule>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<KaliteConfigModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KaliteConfigModule, never, never, never>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<KaliteConfigModule>;
8
+ }
@@ -0,0 +1 @@
1
+ export * from './route.provider';
@@ -0,0 +1,4 @@
1
+ import { RoutesService } from '@abp/ng.core';
2
+ import { Provider } from '@angular/core';
3
+ export declare const KALITE_ROUTE_PROVIDERS: Provider[];
4
+ export declare function configureRoutes(routes: RoutesService): () => void;
@@ -0,0 +1,3 @@
1
+ export * from './enums';
2
+ export * from './kalite-config.module';
3
+ export * from './providers';
@@ -0,0 +1,2 @@
1
+ export * from './route-names';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcm91dGUtbmFtZXMnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtbmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9lbnVtcy9yb3V0ZS1uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudW0gZUthbGl0ZVJvdXRlTmFtZXMge1xuICBLYWxpdGUgPSAnS2FsaXRlOjpNZW51OkthbGl0ZScsXG4gIFByb2Nlc3NBbmFseXNpcyA9ICdLYWxpdGU6Ok1lbnU6UHJvY2Vzc0FuYWx5c2lzJyxcbiAgUGFyYW1ldGVycyA9ICdLYWxpdGU6Ok1lbnU6UGFyYW1ldGVycycsXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0c29mdC1rYWRvb2dsdS5rYWxpdGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMva2FsaXRlL2NvbmZpZy9zcmMvaGl0c29mdC1rYWRvb2dsdS5rYWxpdGUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { KALITE_ROUTE_PROVIDERS } from './providers/route.provider';
3
+ import * as i0 from "@angular/core";
4
+ export class KaliteConfigModule {
5
+ static forRoot() {
6
+ return {
7
+ ngModule: KaliteConfigModule,
8
+ providers: [KALITE_ROUTE_PROVIDERS],
9
+ };
10
+ }
11
+ }
12
+ KaliteConfigModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ KaliteConfigModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule });
14
+ KaliteConfigModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KaliteConfigModule, decorators: [{
16
+ type: NgModule
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FsaXRlLWNvbmZpZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9rYWxpdGUtY29uZmlnLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHcEUsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO1NBQ3BDLENBQUM7SUFDSixDQUFDOzsrR0FOVSxrQkFBa0I7Z0hBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS0FMSVRFX1JPVVRFX1BST1ZJREVSUyB9IGZyb20gJy4vcHJvdmlkZXJzL3JvdXRlLnByb3ZpZGVyJztcblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBLYWxpdGVDb25maWdNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEthbGl0ZUNvbmZpZ01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogS2FsaXRlQ29uZmlnTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbS0FMSVRFX1JPVVRFX1BST1ZJREVSU10sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './route.provider';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcm91dGUucHJvdmlkZXInO1xuIl19
@@ -0,0 +1,57 @@
1
+ import { RoutesService } from '@abp/ng.core';
2
+ import { APP_INITIALIZER } from '@angular/core';
3
+ export const KALITE_ROUTE_PROVIDERS = [
4
+ {
5
+ provide: APP_INITIALIZER,
6
+ useFactory: configureRoutes,
7
+ deps: [RoutesService],
8
+ multi: true,
9
+ },
10
+ ];
11
+ export function configureRoutes(routes) {
12
+ return () => {
13
+ routes.add([
14
+ {
15
+ path: '/kalite',
16
+ name: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */,
17
+ iconClass: 'fas fa-flask',
18
+ layout: "application" /* eLayoutType.application */,
19
+ order: 3,
20
+ requiredPolicy: 'Kalite.ProcessAnalysis || Kalite.Parameters || Kalite.Definitions || Kalite.Reports || Kalite.Notifications.Configure',
21
+ },
22
+ {
23
+ path: '/kalite/process-analysis',
24
+ parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */,
25
+ name: "Kalite::Menu:ProcessAnalysis" /* eKaliteRouteNames.ProcessAnalysis */,
26
+ layout: "application" /* eLayoutType.application */,
27
+ order: 1,
28
+ requiredPolicy: 'Kalite.ProcessAnalysis',
29
+ },
30
+ {
31
+ path: '/kalite/parameters',
32
+ parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */,
33
+ name: "Kalite::Menu:Parameters" /* eKaliteRouteNames.Parameters */,
34
+ layout: "application" /* eLayoutType.application */,
35
+ order: 2,
36
+ requiredPolicy: 'Kalite.Parameters',
37
+ },
38
+ {
39
+ path: '/kalite/intake',
40
+ parentName: 'KadoogluTartim::Menu:KadoogluTartim',
41
+ name: 'Kalite::Menu:Intake', layout: "application" /* eLayoutType.application */,
42
+ order: 4, requiredPolicy: 'Kalite.Intake',
43
+ },
44
+ { path: '/kalite/definitions', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:Definitions',
45
+ layout: "application" /* eLayoutType.application */, order: 3, requiredPolicy: 'Kalite.Definitions' },
46
+ { path: '/kalite/reports/input', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:InputReports',
47
+ layout: "application" /* eLayoutType.application */, order: 4, requiredPolicy: 'Kalite.Reports' },
48
+ { path: '/kalite/reports/process', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:ProcessReports',
49
+ layout: "application" /* eLayoutType.application */, order: 5, requiredPolicy: 'Kalite.Reports' },
50
+ { path: '/kalite/reports/rejected', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:RejectionReports',
51
+ layout: "application" /* eLayoutType.application */, order: 6, requiredPolicy: 'Kalite.Reports' },
52
+ { path: '/kalite/notification-settings', parentName: "Kalite::Menu:Kalite" /* eKaliteRouteNames.Kalite */, name: 'Kalite::Menu:NotificationSettings',
53
+ layout: "application" /* eLayoutType.application */, order: 7, requiredPolicy: 'Kalite.Notifications.Configure' },
54
+ ]);
55
+ };
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvY29uZmlnL3NyYy9wcm92aWRlcnMvcm91dGUucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRzFELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFlO0lBQ2hEO1FBQ0UsT0FBTyxFQUFFLGVBQWU7UUFDeEIsVUFBVSxFQUFFLGVBQWU7UUFDM0IsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ3JCLEtBQUssRUFBRSxJQUFJO0tBQ1o7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFxQjtJQUNuRCxPQUFPLEdBQUcsRUFBRTtRQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDVDtnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLHNEQUEwQjtnQkFDOUIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLE1BQU0sNkNBQXlCO2dCQUMvQixLQUFLLEVBQUUsQ0FBQztnQkFDUixjQUFjLEVBQUUsdUhBQXVIO2FBQ3hJO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxzREFBMEI7Z0JBQ3BDLElBQUksd0VBQW1DO2dCQUN2QyxNQUFNLDZDQUF5QjtnQkFDL0IsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsY0FBYyxFQUFFLHdCQUF3QjthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLFVBQVUsc0RBQTBCO2dCQUNwQyxJQUFJLDhEQUE4QjtnQkFDbEMsTUFBTSw2Q0FBeUI7Z0JBQy9CLEtBQUssRUFBRSxDQUFDO2dCQUNSLGNBQWMsRUFBRSxtQkFBbUI7YUFDcEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixVQUFVLEVBQUUscUNBQXFDO2dCQUNqRCxJQUFJLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBeUI7Z0JBQzVELEtBQUssRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLGVBQWU7YUFDMUM7WUFDRCxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxVQUFVLHNEQUEwQixFQUFFLElBQUksRUFBRSwwQkFBMEI7Z0JBQ25HLE1BQU0sNkNBQXlCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUU7WUFDbkYsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxzREFBMEIsRUFBRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUN0RyxNQUFNLDZDQUF5QixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFO1lBQy9FLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLFVBQVUsc0RBQTBCLEVBQUUsSUFBSSxFQUFFLDZCQUE2QjtnQkFDMUcsTUFBTSw2Q0FBeUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTtZQUMvRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSxVQUFVLHNEQUEwQixFQUFFLElBQUksRUFBRSwrQkFBK0I7Z0JBQzdHLE1BQU0sNkNBQXlCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUU7WUFDL0UsRUFBRSxJQUFJLEVBQUUsK0JBQStCLEVBQUUsVUFBVSxzREFBMEIsRUFBRSxJQUFJLEVBQUUsbUNBQW1DO2dCQUN0SCxNQUFNLDZDQUF5QixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLGdDQUFnQyxFQUFFO1NBQ2hHLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlTGF5b3V0VHlwZSwgUm91dGVzU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBBUFBfSU5JVElBTElaRVIsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBlS2FsaXRlUm91dGVOYW1lcyB9IGZyb20gJy4uL2VudW1zL3JvdXRlLW5hbWVzJztcblxuZXhwb3J0IGNvbnN0IEtBTElURV9ST1VURV9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gIHtcbiAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgdXNlRmFjdG9yeTogY29uZmlndXJlUm91dGVzLFxuICAgIGRlcHM6IFtSb3V0ZXNTZXJ2aWNlXSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVSb3V0ZXMocm91dGVzOiBSb3V0ZXNTZXJ2aWNlKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcm91dGVzLmFkZChbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcva2FsaXRlJyxcbiAgICAgICAgbmFtZTogZUthbGl0ZVJvdXRlTmFtZXMuS2FsaXRlLFxuICAgICAgICBpY29uQ2xhc3M6ICdmYXMgZmEtZmxhc2snLFxuICAgICAgICBsYXlvdXQ6IGVMYXlvdXRUeXBlLmFwcGxpY2F0aW9uLFxuICAgICAgICBvcmRlcjogMyxcbiAgICAgICAgcmVxdWlyZWRQb2xpY3k6ICdLYWxpdGUuUHJvY2Vzc0FuYWx5c2lzIHx8IEthbGl0ZS5QYXJhbWV0ZXJzIHx8IEthbGl0ZS5EZWZpbml0aW9ucyB8fCBLYWxpdGUuUmVwb3J0cyB8fCBLYWxpdGUuTm90aWZpY2F0aW9ucy5Db25maWd1cmUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9rYWxpdGUvcHJvY2Vzcy1hbmFseXNpcycsXG4gICAgICAgIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSxcbiAgICAgICAgbmFtZTogZUthbGl0ZVJvdXRlTmFtZXMuUHJvY2Vzc0FuYWx5c2lzLFxuICAgICAgICBsYXlvdXQ6IGVMYXlvdXRUeXBlLmFwcGxpY2F0aW9uLFxuICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgcmVxdWlyZWRQb2xpY3k6ICdLYWxpdGUuUHJvY2Vzc0FuYWx5c2lzJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcva2FsaXRlL3BhcmFtZXRlcnMnLFxuICAgICAgICBwYXJlbnROYW1lOiBlS2FsaXRlUm91dGVOYW1lcy5LYWxpdGUsXG4gICAgICAgIG5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLlBhcmFtZXRlcnMsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sXG4gICAgICAgIG9yZGVyOiAyLFxuICAgICAgICByZXF1aXJlZFBvbGljeTogJ0thbGl0ZS5QYXJhbWV0ZXJzJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcva2FsaXRlL2ludGFrZScsXG4gICAgICAgIHBhcmVudE5hbWU6ICdLYWRvb2dsdVRhcnRpbTo6TWVudTpLYWRvb2dsdVRhcnRpbScsXG4gICAgICAgIG5hbWU6ICdLYWxpdGU6Ok1lbnU6SW50YWtlJywgbGF5b3V0OiBlTGF5b3V0VHlwZS5hcHBsaWNhdGlvbixcbiAgICAgICAgb3JkZXI6IDQsIHJlcXVpcmVkUG9saWN5OiAnS2FsaXRlLkludGFrZScsXG4gICAgICB9LFxuICAgICAgeyBwYXRoOiAnL2thbGl0ZS9kZWZpbml0aW9ucycsIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSwgbmFtZTogJ0thbGl0ZTo6TWVudTpEZWZpbml0aW9ucycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiAzLCByZXF1aXJlZFBvbGljeTogJ0thbGl0ZS5EZWZpbml0aW9ucycgfSxcbiAgICAgIHsgcGF0aDogJy9rYWxpdGUvcmVwb3J0cy9pbnB1dCcsIHBhcmVudE5hbWU6IGVLYWxpdGVSb3V0ZU5hbWVzLkthbGl0ZSwgbmFtZTogJ0thbGl0ZTo6TWVudTpJbnB1dFJlcG9ydHMnLFxuICAgICAgICBsYXlvdXQ6IGVMYXlvdXRUeXBlLmFwcGxpY2F0aW9uLCBvcmRlcjogNCwgcmVxdWlyZWRQb2xpY3k6ICdLYWxpdGUuUmVwb3J0cycgfSxcbiAgICAgIHsgcGF0aDogJy9rYWxpdGUvcmVwb3J0cy9wcm9jZXNzJywgcGFyZW50TmFtZTogZUthbGl0ZVJvdXRlTmFtZXMuS2FsaXRlLCBuYW1lOiAnS2FsaXRlOjpNZW51OlByb2Nlc3NSZXBvcnRzJyxcbiAgICAgICAgbGF5b3V0OiBlTGF5b3V0VHlwZS5hcHBsaWNhdGlvbiwgb3JkZXI6IDUsIHJlcXVpcmVkUG9saWN5OiAnS2FsaXRlLlJlcG9ydHMnIH0sXG4gICAgICB7IHBhdGg6ICcva2FsaXRlL3JlcG9ydHMvcmVqZWN0ZWQnLCBwYXJlbnROYW1lOiBlS2FsaXRlUm91dGVOYW1lcy5LYWxpdGUsIG5hbWU6ICdLYWxpdGU6Ok1lbnU6UmVqZWN0aW9uUmVwb3J0cycsXG4gICAgICAgIGxheW91dDogZUxheW91dFR5cGUuYXBwbGljYXRpb24sIG9yZGVyOiA2LCByZXF1aXJlZFBvbGljeTogJ0thbGl0ZS5SZXBvcnRzJyB9LFxuICAgICAgeyBwYXRoOiAnL2thbGl0ZS9ub3RpZmljYXRpb24tc2V0dGluZ3MnLCBwYXJlbnROYW1lOiBlS2FsaXRlUm91dGVOYW1lcy5LYWxpdGUsIG5hbWU6ICdLYWxpdGU6Ok1lbnU6Tm90aWZpY2F0aW9uU2V0dGluZ3MnLFxuICAgICAgICBsYXlvdXQ6IGVMYXlvdXRUeXBlLmFwcGxpY2F0aW9uLCBvcmRlcjogNywgcmVxdWlyZWRQb2xpY3k6ICdLYWxpdGUuTm90aWZpY2F0aW9ucy5Db25maWd1cmUnIH0sXG4gICAgXSk7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './enums';
2
+ export * from './kalite-config.module';
3
+ export * from './providers';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2thbGl0ZS9jb25maWcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9rYWxpdGUtY29uZmlnLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0c29mdC1rYWRvb2dsdS5rYWxpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvc3JjL2hpdHNvZnQta2Fkb29nbHUua2FsaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,162 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { applicableLimit, errorMessage, localDate, recalculate, statusLabel } from '../services/quality-measurements';
5
+ import { printForm } from '../services/print-form';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../services/quality-api.service";
8
+ import * as i2 from "@angular/router";
9
+ import * as i3 from "@abp/ng.core";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ export class IntakeFormComponent {
13
+ constructor(api, route, router, permissions) {
14
+ this.api = api;
15
+ this.route = route;
16
+ this.router = router;
17
+ this.permissions = permissions;
18
+ this.form = null;
19
+ this.tanks = [];
20
+ this.busy = false;
21
+ this.error = '';
22
+ this.success = '';
23
+ this.validationError = '';
24
+ this.decision = '';
25
+ this.viewOnly = false;
26
+ this.compositeEditor = false;
27
+ this.compositeMeasurements = [];
28
+ this.statusLabel = statusLabel;
29
+ this.destroy = new Subject();
30
+ }
31
+ ngOnInit() {
32
+ this.route.paramMap.pipe(takeUntil(this.destroy)).subscribe(params => { this.viewOnly = this.route.snapshot.queryParamMap.get('mode') === 'view'; this.load(Number(params.get('id'))); });
33
+ this.api.tanks().subscribe({ next: tanks => this.tanks = tanks.filter(x => x.active), error: e => this.error = errorMessage(e) });
34
+ }
35
+ ngOnDestroy() { this.destroy.next(); this.destroy.complete(); }
36
+ allowed(action) { return this.permissions.getGrantedPolicy('Kalite.Intake.' + action); }
37
+ get editable() { return !!this.form?.canEdit && !this.viewOnly && this.allowed('Edit'); }
38
+ get parameters() { return this.form?.inspection.templateSnapshot?.parameters.filter(x => x.active).sort((a, b) => a.order - b.order) || []; }
39
+ get palm() { return this.form?.details.find(x => x.code === this.form?.inspection.movementDetailCode)?.profile === 'PALM'; }
40
+ localTime(value) { const d = new Date(value); return localDate(d) + 'T' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0'); }
41
+ load(id) {
42
+ if (!Number.isInteger(id) || id <= 0) {
43
+ this.error = 'Geçerli bir araç kaydı seçin.';
44
+ return;
45
+ }
46
+ this.busy = true;
47
+ this.error = '';
48
+ this.api.intake(id).subscribe({ next: form => { this.form = form; form.inspection.inspectedAt = this.localTime(form.inspection.inspectedAt); this.decision = ''; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });
49
+ }
50
+ detailChanged() {
51
+ if (!this.form)
52
+ return;
53
+ this.busy = true;
54
+ this.api.intakeTemplate(this.form.inspection.movementDetailCode).subscribe({ next: t => { if (this.form) {
55
+ this.form.inspection.templateSnapshot = t;
56
+ this.form.inspection.measurements = [];
57
+ this.form.compositeSample = null;
58
+ this.compositeEditor = false;
59
+ } this.busy = false; this.changed(); }, error: e => { this.error = errorMessage(e); this.busy = false; } });
60
+ }
61
+ measurement(p, composite = false) {
62
+ const values = composite ? this.compositeMeasurements : this.form.inspection.measurements;
63
+ let value = values.find(x => x.parameterCode === p.code);
64
+ if (!value) {
65
+ value = { parameterCode: p.code, number: null, text: '' };
66
+ values.push(value);
67
+ }
68
+ return value;
69
+ }
70
+ limitLabel(p) {
71
+ const i = this.form?.inspection;
72
+ if (!i)
73
+ return '—';
74
+ const l = applicableLimit(i.templateSnapshot?.limits || [], p.code, i.inspectedAt.slice(0, 10), i.oilType, i.origin);
75
+ if (!l)
76
+ return '—';
77
+ const range = l.expectedText || (l.minimum != null && l.maximum != null ? `${l.minimum} – ${l.maximum}` : l.minimum != null ? `≥ ${l.minimum}` : l.maximum != null ? `≤ ${l.maximum}` : '—');
78
+ return range + (l.nominal != null ? ` · Nominal: ${l.nominal}` : '');
79
+ }
80
+ inputStep(p) { return Math.pow(10, -p.decimalPlaces); }
81
+ changed(composite = false) {
82
+ const i = this.form?.inspection;
83
+ if (!i?.templateSnapshot)
84
+ return;
85
+ try {
86
+ recalculate(this.parameters, composite ? this.compositeMeasurements : i.measurements, i.templateSnapshot.limits, i.inspectedAt.slice(0, 10), i.oilType, i.origin);
87
+ this.error = '';
88
+ }
89
+ catch (e) {
90
+ this.error = e instanceof Error ? e.message : 'Hesaplama yapılamadı.';
91
+ }
92
+ }
93
+ payload() {
94
+ const i = this.form.inspection;
95
+ return { vehicleEntryId: i.vehicleEntryId, movementDetailCode: i.movementDetailCode, origin: i.origin || '', tankCode: i.tankCode || '', oilType: i.oilType || '',
96
+ batchNumber: i.batchNumber || '', notes: i.notes || '', analyst: i.analyst, inspectedAt: new Date(i.inspectedAt).toISOString(), revision: i.revision,
97
+ measurements: i.measurements, decision: this.decision || undefined };
98
+ }
99
+ save(approve) {
100
+ if (!this.form || !this.editable)
101
+ return;
102
+ if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) {
103
+ this.validationError = 'Kontrol tarihi ve saatini girin.';
104
+ this.error = this.validationError;
105
+ return;
106
+ }
107
+ if (approve && !this.decision) {
108
+ this.validationError = 'Kabul veya Ret seçin.';
109
+ this.error = this.validationError;
110
+ return;
111
+ }
112
+ if (approve && this.decision === 'Rejected' && !this.form.inspection.notes?.trim()) {
113
+ this.validationError = 'Ret gerekçesi girin.';
114
+ this.error = this.validationError;
115
+ return;
116
+ }
117
+ if (!approve)
118
+ this.decision = '';
119
+ this.busy = true;
120
+ this.error = '';
121
+ this.validationError = '';
122
+ this.api.saveIntake(this.payload()).subscribe({ next: i => { this.success = approve ? 'Kalite kararı kaydedildi.' : 'Taslak kaydedildi.'; this.form.inspection = i; i.inspectedAt = this.localTime(i.inspectedAt); this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });
123
+ }
124
+ beginComposite() { this.compositeEditor = true; this.compositeMeasurements = []; }
125
+ saveComposite() {
126
+ if (!this.form)
127
+ return;
128
+ if (!this.form.inspection.inspectedAt || Number.isNaN(Date.parse(this.form.inspection.inspectedAt))) {
129
+ this.error = 'Numune tarihi ve saatini girin.';
130
+ return;
131
+ }
132
+ this.busy = true;
133
+ this.api.saveComposite({ ...this.payload(), revision: 0, measurements: this.compositeMeasurements }).subscribe({ next: sample => { this.form.compositeSample = sample; this.compositeEditor = false; this.busy = false; }, error: e => { this.error = errorMessage(e); this.busy = false; } });
134
+ }
135
+ refreshComposite() {
136
+ if (!this.form)
137
+ return;
138
+ const i = this.form.inspection;
139
+ this.api.intake(i.vehicleEntryId, i.movementDetailCode, i.batchNumber).subscribe({ next: result => this.form.compositeSample = result.compositeSample, error: e => this.error = errorMessage(e) });
140
+ }
141
+ async print() {
142
+ if (!this.form || !this.printArea || this.busy || !this.allowed('Print'))
143
+ return;
144
+ try {
145
+ await printForm(this.printArea.nativeElement, `Girdi-Kontrol-${this.form.vehicle.docEntry}`);
146
+ }
147
+ catch (e) {
148
+ this.error = errorMessage(e);
149
+ }
150
+ }
151
+ back() { this.router.navigate(['/kalite/intake']); }
152
+ }
153
+ IntakeFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntakeFormComponent, deps: [{ token: i1.QualityApiService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.PermissionService }], target: i0.ɵɵFactoryTarget.Component });
154
+ IntakeFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: IntakeFormComponent, selector: "lib-intake-form", viewQueries: [{ propertyName: "printArea", first: true, predicate: ["printArea"], descendants: true }], ngImport: i0, template: "<div class=\"container-fluid\" #printArea>\n <div class=\"d-flex justify-content-between align-items-center mb-3\"><h3>Ham Ya\u011F Giri\u015F Kalite Kontrol</h3><button class=\"btn btn-outline-secondary\" (click)=\"back()\">Listeye D\u00F6n</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div>\n <div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\"><span class=\"spinner-border spinner-border-sm mr-2\"></span> \u0130\u015Flem s\u00FCr\u00FCyor\u2026</div>\n <ng-container *ngIf=\"form as f\">\n <div class=\"card mb-3\"><div class=\"card-body\"><h5>Ara\u00E7 / Sevkiyat Bilgileri</h5>\n <div class=\"vehicle-info\">\n <div><label>S\u0131ra / Belge No</label><p>{{ f.vehicle.sequenceNumber }} / {{ f.vehicle.docNum }}</p></div><div><label>Giri\u015F Tarihi / Saati</label><p>{{ f.vehicle.entryDate | date:'dd.MM.yyyy HH:mm' }}</p></div>\n <div><label>Kap\u0131 / Hareket T\u00FCr\u00FC</label><p>{{ f.vehicle.gateCode }} / {{ f.vehicle.movementTypeName }}</p></div><div><label>Kamyon / Dorse</label><p>{{ f.vehicle.plate }} / {{ f.vehicle.trailerPlate || '\u2014' }}</p></div>\n <div><label>\u015Eof\u00F6r / Telefon</label><p>{{ f.vehicle.driver }} / {{ f.vehicle.driverPhone || '\u2014' }}</p></div><div><label>T.C. Kimlik / M\u00FCh\u00FCr</label><p>{{ f.vehicle.identityNumber || '\u2014' }} / {{ f.vehicle.sealNumber || '\u2014' }}</p></div>\n <div><label>Muhatap / Gemi</label><p>{{ f.vehicle.partnerName || '\u2014' }} / {{ f.vehicle.shipName || '\u2014' }}</p></div><div><label>Stok Nakli / Mal Giri\u015Fi / Sipari\u015F</label><p>{{ f.vehicle.stockTransferNumber || '\u2014' }} / {{ f.vehicle.receiptNumber || '\u2014' }} / {{ f.vehicle.orderNumber || '\u2014' }}</p></div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\"><label>Ara\u00E7 Hareket T\u00FCr\u00FC Detay\u0131</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.movementDetailCode\" (change)=\"detailChanged()\" [disabled]=\"!editable || busy || (f.details.length === 1 && !f.details[0].detailCode)\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let d of f.details\" [value]=\"d.code\">{{ d.name || f.vehicle.movementTypeName }}{{ !d.detailCode ? ' (detays\u0131z)' : '' }}</option></select></div>\n <div class=\"col-md-4\"><label>Men\u015Fei</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.origin\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option value=\"Domestic\">\u0130\u00E7 Piyasa</option><option value=\"Imported\">\u0130thal</option></select></div>\n <div class=\"col-md-4\"><label>Kalite Durumu</label><p class=\"mt-2\">\n <span class=\"quality-status\" role=\"status\"\n [class.quality-status-accepted]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.quality-status-rejected]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.quality-status-draft]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.quality-status-waiting]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\">\n <i class=\"fa\" aria-hidden=\"true\"\n [class.fa-check-circle]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.fa-times-circle]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.fa-edit]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.fa-clock]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\"></i>\n {{ statusLabel(f.inspection.revision ? f.inspection.status : 'Waiting') }}\n </span>\n </p></div>\n </div>\n </div></div>\n <div class=\"card mb-3\"><div class=\"card-body\">\n <h5>{{ f.inspection.templateSnapshot?.form?.name || '\u00D6l\u00E7\u00FCm / Parametreler' }} <small>{{ f.inspection.templateSnapshot?.form?.documentCode }}</small></h5>\n <p class=\"print-only text-muted\">Yay\u0131n: {{ f.inspection.templateSnapshot?.form?.publicationDate | date:'dd.MM.yyyy' }} \u00B7 Revizyon: {{ f.inspection.templateSnapshot?.form?.revisionDate | date:'dd.MM.yyyy' }} / {{ f.inspection.templateSnapshot?.form?.revisionNumber }}</p>\n <p *ngIf=\"!parameters.length\" class=\"text-muted\">Detay se\u00E7in. Bu kaleme ait form ve sorular Kalite Parametreleri ekran\u0131ndan tan\u0131mlanmal\u0131d\u0131r.</p>\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm measurement-table\" *ngIf=\"parameters.length\">\n <thead><tr><th>Soru / Parametre</th><th>Birim</th><th>Nominal / Limit</th><th>\u00D6l\u00E7\u00FCm De\u011Feri / Yan\u0131t</th><th>Uygunluk</th></tr></thead>\n <tbody><tr *ngFor=\"let p of parameters\" [class.out-of-limit]=\"measurement(p).outOfLimit\">\n <td>{{ p.name }}<span *ngIf=\"p.required\" class=\"text-danger\"> *</span></td><td>{{ p.unit || '\u2014' }}</td><td>{{ limitLabel(p) }}</td>\n <td><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).number\" (ngModelChange)=\"changed()\" [attr.step]=\"inputStep(p)\" [disabled]=\"!editable || p.calculated || busy\" [attr.aria-label]=\"p.name\" />\n <select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select>\n <input *ngIf=\"p.valueType === 'Text'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (ngModelChange)=\"changed()\" [disabled]=\"!editable || busy\" [attr.aria-label]=\"p.name\" />\n </td><td><span *ngIf=\"measurement(p).outOfLimit\" class=\"badge badge-danger\">Limit D\u0131\u015F\u0131</span><span *ngIf=\"!measurement(p).outOfLimit && (measurement(p).number != null || measurement(p).text)\" class=\"badge badge-success\">{{ p.calculated ? 'Otomatik' : 'Uygun' }}</span></td>\n </tr></tbody>\n </table></div>\n <div *ngIf=\"palm\" class=\"border rounded p-3 mt-3\">\n <h6>Gemi / Parti Kompozit Numunesi</h6><label>Parti Kodu</label><div class=\"d-flex\"><input class=\"form-control\" [(ngModel)]=\"f.inspection.batchNumber\" [disabled]=\"!editable || busy\" /><button class=\"btn btn-outline-secondary ml-2\" (click)=\"refreshComposite()\">Numuneyi Getir</button></div>\n <p class=\"text-muted mt-2\">Kaynak mal giri\u015Fi veya parti koduyla ili\u015Fkilendirilen numune di\u011Fer ara\u00E7larda salt okunur g\u00F6sterilir.</p>\n <ng-container *ngIf=\"f.compositeSample as sample\"><p>{{ sample.analyst }} \u00B7 {{ sample.sampledAt | date:'dd.MM.yyyy HH:mm' }}</p><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let value of sample.measurements\"><strong>{{ value.parameterName }}</strong>: {{ value.number != null ? value.number : value.text }} {{ value.unit }}</div></div></ng-container>\n <button *ngIf=\"!f.compositeSample && editable && allowed('Composite') && !compositeEditor\" class=\"btn btn-outline-primary\" (click)=\"beginComposite()\">Kompozit Numune Gir</button>\n <div *ngIf=\"compositeEditor\" class=\"print-exclude\"><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let p of parameters\"><label>{{ p.name }}</label><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).number\" (ngModelChange)=\"changed(true)\" [disabled]=\"p.calculated || busy\" /><select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" (change)=\"changed(true)\"><option value=\"\"></option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select><input *ngIf=\"p.valueType === 'Text'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" /></div></div><button class=\"btn btn-primary\" (click)=\"saveComposite()\" [disabled]=\"busy\">Numuneyi Kaydet</button><button class=\"btn btn-secondary ml-2\" (click)=\"compositeEditor = false\">Vazge\u00E7</button></div>\n </div>\n </div></div>\n <div class=\"card\"><div class=\"card-body\"><h5>De\u011Ferlendirme</h5><div class=\"row\">\n <div class=\"col-md-3\"><label>Genel De\u011Ferlendirme</label><select class=\"form-control\" [(ngModel)]=\"decision\" [attr.data-print-value]=\"statusLabel(decision || (f.inspection.revision ? f.inspection.status : 'Waiting'))\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngIf=\"allowed('Accept')\" value=\"Accepted\">Kabul</option><option *ngIf=\"allowed('Reject')\" value=\"Rejected\">Ret</option></select></div>\n <div class=\"col-md-3\"><label>Analizi Yapan *</label><input class=\"form-control\" [(ngModel)]=\"f.inspection.analyst\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Kontrol Tarihi / Saati *</label><input type=\"datetime-local\" class=\"form-control\" [(ngModel)]=\"f.inspection.inspectedAt\" (change)=\"changed()\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Miktar (kg)</label><input class=\"form-control\" [value]=\"f.inspection.quantityKg == null ? 'Tart\u0131m sonras\u0131 gelir' : f.inspection.quantityKg\" disabled /></div>\n <div class=\"col-md-4 mt-3\"><label>Tank No</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.tankCode\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{ tank.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Ya\u011F Cinsi</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.oilType\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option>Ay\u00E7i\u00E7ek</option><option>Rafine Ay\u00E7i\u00E7ek</option><option>Palm Oil</option><option>Palm Olein</option></select></div>\n <div class=\"col-md-12 mt-3\"><label>A\u00E7\u0131klama / Di\u011Fer <span *ngIf=\"decision === 'Rejected'\">*</span></label><textarea rows=\"3\" class=\"form-control\" [(ngModel)]=\"f.inspection.notes\" [disabled]=\"!editable || busy\"></textarea></div>\n </div><div *ngIf=\"validationError\" class=\"alert alert-danger mt-3 mb-2\" role=\"alert\">{{ validationError }}</div><div class=\"mt-3\"><button *ngIf=\"editable\" class=\"btn btn-outline-primary mr-2\" (click)=\"save(false)\" [disabled]=\"busy || !parameters.length\">Kaydet</button><button *ngIf=\"editable && (allowed('Accept') || allowed('Reject'))\" class=\"btn btn-primary mr-2\" (click)=\"save(true)\" [disabled]=\"busy || !parameters.length\">Kaydet ve Onayla</button><button *ngIf=\"allowed('Print')\" class=\"btn btn-outline-secondary mr-2\" (click)=\"print()\" [disabled]=\"busy || !f.inspection.revision\">Formu Yazd\u0131r</button><button class=\"btn btn-secondary\" (click)=\"back()\">Vazge\u00E7</button></div>\n <p *ngIf=\"!f.canEdit\" class=\"text-muted mt-3\">Ara\u00E7 tart\u0131ma girdi\u011Fi, \u00E7\u0131kt\u0131\u011F\u0131 veya iptal edildi\u011Fi i\u00E7in kay\u0131t salt okunur.</p>\n </div></div>\n </ng-container>\n</div>\n", styles: [".quality-loading{padding:1.5rem;text-align:center;color:#5b526c}.print-only{display:none}.quality-status{display:inline-flex;align-items:center;gap:.5rem;padding:.55rem .85rem;border:1px solid transparent;border-radius:.4rem;font-size:.9375rem;font-weight:600;line-height:1.4}.quality-status-accepted{color:#166534;background:#dcfce7;border-color:#86efac}.quality-status-rejected{color:#991b1b;background:#fee2e2;border-color:#fca5a5}.quality-status-draft{color:#1e40af;background:#dbeafe;border-color:#93c5fd}.quality-status-waiting{color:#854d0e;background:#fef3c7;border-color:#fcd34d}.vehicle-table{min-width:1950px;white-space:nowrap}.actions{min-width:130px}.quality-questions-link{display:inline-flex;align-items:center;min-height:calc(1.5em + .5rem + 2px);margin-left:.4rem;padding:.25rem .5rem;color:#9a5a00;background:#fff3d6;border:1px solid #edb85b;border-radius:.2rem;font-size:.875rem;line-height:1.5;text-decoration:none}.quality-questions-link:hover,.quality-questions-link:focus{color:#fff;background:#b86b00;border-color:#b86b00;text-decoration:none}.intake-actions-cell{display:flex;align-items:center}:host ::ng-deep .intake-grid .dx-data-row>td{vertical-align:middle}.intake-actions-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .65rem;font-family:inherit;font-size:.8125rem;line-height:1.3}.intake-action-menu{min-width:210px;margin-top:.35rem;padding:.3rem;background:#fff;border:1px solid #dee2e6;border-radius:.375rem;box-shadow:0 .25rem .75rem #0000001a}.intake-action-menu .dropdown-item{display:block;text-align:left;border:0;border-radius:.25rem;background:none;color:#343a40;padding:.5rem .65rem;font-family:inherit;font-size:.8125rem;font-weight:400;line-height:1.4;text-decoration:none;white-space:nowrap;cursor:pointer}.intake-action-menu .dropdown-item:hover,.intake-action-menu .dropdown-item:focus-visible{background:#eef2ff;color:#2446b5}.page-size{width:85px}.vehicle-info{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin:1rem 0}.vehicle-info label{font-size:.8rem;color:#6c757d;margin-bottom:.2rem}.vehicle-info p{background:#f5f3f8;padding:.55rem;min-height:2.5rem;overflow-wrap:anywhere}.measurement-table{min-width:700px}.measurement-table th{background:#f2edf7}.measurement-table td{vertical-align:middle}.out-of-limit,.rejected-row{background:#ffe6e9!important}.out-of-limit input,.out-of-limit select{border-color:#dc3545}@media (max-width: 900px){.vehicle-info{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 550px){.vehicle-info{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntakeFormComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'lib-intake-form', template: "<div class=\"container-fluid\" #printArea>\n <div class=\"d-flex justify-content-between align-items-center mb-3\"><h3>Ham Ya\u011F Giri\u015F Kalite Kontrol</h3><button class=\"btn btn-outline-secondary\" (click)=\"back()\">Listeye D\u00F6n</button></div>\n <div *ngIf=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div><div *ngIf=\"success\" class=\"alert alert-success\">{{ success }}</div>\n <div *ngIf=\"busy\" class=\"quality-loading\" role=\"status\"><span class=\"spinner-border spinner-border-sm mr-2\"></span> \u0130\u015Flem s\u00FCr\u00FCyor\u2026</div>\n <ng-container *ngIf=\"form as f\">\n <div class=\"card mb-3\"><div class=\"card-body\"><h5>Ara\u00E7 / Sevkiyat Bilgileri</h5>\n <div class=\"vehicle-info\">\n <div><label>S\u0131ra / Belge No</label><p>{{ f.vehicle.sequenceNumber }} / {{ f.vehicle.docNum }}</p></div><div><label>Giri\u015F Tarihi / Saati</label><p>{{ f.vehicle.entryDate | date:'dd.MM.yyyy HH:mm' }}</p></div>\n <div><label>Kap\u0131 / Hareket T\u00FCr\u00FC</label><p>{{ f.vehicle.gateCode }} / {{ f.vehicle.movementTypeName }}</p></div><div><label>Kamyon / Dorse</label><p>{{ f.vehicle.plate }} / {{ f.vehicle.trailerPlate || '\u2014' }}</p></div>\n <div><label>\u015Eof\u00F6r / Telefon</label><p>{{ f.vehicle.driver }} / {{ f.vehicle.driverPhone || '\u2014' }}</p></div><div><label>T.C. Kimlik / M\u00FCh\u00FCr</label><p>{{ f.vehicle.identityNumber || '\u2014' }} / {{ f.vehicle.sealNumber || '\u2014' }}</p></div>\n <div><label>Muhatap / Gemi</label><p>{{ f.vehicle.partnerName || '\u2014' }} / {{ f.vehicle.shipName || '\u2014' }}</p></div><div><label>Stok Nakli / Mal Giri\u015Fi / Sipari\u015F</label><p>{{ f.vehicle.stockTransferNumber || '\u2014' }} / {{ f.vehicle.receiptNumber || '\u2014' }} / {{ f.vehicle.orderNumber || '\u2014' }}</p></div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-4\"><label>Ara\u00E7 Hareket T\u00FCr\u00FC Detay\u0131</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.movementDetailCode\" (change)=\"detailChanged()\" [disabled]=\"!editable || busy || (f.details.length === 1 && !f.details[0].detailCode)\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let d of f.details\" [value]=\"d.code\">{{ d.name || f.vehicle.movementTypeName }}{{ !d.detailCode ? ' (detays\u0131z)' : '' }}</option></select></div>\n <div class=\"col-md-4\"><label>Men\u015Fei</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.origin\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option value=\"Domestic\">\u0130\u00E7 Piyasa</option><option value=\"Imported\">\u0130thal</option></select></div>\n <div class=\"col-md-4\"><label>Kalite Durumu</label><p class=\"mt-2\">\n <span class=\"quality-status\" role=\"status\"\n [class.quality-status-accepted]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.quality-status-rejected]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.quality-status-draft]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.quality-status-waiting]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\">\n <i class=\"fa\" aria-hidden=\"true\"\n [class.fa-check-circle]=\"f.inspection.revision && f.inspection.status === 'Accepted'\"\n [class.fa-times-circle]=\"f.inspection.revision && f.inspection.status === 'Rejected'\"\n [class.fa-edit]=\"f.inspection.revision && f.inspection.status === 'Draft'\"\n [class.fa-clock]=\"!f.inspection.revision || f.inspection.status === 'Waiting'\"></i>\n {{ statusLabel(f.inspection.revision ? f.inspection.status : 'Waiting') }}\n </span>\n </p></div>\n </div>\n </div></div>\n <div class=\"card mb-3\"><div class=\"card-body\">\n <h5>{{ f.inspection.templateSnapshot?.form?.name || '\u00D6l\u00E7\u00FCm / Parametreler' }} <small>{{ f.inspection.templateSnapshot?.form?.documentCode }}</small></h5>\n <p class=\"print-only text-muted\">Yay\u0131n: {{ f.inspection.templateSnapshot?.form?.publicationDate | date:'dd.MM.yyyy' }} \u00B7 Revizyon: {{ f.inspection.templateSnapshot?.form?.revisionDate | date:'dd.MM.yyyy' }} / {{ f.inspection.templateSnapshot?.form?.revisionNumber }}</p>\n <p *ngIf=\"!parameters.length\" class=\"text-muted\">Detay se\u00E7in. Bu kaleme ait form ve sorular Kalite Parametreleri ekran\u0131ndan tan\u0131mlanmal\u0131d\u0131r.</p>\n <div class=\"table-responsive\"><table class=\"table table-bordered table-sm measurement-table\" *ngIf=\"parameters.length\">\n <thead><tr><th>Soru / Parametre</th><th>Birim</th><th>Nominal / Limit</th><th>\u00D6l\u00E7\u00FCm De\u011Feri / Yan\u0131t</th><th>Uygunluk</th></tr></thead>\n <tbody><tr *ngFor=\"let p of parameters\" [class.out-of-limit]=\"measurement(p).outOfLimit\">\n <td>{{ p.name }}<span *ngIf=\"p.required\" class=\"text-danger\"> *</span></td><td>{{ p.unit || '\u2014' }}</td><td>{{ limitLabel(p) }}</td>\n <td><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).number\" (ngModelChange)=\"changed()\" [attr.step]=\"inputStep(p)\" [disabled]=\"!editable || p.calculated || busy\" [attr.aria-label]=\"p.name\" />\n <select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select>\n <input *ngIf=\"p.valueType === 'Text'\" class=\"form-control form-control-sm\" [(ngModel)]=\"measurement(p).text\" (ngModelChange)=\"changed()\" [disabled]=\"!editable || busy\" [attr.aria-label]=\"p.name\" />\n </td><td><span *ngIf=\"measurement(p).outOfLimit\" class=\"badge badge-danger\">Limit D\u0131\u015F\u0131</span><span *ngIf=\"!measurement(p).outOfLimit && (measurement(p).number != null || measurement(p).text)\" class=\"badge badge-success\">{{ p.calculated ? 'Otomatik' : 'Uygun' }}</span></td>\n </tr></tbody>\n </table></div>\n <div *ngIf=\"palm\" class=\"border rounded p-3 mt-3\">\n <h6>Gemi / Parti Kompozit Numunesi</h6><label>Parti Kodu</label><div class=\"d-flex\"><input class=\"form-control\" [(ngModel)]=\"f.inspection.batchNumber\" [disabled]=\"!editable || busy\" /><button class=\"btn btn-outline-secondary ml-2\" (click)=\"refreshComposite()\">Numuneyi Getir</button></div>\n <p class=\"text-muted mt-2\">Kaynak mal giri\u015Fi veya parti koduyla ili\u015Fkilendirilen numune di\u011Fer ara\u00E7larda salt okunur g\u00F6sterilir.</p>\n <ng-container *ngIf=\"f.compositeSample as sample\"><p>{{ sample.analyst }} \u00B7 {{ sample.sampledAt | date:'dd.MM.yyyy HH:mm' }}</p><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let value of sample.measurements\"><strong>{{ value.parameterName }}</strong>: {{ value.number != null ? value.number : value.text }} {{ value.unit }}</div></div></ng-container>\n <button *ngIf=\"!f.compositeSample && editable && allowed('Composite') && !compositeEditor\" class=\"btn btn-outline-primary\" (click)=\"beginComposite()\">Kompozit Numune Gir</button>\n <div *ngIf=\"compositeEditor\" class=\"print-exclude\"><div class=\"row\"><div class=\"col-md-3 mb-2\" *ngFor=\"let p of parameters\"><label>{{ p.name }}</label><input *ngIf=\"p.valueType === 'Number'\" type=\"number\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).number\" (ngModelChange)=\"changed(true)\" [disabled]=\"p.calculated || busy\" /><select *ngIf=\"p.valueType === 'Choice'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" (change)=\"changed(true)\"><option value=\"\"></option><option *ngFor=\"let option of p.options\" [value]=\"option\">{{ option }}</option></select><input *ngIf=\"p.valueType === 'Text'\" class=\"form-control\" [(ngModel)]=\"measurement(p, true).text\" /></div></div><button class=\"btn btn-primary\" (click)=\"saveComposite()\" [disabled]=\"busy\">Numuneyi Kaydet</button><button class=\"btn btn-secondary ml-2\" (click)=\"compositeEditor = false\">Vazge\u00E7</button></div>\n </div>\n </div></div>\n <div class=\"card\"><div class=\"card-body\"><h5>De\u011Ferlendirme</h5><div class=\"row\">\n <div class=\"col-md-3\"><label>Genel De\u011Ferlendirme</label><select class=\"form-control\" [(ngModel)]=\"decision\" [attr.data-print-value]=\"statusLabel(decision || (f.inspection.revision ? f.inspection.status : 'Waiting'))\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngIf=\"allowed('Accept')\" value=\"Accepted\">Kabul</option><option *ngIf=\"allowed('Reject')\" value=\"Rejected\">Ret</option></select></div>\n <div class=\"col-md-3\"><label>Analizi Yapan *</label><input class=\"form-control\" [(ngModel)]=\"f.inspection.analyst\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Kontrol Tarihi / Saati *</label><input type=\"datetime-local\" class=\"form-control\" [(ngModel)]=\"f.inspection.inspectedAt\" (change)=\"changed()\" [disabled]=\"!editable || busy\" /></div>\n <div class=\"col-md-3\"><label>Miktar (kg)</label><input class=\"form-control\" [value]=\"f.inspection.quantityKg == null ? 'Tart\u0131m sonras\u0131 gelir' : f.inspection.quantityKg\" disabled /></div>\n <div class=\"col-md-4 mt-3\"><label>Tank No</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.tankCode\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option *ngFor=\"let tank of tanks\" [value]=\"tank.code\">{{ tank.name }}</option></select></div>\n <div class=\"col-md-4 mt-3\"><label>Ya\u011F Cinsi</label><select class=\"form-control\" [(ngModel)]=\"f.inspection.oilType\" (change)=\"changed()\" [disabled]=\"!editable || busy\"><option value=\"\">Se\u00E7in</option><option>Ay\u00E7i\u00E7ek</option><option>Rafine Ay\u00E7i\u00E7ek</option><option>Palm Oil</option><option>Palm Olein</option></select></div>\n <div class=\"col-md-12 mt-3\"><label>A\u00E7\u0131klama / Di\u011Fer <span *ngIf=\"decision === 'Rejected'\">*</span></label><textarea rows=\"3\" class=\"form-control\" [(ngModel)]=\"f.inspection.notes\" [disabled]=\"!editable || busy\"></textarea></div>\n </div><div *ngIf=\"validationError\" class=\"alert alert-danger mt-3 mb-2\" role=\"alert\">{{ validationError }}</div><div class=\"mt-3\"><button *ngIf=\"editable\" class=\"btn btn-outline-primary mr-2\" (click)=\"save(false)\" [disabled]=\"busy || !parameters.length\">Kaydet</button><button *ngIf=\"editable && (allowed('Accept') || allowed('Reject'))\" class=\"btn btn-primary mr-2\" (click)=\"save(true)\" [disabled]=\"busy || !parameters.length\">Kaydet ve Onayla</button><button *ngIf=\"allowed('Print')\" class=\"btn btn-outline-secondary mr-2\" (click)=\"print()\" [disabled]=\"busy || !f.inspection.revision\">Formu Yazd\u0131r</button><button class=\"btn btn-secondary\" (click)=\"back()\">Vazge\u00E7</button></div>\n <p *ngIf=\"!f.canEdit\" class=\"text-muted mt-3\">Ara\u00E7 tart\u0131ma girdi\u011Fi, \u00E7\u0131kt\u0131\u011F\u0131 veya iptal edildi\u011Fi i\u00E7in kay\u0131t salt okunur.</p>\n </div></div>\n </ng-container>\n</div>\n", styles: [".quality-loading{padding:1.5rem;text-align:center;color:#5b526c}.print-only{display:none}.quality-status{display:inline-flex;align-items:center;gap:.5rem;padding:.55rem .85rem;border:1px solid transparent;border-radius:.4rem;font-size:.9375rem;font-weight:600;line-height:1.4}.quality-status-accepted{color:#166534;background:#dcfce7;border-color:#86efac}.quality-status-rejected{color:#991b1b;background:#fee2e2;border-color:#fca5a5}.quality-status-draft{color:#1e40af;background:#dbeafe;border-color:#93c5fd}.quality-status-waiting{color:#854d0e;background:#fef3c7;border-color:#fcd34d}.vehicle-table{min-width:1950px;white-space:nowrap}.actions{min-width:130px}.quality-questions-link{display:inline-flex;align-items:center;min-height:calc(1.5em + .5rem + 2px);margin-left:.4rem;padding:.25rem .5rem;color:#9a5a00;background:#fff3d6;border:1px solid #edb85b;border-radius:.2rem;font-size:.875rem;line-height:1.5;text-decoration:none}.quality-questions-link:hover,.quality-questions-link:focus{color:#fff;background:#b86b00;border-color:#b86b00;text-decoration:none}.intake-actions-cell{display:flex;align-items:center}:host ::ng-deep .intake-grid .dx-data-row>td{vertical-align:middle}.intake-actions-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .65rem;font-family:inherit;font-size:.8125rem;line-height:1.3}.intake-action-menu{min-width:210px;margin-top:.35rem;padding:.3rem;background:#fff;border:1px solid #dee2e6;border-radius:.375rem;box-shadow:0 .25rem .75rem #0000001a}.intake-action-menu .dropdown-item{display:block;text-align:left;border:0;border-radius:.25rem;background:none;color:#343a40;padding:.5rem .65rem;font-family:inherit;font-size:.8125rem;font-weight:400;line-height:1.4;text-decoration:none;white-space:nowrap;cursor:pointer}.intake-action-menu .dropdown-item:hover,.intake-action-menu .dropdown-item:focus-visible{background:#eef2ff;color:#2446b5}.page-size{width:85px}.vehicle-info{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin:1rem 0}.vehicle-info label{font-size:.8rem;color:#6c757d;margin-bottom:.2rem}.vehicle-info p{background:#f5f3f8;padding:.55rem;min-height:2.5rem;overflow-wrap:anywhere}.measurement-table{min-width:700px}.measurement-table th{background:#f2edf7}.measurement-table td{vertical-align:middle}.out-of-limit,.rejected-row{background:#ffe6e9!important}.out-of-limit input,.out-of-limit select{border-color:#dc3545}@media (max-width: 900px){.vehicle-info{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 550px){.vehicle-info{grid-template-columns:1fr}}\n"] }]
158
+ }], ctorParameters: function () { return [{ type: i1.QualityApiService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.PermissionService }]; }, propDecorators: { printArea: [{
159
+ type: ViewChild,
160
+ args: ['printArea']
161
+ }] } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50YWtlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2FsaXRlL3NyYy9saWIvY29tcG9uZW50cy9pbnRha2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWxpdGUvc3JjL2xpYi9jb21wb25lbnRzL2ludGFrZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdwRixPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQUduRCxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQW9CLEdBQXNCLEVBQVUsS0FBcUIsRUFBVSxNQUFjLEVBQVUsV0FBOEI7UUFBckgsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFIekksU0FBSSxHQUFzQixJQUFJLENBQUM7UUFBQyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUFDLFNBQUksR0FBRyxLQUFLLENBQUM7UUFBQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQUMsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUFDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQUMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUFDLGFBQVEsR0FBRyxLQUFLLENB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QUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RNLENBQUM7SUFDRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPO1FBQ2pGLElBQUk7WUFBRSxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUFFO1FBQ3JHLE9BQU8sQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FBRTtJQUM3QyxDQUFDO0lBQ0QsSUFBSSxLQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0hBN0UvQyxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrSkNaaEMsbXZXQWtFQTsyRkR0RGEsbUJBQW1CO2tCQUQvQixTQUFTOytCQUFhLGlCQUFpQjswTEFFZCxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEludGFrZUZvcm0sIFF1YWxpdHlUYW5rIH0gZnJvbSAnLi4vbW9kZWxzL2ludGFrZS5tb2RlbHMnO1xuaW1wb3J0IHsgUXVhbGl0eU1lYXN1cmVtZW50LCBRdWFsaXR5UGFyYW1ldGVyIH0gZnJvbSAnLi4vbW9kZWxzL3F1YWxpdHkubW9kZWxzJztcbmltcG9ydCB7IFF1YWxpdHlBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcXVhbGl0eS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBsaWNhYmxlTGltaXQsIGVycm9yTWVzc2FnZSwgbG9jYWxEYXRlLCByZWNhbGN1bGF0ZSwgc3RhdHVzTGFiZWwgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWFsaXR5LW1lYXN1cmVtZW50cyc7XG5pbXBvcnQgeyBwcmludEZvcm0gfSBmcm9tICcuLi9zZXJ2aWNlcy9wcmludC1mb3JtJztcblxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiAnbGliLWludGFrZS1mb3JtJywgdGVtcGxhdGVVcmw6ICcuL2ludGFrZS1mb3JtLmNvbXBvbmVudC5odG1sJywgc3R5bGVVcmxzOiBbJy4vaW50YWtlLmNvbXBvbmVudC5zY3NzJ10gfSlcbmV4cG9ydCBjbGFzcyBJbnRha2VGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdwcmludEFyZWEnKSBwcmludEFyZWE/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgZm9ybTogSW50YWtlRm9ybSB8IG51bGwgPSBudWxsOyB0YW5rczogUXVhbGl0eVRhbmtbXSA9IFtdOyBidXN5ID0gZmFsc2U7IGVycm9yID0gJyc7IHN1Y2Nlc3MgPSAnJzsgdmFsaWRhdGlvbkVycm9yID0gJyc7IGRlY2lzaW9uID0gJyc7IHZpZXdPbmx5ID0gZmFsc2U7XG4gIGNvbXBvc2l0ZUVkaXRvciA9IGZhbHNlOyBjb21wb3NpdGVNZWFzdXJlbWVudHM6IFF1YWxpdHlNZWFzdXJlbWVudFtdID0gW107IHN0YXR1c0xhYmVsID0gc3RhdHVzTGFiZWw7XG4gIHByaXZhdGUgZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpOiBRdWFsaXR5QXBpU2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25TZXJ2aWNlKSB7fVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSkpLnN1YnNjcmliZShwYXJhbXMgPT4geyB0aGlzLnZpZXdPbmx5ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnbW9kZScpID09PSAndmlldyc7IHRoaXMubG9hZChOdW1iZXIocGFyYW1zLmdldCgnaWQnKSkpOyB9KTtcbiAgICB0aGlzLmFwaS50YW5rcygpLnN1YnNjcmliZSh7IG5leHQ6IHRhbmtzID0+IHRoaXMudGFua3MgPSB0YW5rcy5maWx0ZXIoeCA9PiB4LmFjdGl2ZSksIGVycm9yOiBlID0+IHRoaXMuZXJyb3IgPSBlcnJvck1lc3NhZ2UoZSkgfSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7IHRoaXMuZGVzdHJveS5uZXh0KCk7IHRoaXMuZGVzdHJveS5jb21wbGV0ZSgpOyB9XG4gIGFsbG93ZWQoYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuZ2V0R3JhbnRlZFBvbGljeSgnS2FsaXRlLkludGFrZS4nICsgYWN0aW9uKTsgfVxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuZm9ybT8uY2FuRWRpdCAmJiAhdGhpcy52aWV3T25seSAmJiB0aGlzLmFsbG93ZWQoJ0VkaXQnKTsgfVxuICBnZXQgcGFyYW1ldGVycygpOiBRdWFsaXR5UGFyYW1ldGVyW10geyByZXR1cm4gdGhpcy5mb3JtPy5pbnNwZWN0aW9uLnRlbXBsYXRlU25hcHNob3Q/LnBhcmFtZXRlcnMuZmlsdGVyKHggPT4geC5hY3RpdmUpLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKSB8fCBbXTsgfVxuICBnZXQgcGFsbSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZm9ybT8uZGV0YWlscy5maW5kKHggPT4geC5jb2RlID09PSB0aGlzLmZvcm0/Lmluc3BlY3Rpb24ubW92ZW1lbnREZXRhaWxDb2RlKT8ucHJvZmlsZSA9PT0gJ1BBTE0nOyB9XG4gIHByaXZhdGUgbG9jYWxUaW1lKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgeyBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpOyByZXR1cm4gbG9jYWxEYXRlKGQpICsgJ1QnICsgU3RyaW5nKGQuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKSArICc6JyArIFN0cmluZyhkLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKTsgfVxuICBsb2FkKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaWQpIHx8IGlkIDw9IDApIHsgdGhpcy5lcnJvciA9ICdHZcOnZXJsaSBiaXIgYXJhw6cga2F5ZMSxIHNlw6dpbi4nOyByZXR1cm47IH1cbiAgICB0aGlzLmJ1c3kgPSB0cnVlOyB0aGlzLmVycm9yID0gJyc7XG4gICAgdGhpcy5hcGkuaW50YWtlKGlkKS5zdWJzY3JpYmUoeyBuZXh0OiBmb3JtID0+IHsgdGhpcy5mb3JtID0gZm9ybTsgZm9ybS5pbnNwZWN0aW9uLmluc3BlY3RlZEF0ID0gdGhpcy5sb2NhbFRpbWUoZm9ybS5pbnNwZWN0aW9uLmluc3BlY3RlZEF0KTsgdGhpcy5kZWNpc2lvbiA9ICcnOyB0aGlzLmJ1c3kgPSBmYWxzZTsgfSwgZXJyb3I6IGUgPT4geyB0aGlzLmVycm9yID0gZXJyb3JNZXNzYWdlKGUpOyB0aGlzLmJ1c3kgPSBmYWxzZTsgfSB9KTtcbiAgfVxuICBkZXRhaWxDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtKSByZXR1cm47XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICB0aGlzLmFwaS5pbnRha2VUZW1wbGF0ZSh0aGlzLmZvcm0uaW5zcGVjdGlvbi5tb3ZlbWVudERldGFpbENvZGUpLnN1YnNjcmliZSh7IG5leHQ6IHQgPT4geyBpZiAodGhpcy5mb3JtKSB7IHRoaXMuZm9ybS5pbnNwZWN0aW9uLnRlbXBsYXRlU25hcHNob3QgPSB0OyB0aGlzLmZvcm0uaW5zcGVjdGlvbi5tZWFzdXJlbWVudHMgPSBbXTsgdGhpcy5mb3JtLmNvbXBvc2l0ZVNhbXBsZSA9IG51bGw7IHRoaXMuY29tcG9zaXRlRWRpdG9yID0gZmFsc2U7IH0gdGhpcy5idXN5ID0gZmFsc2U7IHRoaXMuY2hhbmdlZCgpOyB9LCBlcnJvcjogZSA9PiB7IHRoaXMuZXJyb3IgPSBlcnJvck1lc3NhZ2UoZSk7IHRoaXMuYnVzeSA9IGZhbHNlOyB9IH0pO1xuICB9XG4gIG1lYXN1cmVtZW50KHA6IFF1YWxpdHlQYXJhbWV0ZXIsIGNvbXBvc2l0ZSA9IGZhbHNlKTogUXVhbGl0eU1lYXN1cmVtZW50IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb21wb3NpdGUgPyB0aGlzLmNvbXBvc2l0ZU1lYXN1cmVtZW50cyA6IHRoaXMuZm9ybSEuaW5zcGVjdGlvbi5tZWFzdXJlbWVudHM7XG4gICAgbGV0IHZhbHVlID0gdmFsdWVzLmZpbmQoeCA9PiB4LnBhcmFtZXRlckNvZGUgPT09IHAuY29kZSk7XG4gICAgaWYgKCF2YWx1ZSkgeyB2YWx1ZSA9IHsgcGFyYW1ldGVyQ29kZTogcC5jb2RlLCBudW1iZXI6IG51bGwsIHRleHQ6ICcnIH07IHZhbHVlcy5wdXNoKHZhbHVlKTsgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBsaW1pdExhYmVsKHA6IFF1YWxpdHlQYXJhbWV0ZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGkgPSB0aGlzLmZvcm0/Lmluc3BlY3Rpb247IGlmICghaSkgcmV0dXJuICfigJQnO1xuICAgIGNvbnN0IGwgPSBhcHBsaWNhYmxlTGltaXQoaS50ZW1wbGF0ZVNuYXBzaG90Py5saW1pdHMgfHwgW10sIHAuY29kZSwgaS5pbnNwZWN0ZWRBdC5zbGljZSgwLCAxMCksIGkub2lsVHlwZSwgaS5vcmlnaW4pO1xuICAgIGlmICghbCkgcmV0dXJuICfigJQnO1xuICAgIGNvbnN0IHJhbmdlID0gbC5leHBlY3RlZFRleHQgfHwgKGwubWluaW11bSAhPSBudWxsICYmIGwubWF4aW11bSAhPSBudWxsID8gYCR7bC5taW5pbXVtfSDigJMgJHtsLm1heGltdW19YCA6IGwubWluaW11bSAhPSBudWxsID8gYOKJpSAke2wubWluaW11bX1gIDogbC5tYXhpbXVtICE9IG51bGwgPyBg4omkICR7bC5tYXhpbXVtfWAgOiAn4oCUJyk7XG4gICAgcmV0dXJuIHJhbmdlICsgKGwubm9taW5hbCAhPSBudWxsID8gYCDCtyBOb21pbmFsOiAke2wubm9taW5hbH1gIDogJycpO1xuICB9XG4gIGlucHV0U3RlcChwOiBRdWFsaXR5UGFyYW1ldGVyKTogbnVtYmVyIHsgcmV0dXJuIE1hdGgucG93KDEwLCAtcC5kZWNpbWFsUGxhY2VzKTsgfVxuICBjaGFuZ2VkKGNvbXBvc2l0ZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgaSA9IHRoaXMuZm9ybT8uaW5zcGVjdGlvbjsgaWYgKCFpPy50ZW1wbGF0ZVNuYXBzaG90KSByZXR1cm47XG4gICAgdHJ5IHsgcmVjYWxjdWxhdGUodGhpcy5wYXJhbWV0ZXJzLCBjb21wb3NpdGUgPyB0aGlzLmNvbXBvc2l0ZU1lYXN1cmVtZW50cyA6IGkubWVhc3VyZW1lbnRzLCBpLnRlbXBsYXRlU25hcHNob3QubGltaXRzLCBpLmluc3BlY3RlZEF0LnNsaWNlKDAsIDEwKSwgaS5vaWxUeXBlLCBpLm9yaWdpbik7IHRoaXMuZXJyb3IgPSAnJzsgfVxuICAgIGNhdGNoIChlKSB7IHRoaXMuZXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnSGVzYXBsYW1hIHlhcMSxbGFtYWTEsS4nOyB9XG4gIH1cbiAgcGF5bG9hZCgpOiBvYmplY3Qge1xuICAgIGNvbnN0IGkgPSB0aGlzLmZvcm0hLmluc3BlY3Rpb247XG4gICAgcmV0dXJuIHsgdmVoaWNsZUVudHJ5SWQ6IGkudmVoaWNsZUVudHJ5SWQsIG1vdmVtZW50RGV0YWlsQ29kZTogaS5tb3ZlbWVudERldGFpbENvZGUsIG9yaWdpbjogaS5vcmlnaW4gfHwgJycsIHRhbmtDb2RlOiBpLnRhbmtDb2RlIHx8ICcnLCBvaWxUeXBlOiBpLm9pbFR5cGUgfHwgJycsXG4gICAgICBiYXRjaE51bWJlcjogaS5iYXRjaE51bWJlciB8fCAnJywgbm90ZXM6IGkubm90ZXMgfHwgJycsIGFuYWx5c3Q6IGkuYW5hbHlzdCwgaW5zcGVjdGVkQXQ6IG5ldyBEYXRlKGkuaW5zcGVjdGVkQXQpLnRvSVNPU3RyaW5nKCksIHJldmlzaW9uOiBpLnJldmlzaW9uLFxuICAgICAgbWVhc3VyZW1lbnRzOiBpLm1lYXN1cmVtZW50cywgZGVjaXNpb246IHRoaXMuZGVjaXNpb24gfHwgdW5kZWZpbmVkIH07XG4gIH1cbiAgc2F2ZShhcHByb3ZlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIXRoaXMuZWRpdGFibGUpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZm9ybS5pbnNwZWN0aW9uLmluc3BlY3RlZEF0IHx8IE51bWJlci5pc05hTihEYXRlLnBhcnNlKHRoaXMuZm9ybS5pbnNwZWN0aW9uLmluc3BlY3RlZEF0KSkpIHsgdGhpcy52YWxpZGF0aW9uRXJyb3IgPSAnS29udHJvbCB0YXJpaGkgdmUgc2FhdGluaSBnaXJpbi4nOyB0aGlzLmVycm9yID0gdGhpcy52YWxpZGF0aW9uRXJyb3I7IHJldHVybjsgfVxuICAgIGlmIChhcHByb3ZlICYmICF0aGlzLmRlY2lzaW9uKSB7IHRoaXMudmFsaWRhdGlvbkVycm9yID0gJ0thYnVsIHZleWEgUmV0IHNlw6dpbi4nOyB0aGlzLmVycm9yID0gdGhpcy52YWxpZGF0aW9uRXJyb3I7IHJldHVybjsgfVxuICAgIGlmIChhcHByb3ZlICYmIHRoaXMuZGVjaXNpb24gPT09ICdSZWplY3RlZCcgJiYgIXRoaXMuZm9ybS5pbnNwZWN0aW9uLm5vdGVzPy50cmltKCkpIHsgdGhpcy52YWxpZGF0aW9uRXJyb3IgPSAnUmV0IGdlcmVrw6dlc2kgZ2lyaW4uJzsgdGhpcy5lcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yOyByZXR1cm47IH1cbiAgICBpZiAoIWFwcHJvdmUpIHRoaXMuZGVjaXNpb24gPSAnJztcbiAgICB0aGlzLmJ1c3kgPSB0cnVlOyB0aGlzLmVycm9yID0gJyc7IHRoaXMudmFsaWRhdGlvbkVycm9yID0gJyc7XG4gICAgdGhpcy5hcGkuc2F2ZUludGFrZSh0aGlzLnBheWxvYWQoKSkuc3Vic2NyaWJlKHsgbmV4dDogaSA9PiB7IHRoaXMuc3VjY2VzcyA9IGFwcHJvdmUgPyAnS2FsaXRlIGthcmFyxLEga2F5ZGVkaWxkaS4nIDogJ1Rhc2xhayBrYXlkZWRpbGRpLic7IHRoaXMuZm9ybSEuaW5zcGVjdGlvbiA9IGk7IGkuaW5zcGVjdGVkQXQgPSB0aGlzLmxvY2FsVGltZShpLmluc3BlY3RlZEF0KTsgdGhpcy5idXN5ID0gZmFsc2U7IH0sIGVycm9yOiBlID0+IHsgdGhpcy5lcnJvciA9IGVycm9yTWVzc2FnZShlKTsgdGhpcy5idXN5ID0gZmFsc2U7IH0gfSk7XG4gIH1cbiAgYmVnaW5Db21wb3NpdGUoKTogdm9pZCB7IHRoaXMuY29tcG9zaXRlRWRpdG9yID0gdHJ1ZTsgdGhpcy5jb21wb3NpdGVNZWFzdXJlbWVudHMgPSBbXTsgfVxuICBzYXZlQ29tcG9zaXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmZvcm0uaW5zcGVjdGlvbi5pbnNwZWN0ZWRBdCB8fCBOdW1iZXIuaXNOYU4oRGF0ZS5wYXJzZSh0aGlzLmZvcm0uaW5zcGVjdGlvbi5pbnNwZWN0ZWRBdCkpKSB7IHRoaXMuZXJyb3IgPSAnTnVtdW5lIHRhcmloaSB2ZSBzYWF0aW5pIGdpcmluLic7IHJldHVybjsgfVxuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgdGhpcy5hcGkuc2F2ZUNvbXBvc2l0ZSh7IC4uLnRoaXMucGF5bG9hZCgpLCByZXZpc2lvbjogMCwgbWVhc3VyZW1lbnRzOiB0aGlzLmNvbXBvc2l0ZU1lYXN1cmVtZW50cyB9KS5zdWJzY3JpYmUoeyBuZXh0OiBzYW1wbGUgPT4geyB0aGlzLmZvcm0hLmNvbXBvc2l0ZVNhbXBsZSA9IHNhbXBsZTsgdGhpcy5jb21wb3NpdGVFZGl0b3IgPSBmYWxzZTsgdGhpcy5idXN5ID0gZmFsc2U7IH0sIGVycm9yOiBlID0+IHsgdGhpcy5lcnJvciA9IGVycm9yTWVzc2FnZShlKTsgdGhpcy5idXN5ID0gZmFsc2U7IH0gfSk7XG4gIH1cbiAgcmVmcmVzaENvbXBvc2l0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGkgPSB0aGlzLmZvcm0uaW5zcGVjdGlvbjtcbiAgICB0aGlzLmFwaS5pbnRha2UoaS52ZWhpY2xlRW50cnlJZCwgaS5tb3ZlbWVudERldGFpbENvZGUsIGkuYmF0Y2hOdW1iZXIpLnN1YnNjcmliZSh7IG5leHQ6IHJlc3VsdCA9PiB0aGlzLmZvcm0hLmNvbXBvc2l0ZVNhbXBsZSA9IHJlc3VsdC5jb21wb3NpdGVTYW1wbGUsIGVycm9yOiBlID0+IHRoaXMuZXJyb3IgPSBlcnJvck1lc3NhZ2UoZSkgfSk7XG4gIH1cbiAgYXN5bmMgcHJpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIXRoaXMucHJpbnRBcmVhIHx8IHRoaXMuYnVzeSB8fCAhdGhpcy5hbGxvd2VkKCdQcmludCcpKSByZXR1cm47XG4gICAgdHJ5IHsgYXdhaXQgcHJpbnRGb3JtKHRoaXMucHJpbnRBcmVhLm5hdGl2ZUVsZW1lbnQsIGBHaXJkaS1Lb250cm9sLSR7dGhpcy5mb3JtLnZlaGljbGUuZG9jRW50cnl9YCk7IH1cbiAgICBjYXRjaCAoZSkgeyB0aGlzLmVycm9yID0gZXJyb3JNZXNzYWdlKGUpOyB9XG4gIH1cbiAgYmFjaygpOiB2b2lkIHsgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2FsaXRlL2ludGFrZSddKTsgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiICNwcmludEFyZWE+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj48aDM+SGFtIFlhxJ8gR2lyacWfIEthbGl0ZSBLb250cm9sPC9oMz48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIChjbGljayk9XCJiYWNrKClcIj5MaXN0ZXllIETDtm48L2J1dHRvbj48L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVycm9yXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj57eyBlcnJvciB9fTwvZGl2PjxkaXYgKm5nSWY9XCJzdWNjZXNzXCIgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzXCI+e3sgc3VjY2VzcyB9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiYnVzeVwiIGNsYXNzPVwicXVhbGl0eS1sb2FkaW5nXCIgcm9sZT1cInN0YXR1c1wiPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbXItMlwiPjwvc3Bhbj4gxLDFn2xlbSBzw7xyw7x5b3LigKY8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0gYXMgZlwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj48ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+PGg1PkFyYcOnIC8gU2V2a2l5YXQgQmlsZ2lsZXJpPC9oNT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2ZWhpY2xlLWluZm9cIj5cbiAgICAgICAgPGRpdj48bGFiZWw+U8SxcmEgLyBCZWxnZSBObzwvbGFiZWw+PHA+e3sgZi52ZWhpY2xlLnNlcXVlbmNlTnVtYmVyIH19IC8ge3sgZi52ZWhpY2xlLmRvY051bSB9fTwvcD48L2Rpdj48ZGl2PjxsYWJlbD5HaXJpxZ8gVGFyaWhpIC8gU2FhdGk8L2xhYmVsPjxwPnt7IGYudmVoaWNsZS5lbnRyeURhdGUgfCBkYXRlOidkZC5NTS55eXl5IEhIOm1tJyB9fTwvcD48L2Rpdj5cbiAgICAgICAgPGRpdj48bGFiZWw+S2FwxLEgLyBIYXJla2V0IFTDvHLDvDwvbGFiZWw+PHA+e3sgZi52ZWhpY2xlLmdhdGVDb2RlIH19IC8ge3sgZi52ZWhpY2xlLm1vdmVtZW50VHlwZU5hbWUgfX08L3A+PC9kaXY+PGRpdj48bGFiZWw+S2FteW9uIC8gRG9yc2U8L2xhYmVsPjxwPnt7IGYudmVoaWNsZS5wbGF0ZSB9fSAvIHt7IGYudmVoaWNsZS50cmFpbGVyUGxhdGUgfHwgJ+KAlCcgfX08L3A+PC9kaXY+XG4gICAgICAgIDxkaXY+PGxhYmVsPsWeb2bDtnIgLyBUZWxlZm9uPC9sYWJlbD48cD57eyBmLnZlaGljbGUuZHJpdmVyIH19IC8ge3sgZi52ZWhpY2xlLmRyaXZlclBob25lIHx8ICfigJQnIH19PC9wPjwvZGl2PjxkaXY+PGxhYmVsPlQuQy4gS2ltbGlrIC8gTcO8aMO8cjwvbGFiZWw+PHA+e3sgZi52ZWhpY2xlLmlkZW50aXR5TnVtYmVyIHx8ICfigJQnIH19IC8ge3sgZi52ZWhpY2xlLnNlYWxOdW1iZXIgfHwgJ+KAlCcgfX08L3A+PC9kaXY+XG4gICAgICAgIDxkaXY+PGxhYmVsPk11aGF0YXAgLyBHZW1pPC9sYWJlbD48cD57eyBmLnZlaGljbGUucGFydG5lck5hbWUgfHwgJ+KAlCcgfX0gLyB7eyBmLnZlaGljbGUuc2hpcE5hbWUgfHwgJ+KAlCcgfX08L3A+PC9kaXY+PGRpdj48bGFiZWw+U3RvayBOYWtsaSAvIE1hbCBHaXJpxZ9pIC8gU2lwYXJpxZ88L2xhYmVsPjxwPnt7IGYudmVoaWNsZS5zdG9ja1RyYW5zZmVyTnVtYmVyIHx8ICfigJQnIH19IC8ge3sgZi52ZWhpY2xlLnJlY2VpcHROdW1iZXIgfHwgJ+KAlCcgfX0gLyB7eyBmLnZlaGljbGUub3JkZXJOdW1iZXIgfHwgJ+KAlCcgfX08L3A+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+PGxhYmVsPkFyYcOnIEhhcmVrZXQgVMO8csO8IERldGF5xLE8L2xhYmVsPjxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImYuaW5zcGVjdGlvbi5tb3ZlbWVudERldGFpbENvZGVcIiAoY2hhbmdlKT1cImRldGFpbENoYW5nZWQoKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeSB8fCAoZi5kZXRhaWxzLmxlbmd0aCA9PT0gMSAmJiAhZi5kZXRhaWxzWzBdLmRldGFpbENvZGUpXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPlNlw6dpbjwvb3B0aW9uPjxvcHRpb24gKm5nRm9yPVwibGV0IGQgb2YgZi5kZXRhaWxzXCIgW3ZhbHVlXT1cImQuY29kZVwiPnt7IGQubmFtZSB8fCBmLnZlaGljbGUubW92ZW1lbnRUeXBlTmFtZSB9fXt7ICFkLmRldGFpbENvZGUgPyAnIChkZXRheXPEsXopJyA6ICcnIH19PC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPjxsYWJlbD5NZW7Fn2VpPC9sYWJlbD48c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmLmluc3BlY3Rpb24ub3JpZ2luXCIgKGNoYW5nZSk9XCJjaGFuZ2VkKClcIiBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlIHx8IGJ1c3lcIj48b3B0aW9uIHZhbHVlPVwiXCI+U2XDp2luPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkRvbWVzdGljXCI+xLDDpyBQaXlhc2E8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiSW1wb3J0ZWRcIj7EsHRoYWw8L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+PGxhYmVsPkthbGl0ZSBEdXJ1bXU8L2xhYmVsPjxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVhbGl0eS1zdGF0dXNcIiByb2xlPVwic3RhdHVzXCJcbiAgICAgICAgICAgIFtjbGFzcy5xdWFsaXR5LXN0YXR1cy1hY2NlcHRlZF09XCJmLmluc3BlY3Rpb24ucmV2aXNpb24gJiYgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ0FjY2VwdGVkJ1wiXG4gICAgICAgICAgICBbY2xhc3MucXVhbGl0eS1zdGF0dXMtcmVqZWN0ZWRdPVwiZi5pbnNwZWN0aW9uLnJldmlzaW9uICYmIGYuaW5zcGVjdGlvbi5zdGF0dXMgPT09ICdSZWplY3RlZCdcIlxuICAgICAgICAgICAgW2NsYXNzLnF1YWxpdHktc3RhdHVzLWRyYWZ0XT1cImYuaW5zcGVjdGlvbi5yZXZpc2lvbiAmJiBmLmluc3BlY3Rpb24uc3RhdHVzID09PSAnRHJhZnQnXCJcbiAgICAgICAgICAgIFtjbGFzcy5xdWFsaXR5LXN0YXR1cy13YWl0aW5nXT1cIiFmLmluc3BlY3Rpb24ucmV2aXNpb24gfHwgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ1dhaXRpbmcnXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZhLWNoZWNrLWNpcmNsZV09XCJmLmluc3BlY3Rpb24ucmV2aXNpb24gJiYgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ0FjY2VwdGVkJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5mYS10aW1lcy1jaXJjbGVdPVwiZi5pbnNwZWN0aW9uLnJldmlzaW9uICYmIGYuaW5zcGVjdGlvbi5zdGF0dXMgPT09ICdSZWplY3RlZCdcIlxuICAgICAgICAgICAgICBbY2xhc3MuZmEtZWRpdF09XCJmLmluc3BlY3Rpb24ucmV2aXNpb24gJiYgZi5pbnNwZWN0aW9uLnN0YXR1cyA9PT0gJ0RyYWZ0J1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5mYS1jbG9ja109XCIhZi5pbnNwZWN0aW9uLnJldmlzaW9uIHx8IGYuaW5zcGVjdGlvbi5zdGF0dXMgPT09ICdXYWl0aW5nJ1wiPjwvaT5cbiAgICAgICAgICAgIHt7IHN0YXR1c0xhYmVsKGYuaW5zcGVjdGlvbi5yZXZpc2lvbiA/IGYuaW5zcGVjdGlvbi5zdGF0dXMgOiAnV2FpdGluZycpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3A+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0zXCI+PGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgPGg1Pnt7IGYuaW5zcGVjdGlvbi50ZW1wbGF0ZVNuYXBzaG90Py5mb3JtPy5uYW1lIHx8ICfDlmzDp8O8bSAvIFBhcmFtZXRyZWxlcicgfX0gPHNtYWxsPnt7IGYuaW5zcGVjdGlvbi50ZW1wbGF0ZVNuYXBzaG90Py5mb3JtPy5kb2N1bWVudENvZGUgfX08L3NtYWxsPjwvaDU+XG4gICAgICA8cCBjbGFzcz1cInByaW50LW9ubHkgdGV4dC1tdXRlZFwiPllhecSxbjoge3sgZi5pbnNwZWN0aW9uLnRlbXBsYXRlU25hcHNob3Q/LmZvcm0/LnB1YmxpY2F0aW9uRGF0ZSB8IGRhdGU6J2RkLk1NLnl5eXknIH19IMK3IFJldml6eW9uOiB7eyBmLmluc3BlY3Rpb24udGVtcGxhdGVTbmFwc2hvdD8uZm9ybT8ucmV2aXNpb25EYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScgfX0gLyB7eyBmLmluc3BlY3Rpb24udGVtcGxhdGVTbmFwc2hvdD8uZm9ybT8ucmV2aXNpb25OdW1iZXIgfX08L3A+XG4gICAgICA8cCAqbmdJZj1cIiFwYXJhbWV0ZXJzLmxlbmd0aFwiIGNsYXNzPVwidGV4dC1tdXRlZFwiPkRldGF5IHNlw6dpbi4gQnUga2FsZW1lIGFpdCBmb3JtIHZlIHNvcnVsYXIgS2FsaXRlIFBhcmFtZXRyZWxlcmkgZWtyYW7EsW5kYW4gdGFuxLFtbGFubWFsxLFkxLFyLjwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+PHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtc20gbWVhc3VyZW1lbnQtdGFibGVcIiAqbmdJZj1cInBhcmFtZXRlcnMubGVuZ3RoXCI+XG4gICAgICAgIDx0aGVhZD48dHI+PHRoPlNvcnUgLyBQYXJhbWV0cmU8L3RoPjx0aD5CaXJpbTwvdGg+PHRoPk5vbWluYWwgLyBMaW1pdDwvdGg+PHRoPsOWbMOnw7xtIERlxJ9lcmkgLyBZYW7EsXQ8L3RoPjx0aD5VeWd1bmx1azwvdGg+PC90cj48L3RoZWFkPlxuICAgICAgICA8dGJvZHk+PHRyICpuZ0Zvcj1cImxldCBwIG9mIHBhcmFtZXRlcnNcIiBbY2xhc3Mub3V0LW9mLWxpbWl0XT1cIm1lYXN1cmVtZW50KHApLm91dE9mTGltaXRcIj5cbiAgICAgICAgICA8dGQ+e3sgcC5uYW1lIH19PHNwYW4gKm5nSWY9XCJwLnJlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPiAqPC9zcGFuPjwvdGQ+PHRkPnt7IHAudW5pdCB8fCAn4oCUJyB9fTwvdGQ+PHRkPnt7IGxpbWl0TGFiZWwocCkgfX08L3RkPlxuICAgICAgICAgIDx0ZD48aW5wdXQgKm5nSWY9XCJwLnZhbHVlVHlwZSA9PT0gJ051bWJlcidcIiB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgWyhuZ01vZGVsKV09XCJtZWFzdXJlbWVudChwKS5udW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIiBbYXR0ci5zdGVwXT1cImlucHV0U3RlcChwKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgcC5jYWxjdWxhdGVkIHx8IGJ1c3lcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInAubmFtZVwiIC8+XG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwicC52YWx1ZVR5cGUgPT09ICdDaG9pY2UnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgWyhuZ01vZGVsKV09XCJtZWFzdXJlbWVudChwKS50ZXh0XCIgKGNoYW5nZSk9XCJjaGFuZ2VkKClcIiBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlIHx8IGJ1c3lcIj48b3B0aW9uIHZhbHVlPVwiXCI+U2XDp2luPC9vcHRpb24+PG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHAub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57eyBvcHRpb24gfX08L29wdGlvbj48L3NlbGVjdD5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInAudmFsdWVUeXBlID09PSAnVGV4dCdcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbKG5nTW9kZWwpXT1cIm1lYXN1cmVtZW50KHApLnRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIiBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlIHx8IGJ1c3lcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInAubmFtZVwiIC8+XG4gICAgICAgICAgPC90ZD48dGQ+PHNwYW4gKm5nSWY9XCJtZWFzdXJlbWVudChwKS5vdXRPZkxpbWl0XCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1kYW5nZXJcIj5MaW1pdCBExLHFn8SxPC9zcGFuPjxzcGFuICpuZ0lmPVwiIW1lYXN1cmVtZW50KHApLm91dE9mTGltaXQgJiYgKG1lYXN1cmVtZW50KHApLm51bWJlciAhPSBudWxsIHx8IG1lYXN1cmVtZW50KHApLnRleHQpXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1zdWNjZXNzXCI+e3sgcC5jYWxjdWxhdGVkID8gJ090b21hdGlrJyA6ICdVeWd1bicgfX08L3NwYW4+PC90ZD5cbiAgICAgICAgPC90cj48L3Rib2R5PlxuICAgICAgPC90YWJsZT48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJwYWxtXCIgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbXQtM1wiPlxuICAgICAgICA8aDY+R2VtaSAvIFBhcnRpIEtvbXBveml0IE51bXVuZXNpPC9oNj48bGFiZWw+UGFydGkgS29kdTwvbGFiZWw+PGRpdiBjbGFzcz1cImQtZmxleFwiPjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLmJhdGNoTnVtYmVyXCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5XCIgLz48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBtbC0yXCIgKGNsaWNrKT1cInJlZnJlc2hDb21wb3NpdGUoKVwiPk51bXVuZXlpIEdldGlyPC9idXR0b24+PC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0yXCI+S2F5bmFrIG1hbCBnaXJpxZ9pIHZleWEgcGFydGkga29kdXlsYSBpbGnFn2tpbGVuZGlyaWxlbiBudW11bmUgZGnEn2VyIGFyYcOnbGFyZGEgc2FsdCBva3VudXIgZ8O2c3RlcmlsaXIuPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi5jb21wb3NpdGVTYW1wbGUgYXMgc2FtcGxlXCI+PHA+e3sgc2FtcGxlLmFuYWx5c3QgfX0gwrcge3sgc2FtcGxlLnNhbXBsZWRBdCB8IGRhdGU6J2RkLk1NLnl5eXkgSEg6bW0nIH19PC9wPjxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sLW1kLTMgbWItMlwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBzYW1wbGUubWVhc3VyZW1lbnRzXCI+PHN0cm9uZz57eyB2YWx1ZS5wYXJhbWV0ZXJOYW1lIH19PC9zdHJvbmc+OiB7eyB2YWx1ZS5udW1iZXIgIT0gbnVsbCA/IHZhbHVlLm51bWJlciA6IHZhbHVlLnRleHQgfX0ge3sgdmFsdWUudW5pdCB9fTwvZGl2PjwvZGl2PjwvbmctY29udGFpbmVyPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWYuY29tcG9zaXRlU2FtcGxlICYmIGVkaXRhYmxlICYmIGFsbG93ZWQoJ0NvbXBvc2l0ZScpICYmICFjb21wb3NpdGVFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cImJlZ2luQ29tcG9zaXRlKClcIj5Lb21wb3ppdCBOdW11bmUgR2lyPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb21wb3NpdGVFZGl0b3JcIiBjbGFzcz1cInByaW50LWV4Y2x1ZGVcIj48ZGl2IGNsYXNzPVwicm93XCI+PGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTJcIiAqbmdGb3I9XCJsZXQgcCBvZiBwYXJhbWV0ZXJzXCI+PGxhYmVsPnt7IHAubmFtZSB9fTwvbGFiZWw+PGlucHV0ICpuZ0lmPVwicC52YWx1ZVR5cGUgPT09ICdOdW1iZXInXCIgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJtZWFzdXJlbWVudChwLCB0cnVlKS5udW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKHRydWUpXCIgW2Rpc2FibGVkXT1cInAuY2FsY3VsYXRlZCB8fCBidXN5XCIgLz48c2VsZWN0ICpuZ0lmPVwicC52YWx1ZVR5cGUgPT09ICdDaG9pY2UnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIm1lYXN1cmVtZW50KHAsIHRydWUpLnRleHRcIiAoY2hhbmdlKT1cImNoYW5nZWQodHJ1ZSlcIj48b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+PG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHAub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57eyBvcHRpb24gfX08L29wdGlvbj48L3NlbGVjdD48aW5wdXQgKm5nSWY9XCJwLnZhbHVlVHlwZSA9PT0gJ1RleHQnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIm1lYXN1cmVtZW50KHAsIHRydWUpLnRleHRcIiAvPjwvZGl2PjwvZGl2PjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUNvbXBvc2l0ZSgpXCIgW2Rpc2FibGVkXT1cImJ1c3lcIj5OdW11bmV5aSBLYXlkZXQ8L2J1dHRvbj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgbWwtMlwiIChjbGljayk9XCJjb21wb3NpdGVFZGl0b3IgPSBmYWxzZVwiPlZhemdlw6c8L2J1dHRvbj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+PGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPjxoNT5EZcSfZXJsZW5kaXJtZTwvaDU+PGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+PGxhYmVsPkdlbmVsIERlxJ9lcmxlbmRpcm1lPC9sYWJlbD48c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJkZWNpc2lvblwiIFthdHRyLmRhdGEtcHJpbnQtdmFsdWVdPVwic3RhdHVzTGFiZWwoZGVjaXNpb24gfHwgKGYuaW5zcGVjdGlvbi5yZXZpc2lvbiA/IGYuaW5zcGVjdGlvbi5zdGF0dXMgOiAnV2FpdGluZycpKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiPjxvcHRpb24gdmFsdWU9XCJcIj5TZcOnaW48L29wdGlvbj48b3B0aW9uICpuZ0lmPVwiYWxsb3dlZCgnQWNjZXB0JylcIiB2YWx1ZT1cIkFjY2VwdGVkXCI+S2FidWw8L29wdGlvbj48b3B0aW9uICpuZ0lmPVwiYWxsb3dlZCgnUmVqZWN0JylcIiB2YWx1ZT1cIlJlamVjdGVkXCI+UmV0PC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj48bGFiZWw+QW5hbGl6aSBZYXBhbiAqPC9sYWJlbD48aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImYuaW5zcGVjdGlvbi5hbmFseXN0XCIgW2Rpc2FibGVkXT1cIiFlZGl0YWJsZSB8fCBidXN5XCIgLz48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPjxsYWJlbD5Lb250cm9sIFRhcmloaSAvIFNhYXRpICo8L2xhYmVsPjxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLmluc3BlY3RlZEF0XCIgKGNoYW5nZSk9XCJjaGFuZ2VkKClcIiBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlIHx8IGJ1c3lcIiAvPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+PGxhYmVsPk1pa3RhciAoa2cpPC9sYWJlbD48aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbdmFsdWVdPVwiZi5pbnNwZWN0aW9uLnF1YW50aXR5S2cgPT0gbnVsbCA/ICdUYXJ0xLFtIHNvbnJhc8SxIGdlbGlyJyA6IGYuaW5zcGVjdGlvbi5xdWFudGl0eUtnXCIgZGlzYWJsZWQgLz48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBtdC0zXCI+PGxhYmVsPlRhbmsgTm88L2xhYmVsPjxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImYuaW5zcGVjdGlvbi50YW5rQ29kZVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiPjxvcHRpb24gdmFsdWU9XCJcIj5TZcOnaW48L29wdGlvbj48b3B0aW9uICpuZ0Zvcj1cImxldCB0YW5rIG9mIHRhbmtzXCIgW3ZhbHVlXT1cInRhbmsuY29kZVwiPnt7IHRhbmsubmFtZSB9fTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG10LTNcIj48bGFiZWw+WWHEnyBDaW5zaTwvbGFiZWw+PHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZi5pbnNwZWN0aW9uLm9pbFR5cGVcIiAoY2hhbmdlKT1cImNoYW5nZWQoKVwiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiPjxvcHRpb24gdmFsdWU9XCJcIj5TZcOnaW48L29wdGlvbj48b3B0aW9uPkF5w6dpw6dlazwvb3B0aW9uPjxvcHRpb24+UmFmaW5lIEF5w6dpw6dlazwvb3B0aW9uPjxvcHRpb24+UGFsbSBPaWw8L29wdGlvbj48b3B0aW9uPlBhbG0gT2xlaW48L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbXQtM1wiPjxsYWJlbD5Bw6fEsWtsYW1hIC8gRGnEn2VyIDxzcGFuICpuZ0lmPVwiZGVjaXNpb24gPT09ICdSZWplY3RlZCdcIj4qPC9zcGFuPjwvbGFiZWw+PHRleHRhcmVhIHJvd3M9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImYuaW5zcGVjdGlvbi5ub3Rlc1wiIFtkaXNhYmxlZF09XCIhZWRpdGFibGUgfHwgYnVzeVwiPjwvdGV4dGFyZWE+PC9kaXY+XG4gICAgPC9kaXY+PGRpdiAqbmdJZj1cInZhbGlkYXRpb25FcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTMgbWItMlwiIHJvbGU9XCJhbGVydFwiPnt7IHZhbGlkYXRpb25FcnJvciB9fTwvZGl2PjxkaXYgY2xhc3M9XCJtdC0zXCI+PGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtci0yXCIgKGNsaWNrKT1cInNhdmUoZmFsc2UpXCIgW2Rpc2FibGVkXT1cImJ1c3kgfHwgIXBhcmFtZXRlcnMubGVuZ3RoXCI+S2F5ZGV0PC9idXR0b24+PGJ1dHRvbiAqbmdJZj1cImVkaXRhYmxlICYmIChhbGxvd2VkKCdBY2NlcHQnKSB8fCBhbGxvd2VkKCdSZWplY3QnKSlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgKGNsaWNrKT1cInNhdmUodHJ1ZSlcIiBbZGlzYWJsZWRdPVwiYnVzeSB8fCAhcGFyYW1ldGVycy5sZW5ndGhcIj5LYXlkZXQgdmUgT25heWxhPC9idXR0b24+PGJ1dHRvbiAqbmdJZj1cImFsbG93ZWQoJ1ByaW50JylcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgbXItMlwiIChjbGljayk9XCJwcmludCgpXCIgW2Rpc2FibGVkXT1cImJ1c3kgfHwgIWYuaW5zcGVjdGlvbi5yZXZpc2lvblwiPkZvcm11IFlhemTEsXI8L2J1dHRvbj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiYmFjaygpXCI+VmF6Z2XDpzwvYnV0dG9uPjwvZGl2PlxuICAgIDxwICpuZ0lmPVwiIWYuY2FuRWRpdFwiIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0zXCI+QXJhw6cgdGFydMSxbWEgZ2lyZGnEn2ksIMOnxLFrdMSxxJ/EsSB2ZXlhIGlwdGFsIGVkaWxkacSfaSBpw6dpbiBrYXnEsXQgc2FsdCBva3VudXIuPC9wPlxuICAgIDwvZGl2PjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19